From 3d6a62e10cb3fed36c3d98ea484983a412df0163 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=C4=9Bzslav=20Dvo=C5=99=C3=A1k?= Date: Fri, 13 Sep 2024 16:41:47 +0200 Subject: [PATCH] strict types update III --- .env.example | 13 + .gitignore | 1 + .php-cs-fixer.dist.php | 105 + Makefile | 29 + README.md | 28 +- composer.json | 13 +- composer.lock | 4753 ++++++++++++++--- ...oda-sql_raiffeisenbank.multiflexi.app.json | 185 + .../pohoda_raiffeisenbank.multiflexi.app.json | 3 +- phpstan-default-baseline.neon | 2 + phpstan-default.neon.dist | 9 + pohoda-raiffeisenbank-statements.svg | 681 +++ .../RaiffeisenBank/PohodaBankClient.php | 165 +- src/Pohoda/RaiffeisenBank/Statementor.php | 234 +- src/Pohoda/RaiffeisenBank/Transactor.php | 180 +- src/pohoda-raiffeisenbank-setup.php | 34 +- src/pohoda-raiffeisenbank-statements.php | 67 +- src/pohoda-raiffeisenbank-transactions.php | 22 +- src/pohoda-raiffeisenbank-xml-statement.php | 37 +- transactions.png | Bin 0 -> 145409 bytes 20 files changed, 5367 insertions(+), 1194 deletions(-) create mode 100644 .php-cs-fixer.dist.php create mode 100644 Makefile create mode 100644 multiflexi/pohoda-sql_raiffeisenbank.multiflexi.app.json create mode 100644 phpstan-default-baseline.neon create mode 100644 phpstan-default.neon.dist create mode 100644 pohoda-raiffeisenbank-statements.svg create mode 100644 transactions.png diff --git a/.env.example b/.env.example index 4377b79..2984747 100644 --- a/.env.example +++ b/.env.example @@ -27,3 +27,16 @@ DB_PORT=1433 DB_DATABASE=StwPh_12345678_2023 DB_USERNAME=sa DB_PASSWORD=XXXXX +DB_SETTINGS=encrypt=false + +POHODA_DOCS='C:\Program Files (x86)\STORMWARE\POHODA SQL\Dokumenty' +DOWNLOAD_LINK_PREFIX=https://spojenetsro.sharepoint.com/:w:/r/sites/Vvojasystmy/Sdilene%20dokumenty/Banky/ + +OFFICE365_USERNAME=vitezslav.dvorak@spojenet.cz +OFFICE365_PASSWORD=************* +OFFICE365_CLIENTID=00000000-0000-0000-0000-000000000000 +OFFICE365_SECRET=00000000-0000-0000-0000-000000000000 +OFFICE365_CLSECRET=00000~00000-000000~0000000000000000.Ucb2 +OFFICE365_TENANT=spojenetsro +OFFICE365_SITE=Vvojasystmy +OFFICE365_PATH='Sdilene dokumenty/Banky/' diff --git a/.gitignore b/.gitignore index 7faa1c8..9d9c25b 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ output.xml /debian/multiflexi-pohoda-raiffeisenbank/ /debian/multiflexi-pohoda-raiffeisenbank.debhelper.log /debian/pohoda-raiffeisenbank.debhelper.log +/.build/ diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php new file mode 100644 index 0000000..b4e8fea --- /dev/null +++ b/.php-cs-fixer.dist.php @@ -0,0 +1,105 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Ergebnis\PhpCsFixer\Config\Factory; +use Ergebnis\PhpCsFixer\Config\Rules; +use Ergebnis\PhpCsFixer\Config\RuleSet\Php74; + +$header = <<<'HEADER' +This file is part of the PohodaRaiffeisenbank package + +https://github.com/Spoje-NET/pohoda-raiffeisenbank + +(c) Spoje.Net IT s.r.o. + +For the full copyright and license information, please view the LICENSE +file that was distributed with this source code. +HEADER; + +$ruleSet = Php74::create()->withHeader($header)->withRules(Rules::fromArray([ + 'blank_line_before_statement' => [ + 'statements' => [ + 'break', + 'continue', + 'declare', + 'default', + 'do', + 'exit', + 'for', + 'foreach', + 'goto', + 'if', + 'include', + 'include_once', + 'require', + 'require_once', + 'return', + 'switch', + 'throw', + 'try', + 'while', + ], + ], + 'concat_space' => [ + 'spacing' => 'none', + ], + 'date_time_immutable' => false, + 'error_suppression' => false, + 'final_class' => false, + 'mb_str_functions' => false, + 'native_function_invocation' => [ + 'exclude' => [ + 'sprintf', + ], + 'include' => [ + '@compiler_optimized', + ], + 'scope' => 'all', + 'strict' => false, + ], + 'php_unit_internal_class' => false, + 'php_unit_test_annotation' => [ + 'style' => 'prefix', + ], + 'php_unit_test_class_requires_covers' => false, + 'return_to_yield_from' => false, + 'phpdoc_array_type' => false, + 'phpdoc_list_type' => false, + 'attribute_empty_parentheses' => false, + 'final_public_method_for_abstract_class' => false, + 'class_attributes_separation' => [ + 'elements' => [ + 'const' => 'only_if_meta', + 'property' => 'only_if_meta', + 'trait_import' => 'none', + 'case' => 'none', + ], + ], + 'yoda_style' => false, + 'php_unit_test_case_static_method_calls' => false, +])); + +$config = Factory::fromRuleSet($ruleSet); + +$config->getFinder() + ->append([ + __DIR__.'/.php-cs-fixer.dist.php', + ]) + ->in('src') + ->in('tests'); + +$config->setCacheFile(__DIR__.'/.build/php-cs-fixer/.php-cs-fixer.cache'); + +return $config; diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..632784d --- /dev/null +++ b/Makefile @@ -0,0 +1,29 @@ +# vim: set tabstop=8 softtabstop=8 noexpandtab: +.PHONY: help +help: ## Displays this list of targets with descriptions + @grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[32m%-30s\033[0m %s\n", $$1, $$2}' + +.PHONY: static-code-analysis +static-code-analysis: vendor ## Runs a static code analysis with phpstan/phpstan + vendor/bin/phpstan analyse --configuration=phpstan-default.neon.dist --memory-limit=-1 + +.PHONY: static-code-analysis-baseline +static-code-analysis-baseline: check-symfony vendor ## Generates a baseline for static code analysis with phpstan/phpstan + vendor/bin/phpstan analyze --configuration=phpstan-default.neon.dist --generate-baseline=phpstan-default-baseline.neon --memory-limit=-1 + +.PHONY: tests +tests: vendor + vendor/bin/phpunit tests + +.PHONY: vendor +vendor: composer.json composer.lock ## Installs composer dependencies + composer install + +.PHONY: cs +cs: ## Update Coding Standards + vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php --diff --verbose + +# Use phpcs to reformat code to PSR12 +codingstandards: + phpcbf --colors --standard=PSR12 --extensions=php --ignore=vendor/ src/ + diff --git a/README.md b/README.md index 5351ee7..4ada7f5 100644 --- a/README.md +++ b/README.md @@ -31,10 +31,24 @@ Please use the .deb packages. The repository is availble: Po instalaci balíku jsou v systému k dispozici tyto nové příkazy: - * **abraflexi-raiffeisenbank-setup** - check and/or prepare Bank account setup in AbraFlexi - * **abraflexi-raiffeisenbank-transactions** - Import transactions. From latest imported or within the given scope - * **abraflexi-raiffeisenbank-statements** - Import transactions from Account Statements. - * **abraflexi-raiffeisenbank-xml-statement** - Import transactions from XML Statements file. + * **pohoda-raiffeisenbank-setup** - check and/or prepare Bank account setup in Pohoda + * **pohoda-raiffeisenbank-transactions** - Import transactions. From latest imported or within the given scope + * **pohoda-raiffeisenbank-statements** - Import transactions from Account Statements. + * **pohoda-raiffeisenbank-xml-statement** - Import transactions from XML Statements file. + + +Setup command +------------- + +Check certificate presence yet. + +Transactions tool +----------------- + +Import Bank movements from RaiffeisenBank (using [getTransactionList](https://developers.rb.cz/premium/documentation/01rbczpremiumapi#/Get%20Transaction%20List/getTransactionList) as source) +to Pohoda using mServer + +![Transactions](transactions.png?raw=true) Configuration ------------- @@ -107,6 +121,12 @@ Powered by * https://github.com/Spoje-NET/PohodaSQL * https://github.com/VitexSoftware/PHP-Pohoda-Connector +See also +-------- + +* https://github.com/Spoje-NET/pohoda-client-checker +* https://github.com/Spoje-NET/raiffeisenbank-statement-tools + MultiFlexi ---------- diff --git a/composer.json b/composer.json index 271f846..15c9a27 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "name": "vitexsoftware/pohoda-raiffeisenbank", + "name": "spojenet/pohoda-raiffeisenbank", "description": "raiffeisenbank bank statement downloader for Stormware Pohoda", "license": "MIT", "authors": [ @@ -28,6 +28,15 @@ } }, "require-dev": { - "phpunit/phpunit": "^9" + "phpunit/phpunit": "*", + "phpstan/phpstan": "*", + "friendsofphp/php-cs-fixer": "^3.61", + "ergebnis/composer-normalize": "^2.43", + "ergebnis/php-cs-fixer-config": "^6.34" + }, + "config": { + "allow-plugins": { + "ergebnis/composer-normalize": true + } } } diff --git a/composer.lock b/composer.lock index c82241d..8cc8654 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d516f6e5549082b5e9617e439fa9d342", + "content-hash": "8f24fb4f51e6a4f16bd968008afd61c4", "packages": [ { "name": "doctrine/instantiator", @@ -83,12 +83,12 @@ "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "cd03cc3c085aa94b046bd2d342b08d6b0e5d834f" + "reference": "042e47e28c5e03f1cf6772fdf3dd4e0785433e05" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/cd03cc3c085aa94b046bd2d342b08d6b0e5d834f", - "reference": "cd03cc3c085aa94b046bd2d342b08d6b0e5d834f", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/042e47e28c5e03f1cf6772fdf3dd4e0785433e05", + "reference": "042e47e28c5e03f1cf6772fdf3dd4e0785433e05", "shasum": "" }, "require": { @@ -152,7 +152,7 @@ "type": "tidelift" } ], - "time": "2024-02-05T12:02:27+00:00" + "time": "2024-07-29T08:29:21+00:00" }, { "name": "firebase/php-jwt", @@ -160,12 +160,12 @@ "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "500501c2ce893c824c801da135d02661199f60c5" + "reference": "76808fa227f3811aa5cdb3bf81233714b799a5b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/500501c2ce893c824c801da135d02661199f60c5", - "reference": "500501c2ce893c824c801da135d02661199f60c5", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/76808fa227f3811aa5cdb3bf81233714b799a5b5", + "reference": "76808fa227f3811aa5cdb3bf81233714b799a5b5", "shasum": "" }, "require": { @@ -214,9 +214,9 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.10.1" + "source": "https://github.com/firebase/php-jwt/tree/main" }, - "time": "2024-05-18T18:05:11+00:00" + "time": "2024-08-07T18:22:50+00:00" }, { "name": "fpdo/fluentpdo", @@ -344,18 +344,18 @@ "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "1ee81e5fc8613ba1ad0b095f40e17c119dd4cc93" + "reference": "d281ed313b989f213357e3be1a179f02196ac99b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1ee81e5fc8613ba1ad0b095f40e17c119dd4cc93", - "reference": "1ee81e5fc8613ba1ad0b095f40e17c119dd4cc93", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.1", - "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", + "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" @@ -368,7 +368,7 @@ "ext-curl": "*", "guzzle/client-integration-tests": "3.0.2", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -376,6 +376,7 @@ "ext-intl": "Required for Internationalized Domain Name (IDN) support", "psr/log": "Required for using the Log middleware" }, + "default-branch": true, "type": "library", "extra": { "bamarni-bin": { @@ -446,7 +447,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.9" + "source": "https://github.com/guzzle/guzzle/tree/7.9.2" }, "funding": [ { @@ -462,7 +463,7 @@ "type": "tidelift" } ], - "time": "2024-03-31T19:57:34+00:00" + "time": "2024-07-24T11:22:20+00:00" }, { "name": "guzzlehttp/promises", @@ -470,12 +471,12 @@ "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "ab801747cbf7d394d4d435c34364704f9bf048e6" + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/ab801747cbf7d394d4d435c34364704f9bf048e6", - "reference": "ab801747cbf7d394d4d435c34364704f9bf048e6", + "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", "shasum": "" }, "require": { @@ -483,7 +484,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "default-branch": true, "type": "library", @@ -530,7 +531,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0" + "source": "https://github.com/guzzle/promises/tree/2.0.3" }, "funding": [ { @@ -546,20 +547,20 @@ "type": "tidelift" } ], - "time": "2024-03-31T10:06:07+00:00" + "time": "2024-07-18T10:29:17+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.6.x-dev", + "version": "2.7.x-dev", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "a243f80a1ca7fe8ceed4deee17f12c1930efe662" + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/a243f80a1ca7fe8ceed4deee17f12c1930efe662", - "reference": "a243f80a1ca7fe8ceed4deee17f12c1930efe662", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", "shasum": "" }, "require": { @@ -574,8 +575,8 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -647,7 +648,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.6" + "source": "https://github.com/guzzle/psr7/tree/2.7.0" }, "funding": [ { @@ -663,7 +664,7 @@ "type": "tidelift" } ], - "time": "2024-03-31T10:09:24+00:00" + "time": "2024-07-18T11:15:46+00:00" }, { "name": "jms/metadata", @@ -736,12 +737,12 @@ "source": { "type": "git", "url": "https://github.com/schmittjoh/serializer.git", - "reference": "d0a24b7a89b2764a58b530981d1ab016d6a9138d" + "reference": "745aeb7c9935907afb0ccb3cca6607ebcfc953f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/d0a24b7a89b2764a58b530981d1ab016d6a9138d", - "reference": "d0a24b7a89b2764a58b530981d1ab016d6a9138d", + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/745aeb7c9935907afb0ccb3cca6607ebcfc953f5", + "reference": "745aeb7c9935907afb0ccb3cca6607ebcfc953f5", "shasum": "" }, "require": { @@ -826,7 +827,7 @@ "type": "github" } ], - "time": "2024-07-09T19:43:39+00:00" + "time": "2024-08-29T08:08:09+00:00" }, { "name": "lightools/xml", @@ -1148,16 +1149,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.29.1", + "version": "1.30.1", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4" + "reference": "51b95ec8670af41009e2b2b56873bad96682413e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fcaefacf2d5c417e928405b71b400d4ce10daaf4", - "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/51b95ec8670af41009e2b2b56873bad96682413e", + "reference": "51b95ec8670af41009e2b2b56873bad96682413e", "shasum": "" }, "require": { @@ -1189,9 +1190,9 @@ "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/1.29.1" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.30.1" }, - "time": "2024-05-31T08:52:43+00:00" + "time": "2024-09-07T20:13:05+00:00" }, { "name": "psr/http-client", @@ -1405,12 +1406,12 @@ "source": { "type": "git", "url": "https://github.com/riesenia/pohoda.git", - "reference": "9b0213093e411e29cbe5bcacca15af4f668f4119" + "reference": "c3db0a125e65fc9052f40d12725647662cd7210c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/riesenia/pohoda/zipball/9b0213093e411e29cbe5bcacca15af4f668f4119", - "reference": "9b0213093e411e29cbe5bcacca15af4f668f4119", + "url": "https://api.github.com/repos/riesenia/pohoda/zipball/c3db0a125e65fc9052f40d12725647662cd7210c", + "reference": "c3db0a125e65fc9052f40d12725647662cd7210c", "shasum": "" }, "require": { @@ -1448,9 +1449,9 @@ "description": "Pohoda XML communication", "support": { "issues": "https://github.com/riesenia/pohoda/issues", - "source": "https://github.com/riesenia/pohoda/tree/v1.19.2" + "source": "https://github.com/riesenia/pohoda/tree/master" }, - "time": "2024-04-23T12:18:37+00:00" + "time": "2024-09-10T06:44:22+00:00" }, { "name": "spojenet/pohoda-sql", @@ -1458,19 +1459,23 @@ "source": { "type": "git", "url": "https://github.com/Spoje-NET/PohodaSQL.git", - "reference": "a5bb90930c86ef79059f707634d7d61cc901b4e9" + "reference": "a29be5c60be2e3f3a1e5584dfb306382c6318667" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Spoje-NET/PohodaSQL/zipball/a5bb90930c86ef79059f707634d7d61cc901b4e9", - "reference": "a5bb90930c86ef79059f707634d7d61cc901b4e9", + "url": "https://api.github.com/repos/Spoje-NET/PohodaSQL/zipball/a29be5c60be2e3f3a1e5584dfb306382c6318667", + "reference": "a29be5c60be2e3f3a1e5584dfb306382c6318667", "shasum": "" }, "require": { "vitexsoftware/ease-fluentpdo": "dev-main" }, "require-dev": { - "phpunit/phpunit": "^9.5" + "ergebnis/composer-normalize": "^2.43", + "ergebnis/php-cs-fixer-config": "^6.34", + "friendsofphp/php-cs-fixer": "^3.61", + "phpstan/phpstan": "*", + "phpunit/phpunit": "*" }, "default-branch": true, "type": "library", @@ -1494,7 +1499,7 @@ "issues": "https://github.com/Spoje-NET/PohodaSQL/issues", "source": "https://github.com/Spoje-NET/PohodaSQL/tree/main" }, - "time": "2024-07-10T14:55:54+00:00" + "time": "2024-09-13T14:36:46+00:00" }, { "name": "symfony/deprecation-contracts", @@ -1637,16 +1642,16 @@ "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "0424dff1c58f028c451efff2045f5d92410bd540" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540", - "reference": "0424dff1c58f028c451efff2045f5d92410bd540", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -1693,7 +1698,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, "funding": [ { @@ -1709,7 +1714,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/yaml", @@ -1717,12 +1722,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "aaf847b839ab2cbe99186af15b04fed391c12c1b" + "reference": "4bc6a9f0f62bc549a9a58080f02d1a165a7c2999" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/aaf847b839ab2cbe99186af15b04fed391c12c1b", - "reference": "aaf847b839ab2cbe99186af15b04fed391c12c1b", + "url": "https://api.github.com/repos/symfony/yaml/zipball/4bc6a9f0f62bc549a9a58080f02d1a165a7c2999", + "reference": "4bc6a9f0f62bc549a9a58080f02d1a165a7c2999", "shasum": "" }, "require": { @@ -1781,7 +1786,7 @@ "type": "tidelift" } ], - "time": "2024-07-06T07:57:47+00:00" + "time": "2024-08-12T10:26:02+00:00" }, { "name": "vgrem/php-spo", @@ -1863,12 +1868,12 @@ "source": { "type": "git", "url": "https://github.com/VitexSoftware/php-ease-core.git", - "reference": "3f08bd966514bdc6b8b4b269e67a30033559db09" + "reference": "eef92eea8366d87a8b5e24fff0c07c61b4906401" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/VitexSoftware/php-ease-core/zipball/3f08bd966514bdc6b8b4b269e67a30033559db09", - "reference": "3f08bd966514bdc6b8b4b269e67a30033559db09", + "url": "https://api.github.com/repos/VitexSoftware/php-ease-core/zipball/eef92eea8366d87a8b5e24fff0c07c61b4906401", + "reference": "eef92eea8366d87a8b5e24fff0c07c61b4906401", "shasum": "" }, "require": { @@ -1917,7 +1922,7 @@ "type": "patreon" } ], - "time": "2024-06-20T18:44:15+00:00" + "time": "2024-09-13T03:49:33+00:00" }, { "name": "vitexsoftware/ease-fluentpdo", @@ -1925,12 +1930,12 @@ "source": { "type": "git", "url": "https://github.com/VitexSoftware/php-ease-fluentpdo.git", - "reference": "c6976a02a52aae285a7215d84e6729342647b6e6" + "reference": "aeb0ccc13e4546dafb416a5a6b5efe7567ca40d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/VitexSoftware/php-ease-fluentpdo/zipball/c6976a02a52aae285a7215d84e6729342647b6e6", - "reference": "c6976a02a52aae285a7215d84e6729342647b6e6", + "url": "https://api.github.com/repos/VitexSoftware/php-ease-fluentpdo/zipball/aeb0ccc13e4546dafb416a5a6b5efe7567ca40d5", + "reference": "aeb0ccc13e4546dafb416a5a6b5efe7567ca40d5", "shasum": "" }, "require": { @@ -1974,7 +1979,7 @@ "type": "patreon" } ], - "time": "2024-03-07T11:27:26+00:00" + "time": "2024-09-13T14:17:43+00:00" }, { "name": "vitexsoftware/pohoda-connector", @@ -3018,1120 +3023,1191 @@ ], "packages-dev": [ { - "name": "myclabs/deep-copy", + "name": "clue/ndjson-react", "version": "1.x-dev", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" + "url": "https://github.com/clue/reactphp-ndjson.git", + "reference": "8fc557eaa902e4f1de171b5b4eaa6246fbe4118e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/8fc557eaa902e4f1de171b5b4eaa6246fbe4118e", + "reference": "8fc557eaa902e4f1de171b5b4eaa6246fbe4118e", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3 <3.2.2" + "php": ">=5.3", + "react/stream": "^1.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" + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/event-loop": "^1.2" }, "default-branch": true, "type": "library", "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], "psr-4": { - "DeepCopy\\": "src/DeepCopy/" + "Clue\\React\\NDJson\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Create deep copies (clones) of your objects", + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.", + "homepage": "https://github.com/clue/reactphp-ndjson", "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" + "NDJSON", + "json", + "jsonlines", + "newline", + "reactphp", + "streaming" ], "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" + "issues": "https://github.com/clue/reactphp-ndjson/issues", + "source": "https://github.com/clue/reactphp-ndjson/tree/1.x" }, "funding": [ { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" } ], - "time": "2024-06-12T14:39:25+00:00" + "time": "2023-11-24T09:04:50+00:00" }, { - "name": "nikic/php-parser", - "version": "v5.1.0", + "name": "composer/pcre", + "version": "dev-main", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1" + "url": "https://github.com/composer/pcre.git", + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/683130c2ff8c2739f4822ff7ac5c873ec529abd1", - "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1", + "url": "https://api.github.com/repos/composer/pcre/zipball/63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4", "shasum": "" }, "require": { - "ext-ctype": "*", - "ext-json": "*", - "ext-tokenizer": "*", - "php": ">=7.4" + "php": "^7.4 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<1.11.10" }, "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^9.0" + "phpstan/phpstan": "^1.11.10", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8 || ^9" }, - "bin": [ - "bin/php-parse" - ], + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "autoload": { "psr-4": { - "PhpParser\\": "lib/PhpParser" + "Composer\\Pcre\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Nikita Popov" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "A PHP parser written in PHP", + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", "keywords": [ - "parser", - "php" + "PCRE", + "preg", + "regex", + "regular expression" ], "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.0" + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.3.1" }, - "time": "2024-07-01T20:03:41+00:00" + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-08-27T18:44:43+00:00" }, { - "name": "phar-io/manifest", - "version": "dev-master", + "name": "composer/semver", + "version": "dev-main", "source": { "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" + "url": "https://github.com/composer/semver.git", + "reference": "66560258514d406a04b08f12488769936cf1248d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", + "url": "https://api.github.com/repos/composer/semver/zipball/66560258514d406a04b08f12488769936cf1248d", + "reference": "66560258514d406a04b08f12488769936cf1248d", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Composer\\Semver\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" }, { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" } ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.4" + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/main" }, "funding": [ { - "url": "https://github.com/theseer", + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" } ], - "time": "2024-03-03T12:33:53+00:00" + "time": "2024-08-26T15:05:29+00:00" }, { - "name": "phar-io/version", - "version": "3.2.1", + "name": "composer/xdebug-handler", + "version": "3.0.5", "source": { "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" + }, + "require-dev": { + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" }, "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" }, { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" + "url": "https://github.com/composer", + "type": "github" }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" } ], - "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" + "time": "2024-05-06T16:37:16+00:00" }, { - "name": "phpunit/php-code-coverage", - "version": "9.2.x-dev", + "name": "ergebnis/composer-normalize", + "version": "2.43.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "39d628812d8d83344a6c1b07799e3700d830d355" + "url": "https://github.com/ergebnis/composer-normalize.git", + "reference": "4b46330c84bb8f43fac79f5c5a05162fc7c80d75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/39d628812d8d83344a6c1b07799e3700d830d355", - "reference": "39d628812d8d83344a6c1b07799e3700d830d355", + "url": "https://api.github.com/repos/ergebnis/composer-normalize/zipball/4b46330c84bb8f43fac79f5c5a05162fc7c80d75", + "reference": "4b46330c84bb8f43fac79f5c5a05162fc7c80d75", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" + "composer-plugin-api": "^2.0.0", + "ergebnis/json": "^1.2.0", + "ergebnis/json-normalizer": "^4.5.0", + "ergebnis/json-printer": "^3.5.0", + "ext-json": "*", + "justinrainbow/json-schema": "^5.2.12", + "localheinz/diff": "^1.1.1", + "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" }, "require-dev": { - "phpunit/phpunit": "^9.6" - }, - "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", + "composer/composer": "^2.7.7", + "ergebnis/license": "^2.4.0", + "ergebnis/php-cs-fixer-config": "^6.30.1", + "ergebnis/phpunit-slow-test-detector": "^2.14.0", + "fakerphp/faker": "^1.23.1", + "infection/infection": "~0.26.6", + "phpunit/phpunit": "^9.6.19", + "psalm/plugin-phpunit": "~0.19.0", + "rector/rector": "^1.1.0", + "symfony/filesystem": "^5.4.40", + "vimeo/psalm": "^5.24.0" + }, + "type": "composer-plugin", "extra": { - "branch-alias": { - "dev-main": "9.2-dev" - } + "class": "Ergebnis\\Composer\\Normalize\\NormalizePlugin", + "composer-normalize": { + "indent-size": 2, + "indent-style": "space" + }, + "plugin-optional": true }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Ergebnis\\Composer\\Normalize\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Andreas Möller", + "email": "am@localheinz.com", + "homepage": "https://localheinz.com" } ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "description": "Provides a composer plugin for normalizing composer.json.", + "homepage": "https://github.com/ergebnis/composer-normalize", "keywords": [ - "coverage", - "testing", - "xunit" + "composer", + "normalize", + "normalizer", + "plugin" ], "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/9.2" + "issues": "https://github.com/ergebnis/composer-normalize/issues", + "security": "https://github.com/ergebnis/composer-normalize/blob/main/.github/SECURITY.md", + "source": "https://github.com/ergebnis/composer-normalize" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-06-29T07:23:05+00:00" + "time": "2024-06-16T13:22:18+00:00" }, { - "name": "phpunit/php-file-iterator", - "version": "3.0.x-dev", + "name": "ergebnis/json", + "version": "1.2.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "38b24367e1b340aa78b96d7cab042942d917bb84" + "url": "https://github.com/ergebnis/json.git", + "reference": "a457f25a5ba7ea11fc94f84d53678c5211abfce0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/38b24367e1b340aa78b96d7cab042942d917bb84", - "reference": "38b24367e1b340aa78b96d7cab042942d917bb84", + "url": "https://api.github.com/repos/ergebnis/json/zipball/a457f25a5ba7ea11fc94f84d53678c5211abfce0", + "reference": "a457f25a5ba7ea11fc94f84d53678c5211abfce0", "shasum": "" }, "require": { - "php": ">=7.3" + "ext-json": "*", + "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "ergebnis/data-provider": "^3.2.0", + "ergebnis/license": "^2.4.0", + "ergebnis/php-cs-fixer-config": "^6.20.0", + "ergebnis/phpunit-slow-test-detector": "^2.9.0", + "fakerphp/faker": "^1.23.1", + "infection/infection": "~0.26.6", + "phpunit/phpunit": "^9.6.16", + "psalm/plugin-phpunit": "~0.18.4", + "rector/rector": "~0.19.2", + "vimeo/psalm": "^5.20.0" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.0-dev" + "composer-normalize": { + "indent-size": 2, + "indent-style": "space" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Ergebnis\\Json\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Andreas Möller", + "email": "am@localheinz.com", + "homepage": "https://localheinz.com" } ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "description": "Provides a Json value object for representing a valid JSON string.", + "homepage": "https://github.com/ergebnis/json", "keywords": [ - "filesystem", - "iterator" + "json" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0" + "issues": "https://github.com/ergebnis/json/issues", + "security": "https://github.com/ergebnis/json/blob/main/.github/SECURITY.md", + "source": "https://github.com/ergebnis/json" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-02-11T16:23:04+00:00" + "time": "2024-01-29T15:09:24+00:00" }, { - "name": "phpunit/php-invoker", - "version": "3.1.1", + "name": "ergebnis/json-normalizer", + "version": "4.5.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + "url": "https://github.com/ergebnis/json-normalizer.git", + "reference": "f0ee9e70739f121b27fac8b743e4a52b23de2152" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "url": "https://api.github.com/repos/ergebnis/json-normalizer/zipball/f0ee9e70739f121b27fac8b743e4a52b23de2152", + "reference": "f0ee9e70739f121b27fac8b743e4a52b23de2152", "shasum": "" }, "require": { - "php": ">=7.3" + "ergebnis/json": "^1.2.0", + "ergebnis/json-pointer": "^3.4.0", + "ergebnis/json-printer": "^3.5.0", + "ergebnis/json-schema-validator": "^4.2.0", + "ext-json": "*", + "justinrainbow/json-schema": "^5.2.12", + "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" }, "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" + "composer/semver": "^3.4.0", + "ergebnis/data-provider": "^3.2.0", + "ergebnis/license": "^2.4.0", + "ergebnis/php-cs-fixer-config": "^6.20.0", + "ergebnis/phpunit-slow-test-detector": "^2.9.0", + "fakerphp/faker": "^1.23.1", + "infection/infection": "~0.26.6", + "phpunit/phpunit": "^9.6.16", + "psalm/plugin-phpunit": "~0.18.4", + "rector/rector": "~0.19.4", + "vimeo/psalm": "^5.20.0" }, "suggest": { - "ext-pcntl": "*" + "composer/semver": "If you want to use ComposerJsonNormalizer or VersionConstraintNormalizer" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Ergebnis\\Json\\Normalizer\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Andreas Möller", + "email": "am@localheinz.com", + "homepage": "https://localheinz.com" } ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "description": "Provides generic and vendor-specific normalizers for normalizing JSON documents.", + "homepage": "https://github.com/ergebnis/json-normalizer", "keywords": [ - "process" + "json", + "normalizer" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + "issues": "https://github.com/ergebnis/json-normalizer/issues", + "security": "https://github.com/ergebnis/json-normalizer/blob/main/.github/SECURITY.md", + "source": "https://github.com/ergebnis/json-normalizer" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" + "time": "2024-01-30T09:10:15+00:00" }, { - "name": "phpunit/php-text-template", - "version": "2.0.4", + "name": "ergebnis/json-pointer", + "version": "dev-main", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "url": "https://github.com/ergebnis/json-pointer.git", + "reference": "542d895d943f2c3bea57f57a95b689f556984484" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "url": "https://api.github.com/repos/ergebnis/json-pointer/zipball/542d895d943f2c3bea57f57a95b689f556984484", + "reference": "542d895d943f2c3bea57f57a95b689f556984484", "shasum": "" }, "require": { - "php": ">=7.3" + "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "ergebnis/composer-normalize": "^2.43.0", + "ergebnis/data-provider": "^3.2.0", + "ergebnis/license": "^2.4.0", + "ergebnis/php-cs-fixer-config": "^6.32.0", + "ergebnis/phpunit-slow-test-detector": "^2.15.0", + "fakerphp/faker": "^1.23.1", + "infection/infection": "~0.26.6", + "phpunit/phpunit": "^9.6.19", + "psalm/plugin-phpunit": "~0.19.0", + "rector/rector": "^1.2.1", + "vimeo/psalm": "^5.25.0" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.4-dev" + }, + "composer-normalize": { + "indent-size": 2, + "indent-style": "space" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Ergebnis\\Json\\Pointer\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Andreas Möller", + "email": "am@localheinz.com", + "homepage": "https://localheinz.com" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "description": "Provides an abstraction of a JSON pointer.", + "homepage": "https://github.com/ergebnis/json-pointer", "keywords": [ - "template" + "RFC6901", + "json", + "pointer" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + "issues": "https://github.com/ergebnis/json-pointer/issues", + "security": "https://github.com/ergebnis/json-pointer/blob/main/.github/SECURITY.md", + "source": "https://github.com/ergebnis/json-pointer" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2024-07-17T08:15:24+00:00" }, { - "name": "phpunit/php-timer", - "version": "5.0.3", + "name": "ergebnis/json-printer", + "version": "3.5.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "url": "https://github.com/ergebnis/json-printer.git", + "reference": "549e16fe6de34b8c3aee7b421be12caa552f3ced" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "url": "https://api.github.com/repos/ergebnis/json-printer/zipball/549e16fe6de34b8c3aee7b421be12caa552f3ced", + "reference": "549e16fe6de34b8c3aee7b421be12caa552f3ced", "shasum": "" }, "require": { - "php": ">=7.3" + "ext-json": "*", + "ext-mbstring": "*", + "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "ergebnis/data-provider": "^3.2.0", + "ergebnis/license": "^2.4.0", + "ergebnis/php-cs-fixer-config": "^6.20.0", + "ergebnis/phpunit-slow-test-detector": "^2.9.0", + "fakerphp/faker": "^1.23.1", + "infection/infection": "~0.26.6", + "phpunit/phpunit": "^9.6.16", + "psalm/plugin-phpunit": "~0.18.4", + "rector/rector": "~0.19.2", + "vimeo/psalm": "^5.20.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Ergebnis\\Json\\Printer\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Andreas Möller", + "email": "am@localheinz.com", + "homepage": "https://localheinz.com" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", + "description": "Provides a JSON printer, allowing for flexible indentation.", + "homepage": "https://github.com/ergebnis/json-printer", "keywords": [ - "timer" + "formatter", + "json", + "printer" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + "issues": "https://github.com/ergebnis/json-printer/issues", + "security": "https://github.com/ergebnis/json-printer/blob/main/.github/SECURITY.md", + "source": "https://github.com/ergebnis/json-printer" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" + "time": "2024-01-29T15:33:37+00:00" }, { - "name": "phpunit/phpunit", - "version": "9.6.x-dev", + "name": "ergebnis/json-schema-validator", + "version": "4.2.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "49d7820565836236411f5dc002d16dd689cde42f" + "url": "https://github.com/ergebnis/json-schema-validator.git", + "reference": "10ed514fdc3f9b71f8a92c567afea21a2f6fa1ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/49d7820565836236411f5dc002d16dd689cde42f", - "reference": "49d7820565836236411f5dc002d16dd689cde42f", + "url": "https://api.github.com/repos/ergebnis/json-schema-validator/zipball/10ed514fdc3f9b71f8a92c567afea21a2f6fa1ef", + "reference": "10ed514fdc3f9b71f8a92c567afea21a2f6fa1ef", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.5.0 || ^2", - "ext-dom": "*", + "ergebnis/json": "^1.2.0", + "ergebnis/json-pointer": "^3.4.0", "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.0", - "phar-io/manifest": "^2.0.4", - "phar-io/version": "^3.2.1", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.31", - "phpunit/php-file-iterator": "^3.0.6", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.4", - "phpunit/php-timer": "^5.0.3", - "sebastian/cli-parser": "^1.0.2", - "sebastian/code-unit": "^1.0.8", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.6", - "sebastian/environment": "^5.1.5", - "sebastian/exporter": "^4.0.6", - "sebastian/global-state": "^5.0.7", - "sebastian/object-enumerator": "^4.0.4", - "sebastian/resource-operations": "^3.0.4", - "sebastian/type": "^3.2.1", - "sebastian/version": "^3.0.2" + "justinrainbow/json-schema": "^5.2.12", + "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + "require-dev": { + "ergebnis/data-provider": "^3.2.0", + "ergebnis/license": "^2.4.0", + "ergebnis/php-cs-fixer-config": "^6.20.0", + "ergebnis/phpunit-slow-test-detector": "^2.9.0", + "fakerphp/faker": "^1.23.1", + "infection/infection": "~0.26.6", + "phpunit/phpunit": "^9.6.16", + "psalm/plugin-phpunit": "~0.18.4", + "rector/rector": "~0.19.2", + "vimeo/psalm": "^5.20.0" }, - "bin": [ - "phpunit" - ], "type": "library", "extra": { - "branch-alias": { - "dev-master": "9.6-dev" + "composer-normalize": { + "indent-size": 2, + "indent-style": "space" } }, "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] + "psr-4": { + "Ergebnis\\Json\\SchemaValidator\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Andreas Möller", + "email": "am@localheinz.com", + "homepage": "https://localheinz.com" } ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", + "description": "Provides a JSON schema validator, building on top of justinrainbow/json-schema.", + "homepage": "https://github.com/ergebnis/json-schema-validator", "keywords": [ - "phpunit", - "testing", - "xunit" + "json", + "schema", + "validator" ], "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6" + "issues": "https://github.com/ergebnis/json-schema-validator/issues", + "security": "https://github.com/ergebnis/json-schema-validator/blob/main/.github/SECURITY.md", + "source": "https://github.com/ergebnis/json-schema-validator" }, - "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": "2024-07-10T11:45:39+00:00" + "time": "2024-01-29T16:50:15+00:00" }, { - "name": "sebastian/cli-parser", - "version": "1.0.x-dev", + "name": "ergebnis/php-cs-fixer-config", + "version": "6.36.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" + "url": "https://github.com/ergebnis/php-cs-fixer-config.git", + "reference": "59357a795fc8a28131935fe50f2e17afc2593399" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "url": "https://api.github.com/repos/ergebnis/php-cs-fixer-config/zipball/59357a795fc8a28131935fe50f2e17afc2593399", + "reference": "59357a795fc8a28131935fe50f2e17afc2593399", "shasum": "" }, "require": { - "php": ">=7.3" + "erickskrauch/php-cs-fixer-custom-fixers": "~1.3.0", + "ext-filter": "*", + "friendsofphp/php-cs-fixer": "~3.64.0", + "kubawerlos/php-cs-fixer-custom-fixers": "~3.22.0", + "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "ergebnis/composer-normalize": "^2.43.0", + "ergebnis/data-provider": "^3.2.0", + "ergebnis/license": "^2.4.0", + "ergebnis/phpunit-slow-test-detector": "^2.15.0", + "ergebnis/rector-rules": "~1.0.1", + "fakerphp/faker": "^1.23.1", + "infection/infection": "~0.26.6", + "phpunit/phpunit": "^9.6.19", + "psalm/plugin-phpunit": "~0.19.0", + "rector/rector": "^1.2.4", + "symfony/filesystem": "^5.0.0 || ^6.0.0", + "symfony/process": "^5.0.0 || ^6.0.0", + "vimeo/psalm": "^5.25.0" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.0-dev" + "composer-normalize": { + "indent-size": 2, + "indent-style": "space" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Ergebnis\\PhpCsFixer\\Config\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Andreas Möller", + "email": "am@localheinz.com", + "homepage": "https://localheinz.com" } ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", + "description": "Provides a configuration factory and rule set factories for friendsofphp/php-cs-fixer.", + "homepage": "https://github.com/ergebnis/php-cs-fixer-config", "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" + "issues": "https://github.com/ergebnis/php-cs-fixer-config/issues", + "security": "https://github.com/ergebnis/php-cs-fixer-config/blob/main/.github/SECURITY.md", + "source": "https://github.com/ergebnis/php-cs-fixer-config" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:27:43+00:00" + "time": "2024-09-02T11:45:42+00:00" }, { - "name": "sebastian/code-unit", - "version": "1.0.8", + "name": "erickskrauch/php-cs-fixer-custom-fixers", + "version": "1.3.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "url": "https://github.com/erickskrauch/php-cs-fixer-custom-fixers.git", + "reference": "36fb7f8204c1e17d9b8a24910e2147d0a3973b9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "url": "https://api.github.com/repos/erickskrauch/php-cs-fixer-custom-fixers/zipball/36fb7f8204c1e17d9b8a24910e2147d0a3973b9c", + "reference": "36fb7f8204c1e17d9b8a24910e2147d0a3973b9c", "shasum": "" }, "require": { - "php": ">=7.3" + "friendsofphp/php-cs-fixer": "^3", + "php": "^7.4 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "ely/php-code-style": "^1", + "ergebnis/composer-normalize": "^2.28", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", + "phpspec/prophecy": "^1.15", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1.3", + "phpstan/phpstan": "^1.11.x-dev", + "phpstan/phpstan-phpunit": "^1.3", + "phpstan/phpstan-strict-rules": "^1.5", + "phpunit/phpunit": "^9.5", + "phpunitgoodpractices/polyfill": "^1.5", + "phpunitgoodpractices/traits": "^1.9.1", + "symfony/phpunit-bridge": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "ErickSkrauch\\PhpCsFixer\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "ErickSkrauch", + "email": "erickskrauch@ely.by" } ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", + "description": "A set of custom fixers for PHP-CS-Fixer", + "homepage": "https://github.com/erickskrauch/php-cs-fixer-custom-fixers", + "keywords": [ + "Code style", + "dev", + "php-cs-fixer" + ], "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + "issues": "https://github.com/erickskrauch/php-cs-fixer-custom-fixers/issues", + "source": "https://github.com/erickskrauch/php-cs-fixer-custom-fixers/tree/1.3.0" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" + "time": "2024-06-21T20:19:52+00:00" }, { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "name": "evenement/evenement", + "version": "v3.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "url": "https://github.com/igorw/evenement.git", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=7.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9 || ^6" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Evenement\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" } ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "description": "Événement is a very simple event dispatching library for PHP", + "keywords": [ + "event-dispatcher", + "event-emitter" + ], "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + "issues": "https://github.com/igorw/evenement/issues", + "source": "https://github.com/igorw/evenement/tree/v3.0.2" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" + "time": "2023-08-08T05:53:35+00:00" }, { - "name": "sebastian/comparator", - "version": "4.0.x-dev", + "name": "fidry/cpu-core-counter", + "version": "1.2.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "b247957a1c8dc81a671770f74b479c0a78a818f1" + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "8520451a140d3f46ac33042715115e290cf5785f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/b247957a1c8dc81a671770f74b479c0a78a818f1", - "reference": "b247957a1c8dc81a671770f74b479c0a78a818f1", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", + "reference": "8520451a140d3f46ac33042715115e290cf5785f", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "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", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Fidry\\CpuCoreCounter\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "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" + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" } ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", + "description": "Tiny utility to get the number of CPU cores.", "keywords": [ - "comparator", - "compare", - "equality" + "CPU", + "core" ], "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0" + "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/sebastianbergmann", + "url": "https://github.com/theofidry", "type": "github" } ], - "time": "2022-09-14T12:46:14+00:00" + "time": "2024-08-06T10:04:20+00:00" }, { - "name": "sebastian/complexity", - "version": "2.0.x-dev", + "name": "friendsofphp/php-cs-fixer", + "version": "v3.64.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" + "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", + "reference": "58dd9c931c785a79739310aef5178928305ffa67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/58dd9c931c785a79739310aef5178928305ffa67", + "reference": "58dd9c931c785a79739310aef5178928305ffa67", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" + "clue/ndjson-react": "^1.0", + "composer/semver": "^3.4", + "composer/xdebug-handler": "^3.0.3", + "ext-filter": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "fidry/cpu-core-counter": "^1.0", + "php": "^7.4 || ^8.0", + "react/child-process": "^0.6.5", + "react/event-loop": "^1.0", + "react/promise": "^2.0 || ^3.0", + "react/socket": "^1.0", + "react/stream": "^1.0", + "sebastian/diff": "^4.0 || ^5.0 || ^6.0", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", + "symfony/finder": "^5.4 || ^6.0 || ^7.0", + "symfony/options-resolver": "^5.4 || ^6.0 || ^7.0", + "symfony/polyfill-mbstring": "^1.28", + "symfony/polyfill-php80": "^1.28", + "symfony/polyfill-php81": "^1.28", + "symfony/process": "^5.4 || ^6.0 || ^7.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "facile-it/paraunit": "^1.3 || ^2.3", + "infection/infection": "^0.29.5", + "justinrainbow/json-schema": "^5.2", + "keradus/cli-executor": "^2.1", + "mikey179/vfsstream": "^1.6.11", + "php-coveralls/php-coveralls": "^2.7", + "php-cs-fixer/accessible-object": "^1.1", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.5", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.5", + "phpunit/phpunit": "^9.6.19 || ^10.5.21 || ^11.2", + "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters." }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "PhpCsFixer\\": "src/" + }, + "exclude-from-classmap": [ + "src/Fixer/Internal/*" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "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", + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "keywords": [ + "Static code analysis", + "fixer", + "standards", + "static analysis" + ], "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.64.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/keradus", "type": "github" } ], - "time": "2023-12-22T06:19:30+00:00" + "time": "2024-08-30T23:09:38+00:00" }, { - "name": "sebastian/diff", - "version": "4.0.x-dev", + "name": "justinrainbow/json-schema", + "version": "5.x-dev", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" + "url": "https://github.com/jsonrainbow/json-schema.git", + "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", + "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" + "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", + "json-schema/json-schema-test-suite": "1.2.0", + "phpunit/phpunit": "^4.8.35" }, + "bin": [ + "bin/validate-json" + ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" }, { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" } ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" + "json", + "schema" ], "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" + "issues": "https://github.com/jsonrainbow/json-schema/issues", + "source": "https://github.com/jsonrainbow/json-schema/tree/5.x.x" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:30:58+00:00" + "time": "2024-07-06T21:00:26+00:00" }, { - "name": "sebastian/environment", - "version": "5.1.x-dev", + "name": "kubawerlos/php-cs-fixer-custom-fixers", + "version": "v3.22.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + "url": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers.git", + "reference": "8701394f0c7cd450ac4fa577d24589122c1d5d5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "url": "https://api.github.com/repos/kubawerlos/php-cs-fixer-custom-fixers/zipball/8701394f0c7cd450ac4fa577d24589122c1d5d5e", + "reference": "8701394f0c7cd450ac4fa577d24589122c1d5d5e", "shasum": "" }, "require": { - "php": ">=7.3" + "ext-filter": "*", + "ext-tokenizer": "*", + "friendsofphp/php-cs-fixer": "^3.61.1", + "php": "^7.4 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" + "phpunit/phpunit": "^9.6.4 || ^10.5.29" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "PhpCsFixerCustomFixers\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Kuba Werłos", + "email": "werlos@gmail.com" } ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], + "description": "A set of custom fixers for PHP CS Fixer", "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1" + "issues": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers/issues", + "source": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers/tree/v3.22.0" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:03:51+00:00" + "time": "2024-08-16T20:44:35+00:00" }, { - "name": "sebastian/exporter", - "version": "4.0.x-dev", + "name": "localheinz/diff", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" + "url": "https://github.com/localheinz/diff.git", + "reference": "851bb20ea8358c86f677f5f111c4ab031b1c764c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", + "url": "https://api.github.com/repos/localheinz/diff/zipball/851bb20ea8358c86f677f5f111c4ab031b1c764c", + "reference": "851bb20ea8358c86f677f5f111c4ab031b1c764c", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" + "php": "^7.1 || ^8.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^4.2 || ^5" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, "autoload": { "classmap": [ "src/" @@ -4147,31 +4223,20 @@ "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" + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", + "description": "Fork of sebastian/diff for use with ergebnis/composer-normalize", + "homepage": "https://github.com/localheinz/diff", "keywords": [ - "export", - "exporter" + "diff", + "udiff", + "unidiff", + "unified diff" ], "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" + "source": "https://github.com/localheinz/diff/tree/main" }, "funding": [ { @@ -4179,103 +4244,106 @@ "type": "github" } ], - "time": "2024-03-02T06:33:00+00:00" + "time": "2020-07-06T04:49:32+00:00" }, { - "name": "sebastian/global-state", - "version": "5.0.x-dev", + "name": "myclabs/deep-copy", + "version": "1.x-dev", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": "^7.1 || ^8.0" }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, - "suggest": { - "ext-uopz": "*" + "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" }, + "default-branch": true, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } + "MIT" ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "description": "Create deep copies (clones) of your objects", "keywords": [ - "global state" + "clone", + "copy", + "duplicate", + "object", + "object graph" ], "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", - "type": "github" + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" } ], - "time": "2024-03-02T06:35:11+00:00" + "time": "2024-06-12T14:39:25+00:00" }, { - "name": "sebastian/lines-of-code", - "version": "1.0.x-dev", + "name": "nikic/php-parser", + "version": "v5.1.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/683130c2ff8c2739f4822ff7ac5c873ec529abd1", + "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" }, + "bin": [ + "bin/php-parse" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "5.0-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4283,51 +4351,47 @@ ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nikita Popov" } ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.0" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-22T06:20:34+00:00" + "time": "2024-07-01T20:03:41+00:00" }, { - "name": "sebastian/object-enumerator", - "version": "4.0.4", + "name": "phar-io/manifest", + "version": "dev-master", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -4340,49 +4404,186 @@ "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" + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/theseer", "type": "github" } ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2024-03-03T12:33:53+00:00" }, { - "name": "sebastian/object-reflector", - "version": "2.0.4", + "name": "phar-io/version", + "version": "3.2.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "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": "phpstan/phpstan", + "version": "2.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "22eae0badcf430bdbf90cf6e9f9a5d521e7132fa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/22eae0badcf430bdbf90cf6e9f9a5d521e7132fa", + "reference": "22eae0badcf430bdbf90cf6e9f9a5d521e7132fa", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "default-branch": true, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + } + ], + "time": "2024-09-13T14:23:54+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "58f3d89e59ac883fea107dd4f79873c0cb859497" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/58f3d89e59ac883fea107dd4f79873c0cb859497", + "reference": "58f3d89e59ac883fea107dd4f79873c0cb859497", "shasum": "" }, "require": { - "php": ">=7.3" + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^5.1.0", + "php": ">=8.2", + "phpunit/php-file-iterator": "^5.0.1", + "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.1", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.3" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "11.0.x-dev" } }, "autoload": { @@ -4397,14 +4598,21 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "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/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + "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/main" }, "funding": [ { @@ -4412,32 +4620,33 @@ "type": "github" } ], - "time": "2020-10-26T13:14:26+00:00" + "time": "2024-09-07T12:56:09+00:00" }, { - "name": "sebastian/recursion-context", - "version": "4.0.x-dev", + "name": "phpunit/php-file-iterator", + "version": "dev-main", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "4d2f732a9a11cc66a1e7af61209cb4feac924ea6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/4d2f732a9a11cc66a1e7af61209cb4feac924ea6", + "reference": "4d2f732a9a11cc66a1e7af61209cb4feac924ea6", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.3" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -4452,22 +4661,20 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", + "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/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" + "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/main" }, "funding": [ { @@ -4475,33 +4682,37 @@ "type": "github" } ], - "time": "2023-02-03T06:07:39+00:00" + "time": "2024-09-07T13:03:44+00:00" }, { - "name": "sebastian/resource-operations", + "name": "phpunit/php-invoker", "version": "dev-main", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "ff553e7482dcee39fa4acc2b175d6ddeb0f7bc25" + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "1dd1db73b639f2e14579c09c0862eeeb2c937bee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ff553e7482dcee39fa4acc2b175d6ddeb0f7bc25", - "reference": "ff553e7482dcee39fa4acc2b175d6ddeb0f7bc25", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/1dd1db73b639f2e14579c09c0862eeeb2c937bee", + "reference": "1dd1db73b639f2e14579c09c0862eeeb2c937bee", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "ext-pcntl": "*", + "phpunit/phpunit": "^11.3" + }, + "suggest": { + "ext-pcntl": "*" }, "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -4516,13 +4727,19 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], "support": { - "source": "https://github.com/sebastianbergmann/resource-operations/tree/main" + "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/main" }, "funding": [ { @@ -4530,32 +4747,33 @@ "type": "github" } ], - "time": "2024-03-14T18:47:08+00:00" + "time": "2024-09-07T13:02:17+00:00" }, { - "name": "sebastian/type", - "version": "3.2.x-dev", + "name": "phpunit/php-text-template", + "version": "dev-main", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "b7122ac2bc10a3f4c4febda153ce27703a8e8ef0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/b7122ac2bc10a3f4c4febda153ce27703a8e8ef0", + "reference": "b7122ac2bc10a3f4c4febda153ce27703a8e8ef0", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.5" + "phpunit/phpunit": "^11.3" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -4574,11 +4792,15 @@ "role": "lead" } ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2" + "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/main" }, "funding": [ { @@ -4586,29 +4808,33 @@ "type": "github" } ], - "time": "2023-02-03T06:13:03+00:00" + "time": "2024-09-07T13:05:59+00:00" }, { - "name": "sebastian/version", - "version": "3.0.x-dev", + "name": "phpunit/php-timer", + "version": "dev-main", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "bb05128da9ee40098a3e29d8f29bce910d933933" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/bb05128da9ee40098a3e29d8f29bce910d933933", + "reference": "bb05128da9ee40098a3e29d8f29bce910d933933", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -4627,11 +4853,15 @@ "role": "lead" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "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/main" }, "funding": [ { @@ -4639,7 +4869,2812 @@ "type": "github" } ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2024-09-07T13:07:55+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "1a08abebed8844702c3b1325959b8280b38d0a7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1a08abebed8844702c3b1325959b8280b38d0a7e", + "reference": "1a08abebed8844702c3b1325959b8280b38d0a7e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.12.0", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.2", + "phpunit/php-code-coverage": "^11.0.6", + "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.1", + "sebastian/comparator": "^6.1.0", + "sebastian/diff": "^6.0.2", + "sebastian/environment": "^7.2.0", + "sebastian/exporter": "^6.1.3", + "sebastian/global-state": "^7.0.2", + "sebastian/object-enumerator": "^6.0.1", + "sebastian/type": "^5.0.1", + "sebastian/version": "^5.0.1" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "default-branch": true, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "11.4-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/main" + }, + "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": "2024-09-13T05:23:55+00:00" + }, + { + "name": "psr/container", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "707984727bd5b2b670e59559d3ed2500240cf875" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/707984727bd5b2b670e59559d3ed2500240cf875", + "reference": "707984727bd5b2b670e59559d3ed2500240cf875", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "default-branch": true, + "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" + }, + "time": "2023-09-22T11:11:30+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "bbd9eacc080d33861e5b5c75b3b8c4d7e6d01874" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/bbd9eacc080d33861e5b5c75b3b8c4d7e6d01874", + "reference": "bbd9eacc080d33861e5b5c75b3b8c4d7e6d01874", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "suggest": { + "fig/event-dispatcher-util": "Provides some useful PSR-14 utilities" + }, + "default-branch": true, + "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": "https://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "source": "https://github.com/php-fig/event-dispatcher" + }, + "time": "2024-03-17T21:29:03+00:00" + }, + { + "name": "psr/log", + "version": "dev-master", + "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" + }, + "default-branch": true, + "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": "react/cache", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/reactphp/cache.git", + "reference": "36c51f36d5f3c23cfcc2b5dc5e443bb5ff085605" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/cache/zipball/36c51f36d5f3c23cfcc2b5dc5e443bb5ff085605", + "reference": "36c51f36d5f3c23cfcc2b5dc5e443bb5ff085605", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/promise": "^3.0 || ^2.0 || ^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "React\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, Promise-based cache interface for ReactPHP", + "keywords": [ + "cache", + "caching", + "promise", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/cache/issues", + "source": "https://github.com/reactphp/cache/tree/1.x" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-01-04T09:16:03+00:00" + }, + { + "name": "react/child-process", + "version": "0.6.x-dev", + "source": { + "type": "git", + "url": "https://github.com/reactphp/child-process.git", + "reference": "e71eb1aa55f057c7a4a0d08d06b0b0a484bead43" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/child-process/zipball/e71eb1aa55f057c7a4a0d08d06b0b0a484bead43", + "reference": "e71eb1aa55f057c7a4a0d08d06b0b0a484bead43", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/event-loop": "^1.2", + "react/stream": "^1.2" + }, + "require-dev": { + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35", + "react/socket": "^1.8", + "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "React\\ChildProcess\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Event-driven library for executing child processes with ReactPHP.", + "keywords": [ + "event-driven", + "process", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/child-process/issues", + "source": "https://github.com/reactphp/child-process/tree/v0.6.5" + }, + "funding": [ + { + "url": "https://github.com/WyriHaximus", + "type": "github" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2022-09-16T13:41:56+00:00" + }, + { + "name": "react/dns", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/reactphp/dns.git", + "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", + "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/cache": "^1.0 || ^0.6 || ^0.5", + "react/event-loop": "^1.2", + "react/promise": "^3.2 || ^2.7 || ^1.2.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4.3 || ^3 || ^2", + "react/promise-timer": "^1.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Dns\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async DNS resolver for ReactPHP", + "keywords": [ + "async", + "dns", + "dns-resolver", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/dns/issues", + "source": "https://github.com/reactphp/dns/tree/v1.13.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-06-13T14:18:03+00:00" + }, + { + "name": "react/event-loop", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/reactphp/event-loop.git", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "suggest": { + "ext-pcntl": "For signal handling support when using the StreamSelectLoop" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "React\\EventLoop\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", + "keywords": [ + "asynchronous", + "event-loop" + ], + "support": { + "issues": "https://github.com/reactphp/event-loop/issues", + "source": "https://github.com/reactphp/event-loop/tree/v1.5.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2023-11-13T13:48:05+00:00" + }, + { + "name": "react/promise", + "version": "3.x-dev", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63", + "shasum": "" + }, + "require": { + "php": ">=7.1.0" + }, + "require-dev": { + "phpstan/phpstan": "1.10.39 || 1.4.10", + "phpunit/phpunit": "^9.6 || ^7.5" + }, + "default-branch": true, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "React\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "support": { + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v3.2.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-05-24T10:39:05+00:00" + }, + { + "name": "react/socket", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/reactphp/socket.git", + "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", + "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/dns": "^1.13", + "react/event-loop": "^1.2", + "react/promise": "^3.2 || ^2.6 || ^1.2.1", + "react/stream": "^1.4" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4.3 || ^3.3 || ^2", + "react/promise-stream": "^1.4", + "react/promise-timer": "^1.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Socket\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", + "keywords": [ + "Connection", + "Socket", + "async", + "reactphp", + "stream" + ], + "support": { + "issues": "https://github.com/reactphp/socket/issues", + "source": "https://github.com/reactphp/socket/tree/v1.16.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-07-26T10:38:09+00:00" + }, + { + "name": "react/stream", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/reactphp/stream.git", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.8", + "react/event-loop": "^1.2" + }, + "require-dev": { + "clue/stream-filter": "~1.2", + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Stream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", + "keywords": [ + "event-driven", + "io", + "non-blocking", + "pipe", + "reactphp", + "readable", + "stream", + "writable" + ], + "support": { + "issues": "https://github.com/reactphp/stream/issues", + "source": "https://github.com/reactphp/stream/tree/v1.4.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-06-11T12:45:25+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "b9d804ce9be19c78653c4e2ade6cd484bde8d1f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/b9d804ce9be19c78653c4e2ade6cd484bde8d1f7", + "reference": "b9d804ce9be19c78653c4e2ade6cd484bde8d1f7", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "default-branch": true, + "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/main" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-09-07T09:13:25+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "8c846a9f2ac8dfba0c7763b85e2e7a2f34c4fb0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/8c846a9f2ac8dfba0c7763b85e2e7a2f34c4fb0a", + "reference": "8c846a9f2ac8dfba0c7763b85e2e7a2f34c4fb0a", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "default-branch": true, + "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/main" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-09-07T09:03:05+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "fa0fbdb8227752ec6a055184dd3861d7f96270dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/fa0fbdb8227752ec6a055184dd3861d7f96270dc", + "reference": "fa0fbdb8227752ec6a055184dd3861d7f96270dc", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "default-branch": true, + "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/main" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-09-07T12:26:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "fa37b9e2ca618cb051d71b60120952ee8ca8b03d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa37b9e2ca618cb051d71b60120952ee8ca8b03d", + "reference": "fa37b9e2ca618cb051d71b60120952ee8ca8b03d", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/diff": "^6.0", + "sebastian/exporter": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "default-branch": true, + "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": "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.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-09-11T15:42:56+00:00" + }, + { + "name": "sebastian/complexity", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "ff87283421b8a7fa452573bf3984224c45037b36" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ff87283421b8a7fa452573bf3984224c45037b36", + "reference": "ff87283421b8a7fa452573bf3984224c45037b36", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "default-branch": true, + "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/main" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-09-07T12:35:04+00:00" + }, + { + "name": "sebastian/diff", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "b8899d873092a870c372365b9615ad269298aabc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b8899d873092a870c372365b9615ad269298aabc", + "reference": "b8899d873092a870c372365b9615ad269298aabc", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3", + "symfony/process": "^4.2 || ^5" + }, + "default-branch": true, + "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/main" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-09-07T12:38:05+00:00" + }, + { + "name": "sebastian/environment", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "e4588b2b27a1d87a2dd811e1fbbb53c0736eeaec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/e4588b2b27a1d87a2dd811e1fbbb53c0736eeaec", + "reference": "e4588b2b27a1d87a2dd811e1fbbb53c0736eeaec", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "suggest": { + "ext-posix": "*" + }, + "default-branch": true, + "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/main" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-09-07T12:40:33+00:00" + }, + { + "name": "sebastian/exporter", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "575f0d22969d2a8ca2bc06ec54c215ee8feab11b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/575f0d22969d2a8ca2bc06ec54c215ee8feab11b", + "reference": "575f0d22969d2a8ca2bc06ec54c215ee8feab11b", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "default-branch": true, + "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/main" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-09-07T12:42:51+00:00" + }, + { + "name": "sebastian/global-state", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "633c9bad67155e1cde8dac81ae150cd5ff35b243" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/633c9bad67155e1cde8dac81ae150cd5ff35b243", + "reference": "633c9bad67155e1cde8dac81ae150cd5ff35b243", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^11.3" + }, + "default-branch": true, + "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/main" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-09-07T12:45:59+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "84427eb8e46173a62ef4dfb0e707a96827ff5583" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/84427eb8e46173a62ef4dfb0e707a96827ff5583", + "reference": "84427eb8e46173a62ef4dfb0e707a96827ff5583", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "default-branch": true, + "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/main" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-09-07T12:48:24+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "0bdb59b5631c8e9344d11d7fe4ece0adbac943ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/0bdb59b5631c8e9344d11d7fe4ece0adbac943ba", + "reference": "0bdb59b5631c8e9344d11d7fe4ece0adbac943ba", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "default-branch": true, + "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/main" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-09-07T12:50:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "1acd95952a7e71c994a7893a0344a05623993012" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/1acd95952a7e71c994a7893a0344a05623993012", + "reference": "1acd95952a7e71c994a7893a0344a05623993012", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "default-branch": true, + "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/main" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-09-07T12:53:12+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "76780b28836ee99eb60f3528067908367cdb4734" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/76780b28836ee99eb60f3528067908367cdb4734", + "reference": "76780b28836ee99eb60f3528067908367cdb4734", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "default-branch": true, + "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/main" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-09-07T13:12:03+00:00" + }, + { + "name": "sebastian/type", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "6d2d20027e3222c6a0493dd14f689c4cd38eaeac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/6d2d20027e3222c6a0493dd14f689c4cd38eaeac", + "reference": "6d2d20027e3222c6a0493dd14f689c4cd38eaeac", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "default-branch": true, + "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": "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/main" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-09-07T13:14:14+00:00" + }, + { + "name": "sebastian/version", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "4e4fe6166028e711f97cb80262dffa4227c7090b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/4e4fe6166028e711f97cb80262dffa4227c7090b", + "reference": "4e4fe6166028e711f97cb80262dffa4227c7090b", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "default-branch": true, + "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/main" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-09-07T13:16:40+00:00" + }, + { + "name": "symfony/console", + "version": "7.2.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "4843e2476557cf3e460a710d8f2f49a9ea9bf185" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/4843e2476557cf3e460a710d8f2f49a9ea9bf185", + "reference": "4843e2476557cf3e460a710d8f2f49a9ea9bf185", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.0" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "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/7.2" + }, + "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-08T12:34:00+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "7.2.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "1b5d04eb92dcde945a198e8bc7d28d2b0820015b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1b5d04eb92dcde945a198e8bc7d28d2b0820015b", + "reference": "1b5d04eb92dcde945a198e8bc7d28d2b0820015b", + "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/7.2" + }, + "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-08-06T10:13:52+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "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.5.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-04-18T09:32:20+00:00" + }, + { + "name": "symfony/filesystem", + "version": "7.2.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "c46c178f375c2dfddc7b6a32731077c778e14264" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/c46c178f375c2dfddc7b6a32731077c778e14264", + "reference": "c46c178f375c2dfddc7b6a32731077c778e14264", + "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/7.2" + }, + "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-07-23T10:47:31+00:00" + }, + { + "name": "symfony/finder", + "version": "7.2.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "afa87bce0d224a744963ecc8db07b1f0f96a3518" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/afa87bce0d224a744963ecc8db07b1f0f96a3518", + "reference": "afa87bce0d224a744963ecc8db07b1f0f96a3518", + "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/7.2" + }, + "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-03T13:22:29+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "default-branch": true, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.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-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "default-branch": true, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.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-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2369cb908b33d7b7518cce042615de430142497f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2369cb908b33d7b7518cce042615de430142497f", + "reference": "2369cb908b33d7b7518cce042615de430142497f", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "default-branch": true, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/1.x" + }, + "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-10T14:38:51+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "default-branch": true, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.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-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "default-branch": true, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.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-09T11:45:10+00:00" + }, + { + "name": "symfony/process", + "version": "7.2.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "8f32ef92cd811849e55149928dd156a29d362d52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/8f32ef92cd811849e55149928dd156a29d362d52", + "reference": "8f32ef92cd811849e55149928dd156a29d362d52", + "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/7.2" + }, + "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-08T12:34:00+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "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.5.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-04-18T09:32:20+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "7.2.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "a5ab03f4e61db160ffff610a4a2bebe2913bdd2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/a5ab03f4e61db160ffff610a4a2bebe2913bdd2e", + "reference": "a5ab03f4e61db160ffff610a4a2bebe2913bdd2e", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/service-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/7.2" + }, + "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-07-06T07:57:47+00:00" + }, + { + "name": "symfony/string", + "version": "7.2.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "c38cbd6dcf2a45bcfbd79fb89d6bd08f7afdc7dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/c38cbd6dcf2a45bcfbd79fb89d6bd08f7afdc7dc", + "reference": "c38cbd6dcf2a45bcfbd79fb89d6bd08f7afdc7dc", + "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/7.2" + }, + "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-08-12T10:26:02+00:00" }, { "name": "theseer/tokenizer", @@ -4703,5 +7738,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.6.0" } diff --git a/multiflexi/pohoda-sql_raiffeisenbank.multiflexi.app.json b/multiflexi/pohoda-sql_raiffeisenbank.multiflexi.app.json new file mode 100644 index 0000000..72fb617 --- /dev/null +++ b/multiflexi/pohoda-sql_raiffeisenbank.multiflexi.app.json @@ -0,0 +1,185 @@ +{ + "image": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgc29kaXBvZGk6ZG9jbmFtZT0icG9ob2RhLXJhaWZmZWlzZW5iYW5rLXN0YXRlbWVudHMuc3ZnIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjIuMiAoYjBhODQ4NjU0MSwgMjAyMi0xMi0wMSkiCiAgIGlkPSJzdmc4IgogICB2ZXJzaW9uPSIxLjEiCiAgIHZpZXdCb3g9IjAgMCAxMDAgMTAwIgogICBoZWlnaHQ9IjEwMG1tIgogICB3aWR0aD0iMTAwbW0iCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpuczA9IiZhbXA7IzM4OyMzODsjMzg7IzM4OyMzODtuc19haTsiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMyIj4KICAgIDxpbmtzY2FwZTpwYXRoLWVmZmVjdAogICAgICAgZWZmZWN0PSJwZXJzcGVjdGl2ZS1lbnZlbG9wZSIKICAgICAgIHVwX2xlZnRfcG9pbnQ9Ii0yMi44NTk1OTUsMTQwLjE1OTE4IgogICAgICAgdXBfcmlnaHRfcG9pbnQ9Ii0yMC4xMzM4MDYsMTQwLjE3NjI4IgogICAgICAgZG93bl9sZWZ0X3BvaW50PSItMjguNTEzNDA0LDE1NS45NTAzMyIKICAgICAgIGRvd25fcmlnaHRfcG9pbnQ9Ii0xNC41MzY3MDIsMTU1Ljk1MDMzIgogICAgICAgaWQ9InBhdGgtZWZmZWN0Nzk0IgogICAgICAgaXNfdmlzaWJsZT0idHJ1ZSIKICAgICAgIGxwZXZlcnNpb249IjEiCiAgICAgICBkZWZvcm1fdHlwZT0icGVyc3BlY3RpdmUiCiAgICAgICBob3Jpem9udGFsX21pcnJvcj0iZmFsc2UiCiAgICAgICB2ZXJ0aWNhbF9taXJyb3I9InRydWUiCiAgICAgICBvdmVyZmxvd19wZXJzcGVjdGl2ZT0idHJ1ZSIgLz4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMzQ0NCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoMzQ0NiIKICAgICAgICAgZD0iTSAxMS41MiwxNjIgQyAxMS41Miw4MS42NzcgMTM1LjMwNywxNi41NiAyODgsMTYuNTYgNDQwLjY5MywxNi41NiA1NjQuNDgsODEuNjc4IDU2NC40OCwxNjIgNTY0LjQ4LDI0Mi4zMjIgNDQwLjY5MywzMDcuNDQgMjg4LDMwNy40NCAxMzUuMzA3LDMwNy40NCAxMS41MiwyNDIuMzIgMTEuNTIsMTYyIiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MzQ1MiIKICAgICAgIGN4PSIwIgogICAgICAgY3k9IjAiCiAgICAgICByPSIxIgogICAgICAgZng9IjAiCiAgICAgICBmeT0iMCIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMzYzLjA2LDAsMCwtMzYzLjA2LDE3Ny41MiwyNTYuMzEpIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBzcHJlYWRNZXRob2Q9InBhZCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQ1NCIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdG9wLWNvbG9yPSIjYWViMmQ1IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM0NTYiCiAgICAgICAgIG9mZnNldD0iMC4zIgogICAgICAgICBzdG9wLWNvbG9yPSIjYWViMmQ1IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM0NTgiCiAgICAgICAgIG9mZnNldD0iMC43NSIKICAgICAgICAgc3RvcC1jb2xvcj0iIzQ4NGM4OSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNDYwIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0b3AtY29sb3I9IiM0ODRjODkiIC8+CiAgICA8L3JhZGlhbEdyYWRpZW50PgogICAgPGNsaXBQYXRoCiAgICAgICBpZD0iY2xpcFBhdGgzNDY4Ij4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGgzNDcwIgogICAgICAgICBkPSJNIDAsMzI0IEggNTc2IFYgMCBIIDAgWiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8ZmlsdGVyCiAgICAgICBzdHlsZT0iY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzOnNSR0IiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0iRHJvcCBTaGFkb3ciCiAgICAgICBpZD0iZmlsdGVyNDYyMiIKICAgICAgIHg9Ii0wLjEyMTUxODYiCiAgICAgICB5PSItMC4yMTA1MTMzNCIKICAgICAgIHdpZHRoPSIxLjI5MzY3IgogICAgICAgaGVpZ2h0PSIxLjUwODc0MDYiPgogICAgICA8ZmVGbG9vZAogICAgICAgICBmbG9vZC1vcGFjaXR5PSIwLjQ5ODAzOSIKICAgICAgICAgZmxvb2QtY29sb3I9InJnYigwLDAsMCkiCiAgICAgICAgIHJlc3VsdD0iZmxvb2QiCiAgICAgICAgIGlkPSJmZUZsb29kNDYxMiIgLz4KICAgICAgPGZlQ29tcG9zaXRlCiAgICAgICAgIGluPSJmbG9vZCIKICAgICAgICAgaW4yPSJTb3VyY2VHcmFwaGljIgogICAgICAgICBvcGVyYXRvcj0iaW4iCiAgICAgICAgIHJlc3VsdD0iY29tcG9zaXRlMSIKICAgICAgICAgaWQ9ImZlQ29tcG9zaXRlNDYxNCIgLz4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGluPSJjb21wb3NpdGUxIgogICAgICAgICBzdGREZXZpYXRpb249IjYiCiAgICAgICAgIHJlc3VsdD0iYmx1ciIKICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDYxNiIgLz4KICAgICAgPGZlT2Zmc2V0CiAgICAgICAgIGR4PSI2IgogICAgICAgICBkeT0iNiIKICAgICAgICAgcmVzdWx0PSJvZmZzZXQiCiAgICAgICAgIGlkPSJmZU9mZnNldDQ2MTgiIC8+CiAgICAgIDxmZUNvbXBvc2l0ZQogICAgICAgICBpbj0iU291cmNlR3JhcGhpYyIKICAgICAgICAgaW4yPSJvZmZzZXQiCiAgICAgICAgIG9wZXJhdG9yPSJvdmVyIgogICAgICAgICByZXN1bHQ9ImZiU291cmNlR3JhcGhpYyIKICAgICAgICAgaWQ9ImZlQ29tcG9zaXRlNDYyMCIgLz4KICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgcmVzdWx0PSJmYlNvdXJjZUdyYXBoaWNBbHBoYSIKICAgICAgICAgaW49ImZiU291cmNlR3JhcGhpYyIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAtMSAwIDAgMCAwIC0xIDAgMCAwIDAgLTEgMCAwIDAgMCAxIDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4NDYyNCIgLz4KICAgICAgPGZlRmxvb2QKICAgICAgICAgaWQ9ImZlRmxvb2Q0NjI2IgogICAgICAgICBmbG9vZC1vcGFjaXR5PSIwLjQ5ODAzOSIKICAgICAgICAgZmxvb2QtY29sb3I9InJnYigwLDAsMCkiCiAgICAgICAgIHJlc3VsdD0iZmxvb2QiCiAgICAgICAgIGluPSJmYlNvdXJjZUdyYXBoaWMiIC8+CiAgICAgIDxmZUNvbXBvc2l0ZQogICAgICAgICBpbjI9ImZiU291cmNlR3JhcGhpYyIKICAgICAgICAgaWQ9ImZlQ29tcG9zaXRlNDYyOCIKICAgICAgICAgaW49ImZsb29kIgogICAgICAgICBvcGVyYXRvcj0iaW4iCiAgICAgICAgIHJlc3VsdD0iY29tcG9zaXRlMSIgLz4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjQ2MzAiCiAgICAgICAgIGluPSJjb21wb3NpdGUxIgogICAgICAgICBzdGREZXZpYXRpb249IjYiCiAgICAgICAgIHJlc3VsdD0iYmx1ciIgLz4KICAgICAgPGZlT2Zmc2V0CiAgICAgICAgIGlkPSJmZU9mZnNldDQ2MzIiCiAgICAgICAgIGR4PSI2IgogICAgICAgICBkeT0iNiIKICAgICAgICAgcmVzdWx0PSJvZmZzZXQiIC8+CiAgICAgIDxmZUNvbXBvc2l0ZQogICAgICAgICBpbjI9Im9mZnNldCIKICAgICAgICAgaWQ9ImZlQ29tcG9zaXRlNDYzNCIKICAgICAgICAgaW49ImZiU291cmNlR3JhcGhpYyIKICAgICAgICAgb3BlcmF0b3I9Im92ZXIiCiAgICAgICAgIHJlc3VsdD0iZmJTb3VyY2VHcmFwaGljIiAvPgogICAgICA8ZmVDb2xvck1hdHJpeAogICAgICAgICByZXN1bHQ9ImZiU291cmNlR3JhcGhpY0FscGhhIgogICAgICAgICBpbj0iZmJTb3VyY2VHcmFwaGljIgogICAgICAgICB2YWx1ZXM9IjAgMCAwIC0xIDAgMCAwIDAgLTEgMCAwIDAgMCAtMSAwIDAgMCAwIDEgMCIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXg0NjM2IiAvPgogICAgICA8ZmVGbG9vZAogICAgICAgICBpZD0iZmVGbG9vZDQ2MzgiCiAgICAgICAgIGZsb29kLW9wYWNpdHk9IjAuNDk4MDM5IgogICAgICAgICBmbG9vZC1jb2xvcj0icmdiKDAsMCwwKSIKICAgICAgICAgcmVzdWx0PSJmbG9vZCIKICAgICAgICAgaW49ImZiU291cmNlR3JhcGhpYyIgLz4KICAgICAgPGZlQ29tcG9zaXRlCiAgICAgICAgIGluMj0iZmJTb3VyY2VHcmFwaGljIgogICAgICAgICBpZD0iZmVDb21wb3NpdGU0NjQwIgogICAgICAgICBpbj0iZmxvb2QiCiAgICAgICAgIG9wZXJhdG9yPSJpbiIKICAgICAgICAgcmVzdWx0PSJjb21wb3NpdGUxIiAvPgogICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDY0MiIKICAgICAgICAgaW49ImNvbXBvc2l0ZTEiCiAgICAgICAgIHN0ZERldmlhdGlvbj0iNiIKICAgICAgICAgcmVzdWx0PSJibHVyIiAvPgogICAgICA8ZmVPZmZzZXQKICAgICAgICAgaWQ9ImZlT2Zmc2V0NDY0NCIKICAgICAgICAgZHg9IjYiCiAgICAgICAgIGR5PSI2IgogICAgICAgICByZXN1bHQ9Im9mZnNldCIgLz4KICAgICAgPGZlQ29tcG9zaXRlCiAgICAgICAgIGluMj0ib2Zmc2V0IgogICAgICAgICBpZD0iZmVDb21wb3NpdGU0NjQ2IgogICAgICAgICBpbj0iZmJTb3VyY2VHcmFwaGljIgogICAgICAgICBvcGVyYXRvcj0ib3ZlciIKICAgICAgICAgcmVzdWx0PSJjb21wb3NpdGUyIiAvPgogICAgPC9maWx0ZXI+CiAgICA8ZmlsdGVyCiAgICAgICBzdHlsZT0iY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzOnNSR0IiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0iQmx1ciIKICAgICAgIGlkPSJmaWx0ZXIyMDU4Ij4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMTAuNTYzNSAwLjAxIgogICAgICAgICByZXN1bHQ9ImZiU291cmNlR3JhcGhpYyIKICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyMjA1NiIgLz4KICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgcmVzdWx0PSJmYlNvdXJjZUdyYXBoaWNBbHBoYSIKICAgICAgICAgaW49ImZiU291cmNlR3JhcGhpYyIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAtMSAwIDAgMCAwIC0xIDAgMCAwIDAgLTEgMCAwIDAgMCAxIDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4MjA2MCIgLz4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjIwNjIiCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMTAuNTYzNSAwLjAxIgogICAgICAgICByZXN1bHQ9ImJsdXIiCiAgICAgICAgIGluPSJmYlNvdXJjZUdyYXBoaWMiIC8+CiAgICA8L2ZpbHRlcj4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9IlhNTElEXzFfIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iMTY4LjAzNjEiCiAgICAgICB5MT0iMTY4LjIxMDAxIgogICAgICAgeDI9IjgzLjE0OTkwMiIKICAgICAgIHkyPSI4My4zMjQzMDMiPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM2RDdCQjAiCiAgICAgICAgIGlkPSJzdG9wMTY0IiAvPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM5OUFDRDIiCiAgICAgICAgIGlkPSJzdG9wMTY1IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9IlhNTElEXzJfIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iMTY4LjcxNzgiCiAgICAgICB5MT0iMTc0LjYzNTciCiAgICAgICB4Mj0iODMuODMxNzAzIgogICAgICAgeTI9Ijg5Ljc1MDI5OCI+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzZEN0JCMCIKICAgICAgICAgaWQ9InN0b3AxNzEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6Izk5QUNEMiIKICAgICAgICAgaWQ9InN0b3AxNzIiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0iWE1MSURfM18iCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSIxMjYuOTc5NSIKICAgICAgIHkxPSIxMzAuOTkyMiIKICAgICAgIHgyPSIyMzMuNTYyMTkiCiAgICAgICB5Mj0iMjM3LjU3NiIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC45OTI5LC0wLjExOTEsLTAuMDU2LDEuMDEzOCw3Ljc1NTYsOC44NzYpIj4KICAgICAgPHN0b3AKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojRDhFMUVEIgogICAgICAgICBpZD0ic3RvcDE3OCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNUU3NkFBIgogICAgICAgICBpZD0ic3RvcDE3OSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJYTUxJRF80XyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9IjEyNi4wMzgxIgogICAgICAgeTE9IjE0NC44MTg0MSIKICAgICAgIHgyPSIxMjYuMDM4MSIKICAgICAgIHkyPSI3Ny41NjcyOTkiPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM4MDhEQzIiCiAgICAgICAgIGlkPSJzdG9wMTg1IiAvPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1RTc2QUEiCiAgICAgICAgIGlkPSJzdG9wMTg2IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9IlhNTElEXzVfIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iMTIxLjI3NjkiCiAgICAgICB5MT0iOTEuOTcxNzAzIgogICAgICAgeDI9IjEyMS4yNzY5IgogICAgICAgeTI9IjEzLjM4NzkiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuOTkyOSwtMC4xMTkxLC0wLjA1NiwxLjAxMzgsNy43NTU2LDguODc2KSI+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I0RCRThGMiIKICAgICAgICAgaWQ9InN0b3AxOTIiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMC4yODQ3IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojRDlFNkYxIgogICAgICAgICBpZD0ic3RvcDE5MyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgb2Zmc2V0PSIwLjQzNTkiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNEMURGRUQiCiAgICAgICAgIGlkPSJzdG9wMTk0IiAvPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjAuNTU1NyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I0MzRDNFNyIKICAgICAgICAgaWQ9InN0b3AxOTUiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMC42NTkiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNCMEMzREYiCiAgICAgICAgIGlkPSJzdG9wMTk2IiAvPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjAuNzUxOCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6Izk3QUREMyIKICAgICAgICAgaWQ9InN0b3AxOTciIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMC44MzciCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM3ODkzQzUiCiAgICAgICAgIGlkPSJzdG9wMTk4IiAvPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjAuOTE2MyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzU0NzNCNSIKICAgICAgICAgaWQ9InN0b3AxOTkiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMC45ODkxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMkI1MEEyIgogICAgICAgICBpZD0ic3RvcDIwMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMjQ0QTlGIgogICAgICAgICBpZD0ic3RvcDIwMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM4MTctMSIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDM5NzUiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC44MDIzMDM0NiwxLjA2NDUwMTJlLTcsLTEuMTg5NzM3NmUtNywwLjg5NjY5MjgxLDE4MC44OTEwNCwxMDkuNTM3MzgpIgogICAgICAgY3g9IjEyNCIKICAgICAgIGN5PSIxMDIxLjkyNjciCiAgICAgICBmeD0iMTI0IgogICAgICAgZnk9IjEwMjEuOTI2NyIKICAgICAgIHI9IjIxLjE4ODk5IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzODE3LTEiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wMzgxOS03IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZiYzAwO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMzgyMS00IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImEiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSItMjkwMS45NTE5IgogICAgICAgeTE9IjkyMy41NzMiCiAgICAgICB4Mj0iLTIwNjEuMjQ5IgogICAgICAgeTI9IjE0MjAuMzMxMSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC4xMjM0LDAsMCwtMC4xMjM0LDExNTguMzMsMTU1MC4yNzMpIj4KICAgICAgPHN0b3AKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdG9wLWNvbG9yPSIjOTA5Y2E5IgogICAgICAgICBpZD0ic3RvcDIwNTAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3RvcC1jb2xvcj0iI2VkZWRlZSIKICAgICAgICAgaWQ9InN0b3AyMDUyIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImIiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSItMjg4Mi43IgogICAgICAgeTE9IjEwMjg4LjgxIgogICAgICAgeDI9Ii0yMjA2LjI0OSIKICAgICAgIHkyPSIxMDI4OC44MSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC4xMjM0LDAsMCwtMC4xMjM0LDExNTguMzMsMTU1MC4yNzMpIj4KICAgICAgPHN0b3AKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdG9wLWNvbG9yPSIjOTM5ZmFiIgogICAgICAgICBpZD0ic3RvcDIwNTciIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3RvcC1jb2xvcj0iI2RjZGVlMSIKICAgICAgICAgaWQ9InN0b3AyMDU5IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgaWQ9ImMiCiAgICAgICBjeD0iLTE0MjE3LjQ0OCIKICAgICAgIGN5PSI3Mjc3LjcwNTEiCiAgICAgICByPSI4OTguMTIiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjExODUsLTAuMDE3OCwtMC4wMzYsMC4yMzcsLTE5OC45NTUsLTEzMTQuNDE1KSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3AKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdG9wLWNvbG9yPSIjZWUzNTJjIgogICAgICAgICBpZD0ic3RvcDIwNjQiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3RvcC1jb2xvcj0iI2E5MWQyMiIKICAgICAgICAgaWQ9InN0b3AyMDY2IiAvPgogICAgPC9yYWRpYWxHcmFkaWVudD4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTEyNSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXJvdGF0aW9uPSIwIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImcyNTk4IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJtbSIKICAgICBpbmtzY2FwZTpjeT0iMTg5LjkwODY4IgogICAgIGlua3NjYXBlOmN4PSItOC41ODYyOTY2IgogICAgIGlua3NjYXBlOnpvb209IjAuOTg5OTQ5NSIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBpZD0iYmFzZSIKICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTpwYWdlY2hlY2tlcmJvYXJkPSIwIgogICAgIGlua3NjYXBlOmRlc2tjb2xvcj0iI2QxZDFkMSIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE1Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlkPSJsYXllcjEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpbmtzY2FwZTpsYWJlbD0iVnJzdHZhIDEiIC8+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iVnJzdHZhIDMiCiAgICAgaWQ9ImxheWVyMyIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIj4KICAgIDxnCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjQwMzM0ODEsMCwwLDEuNDAzMzQ4MSwxMjAuNjc1NzgsNy4wMjMxMjUyKSIKICAgICAgIGlkPSJnMjU5OCI+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzAzOCIKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC44OTkwMTM5MiwwLDAsMC44OTkwMDEwOCwtOTAuODE3ODg1LC01ODcuNzMxNykiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZmlsbD0iI2IyYjJiMiIKICAgICAgICAgICBkPSJtIDQ4LjEzOCw3MDQuOTcxIHYgLTMuMjEyIGMgMCwtNC43NTcgMy44ODUsLTguODI3IDguNTIxLC05LjIzIEggMjEuMjM3IGMgLTAuNjgzLDAgLTEuMjM3LDAuMzg4IC0xLjIzNywxLjA3MSB2IDEyLjMwNCBjIDAsMC42ODUgMC41NTQsMS4wOTcgMS4yMzcsMS4wOTcgaCAyNy40OTcgYyAtMC4yOCwtMC40MDEgLTAuNTk2LC0xLjI2NCAtMC41OTYsLTIuMDMgeiIKICAgICAgICAgICBpZD0icGF0aDI5ODgiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjNTk1OTU5IgogICAgICAgICAgIGQ9Im0gNzAsNjcyLjQ0NCBjIDAsMC42ODYgLTAuNTU1LDEuMjM3IC0xLjIzOCwxLjIzNyBIIDIxLjIzNyBjIC0wLjY4MywwIC0xLjIzNywtMC41NTIgLTEuMjM3LC0xLjIzNyB2IC0xMi4zMDMgYyAwLC0wLjY4NiAwLjU1NCwtMS4yMzkgMS4yMzcsLTEuMjM5IGggNDcuNTI1IGMgMC42ODMsMCAxLjIzOCwwLjU1NCAxLjIzOCwxLjIzOSB6IgogICAgICAgICAgIGlkPSJwYXRoMjk5MCIgLz4KICAgICAgICA8Y2lyY2xlCiAgICAgICAgICAgZmlsbD0iI2Y3OTkwMyIKICAgICAgICAgICBjeD0iNjIuOTEiCiAgICAgICAgICAgY3k9IjY2Ni4yOTMwMyIKICAgICAgICAgICByPSIyLjQwNCIKICAgICAgICAgICBpZD0iY2lyY2xlMjk5MiIgLz4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJnMzAwNCI+CiAgICAgICAgICA8cG9seWdvbgogICAgICAgICAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgY2xpcC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICAgIHBvaW50cz0iNDAuMjM1LDY2My40MDEgMzcuMzUxLDY2OS4xODIgMzUuMDYsNjY5LjE4MiAzNy45NDMsNjYzLjQwMSAiCiAgICAgICAgICAgICBpZD0icG9seWdvbjI5OTQiIC8+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImczMDAyIj4KICAgICAgICAgICAgPHBvbHlnb24KICAgICAgICAgICAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgICBjbGlwLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgICAgIHBvaW50cz0iMzEuODIsNjYzLjQwMSAyOC45MzgsNjY5LjE4MiAyNi42NDQsNjY5LjE4MiAyOS41MjcsNjYzLjQwMSAiCiAgICAgICAgICAgICAgIGlkPSJwb2x5Z29uMjk5NiIgLz4KICAgICAgICAgICAgPHBvbHlnb24KICAgICAgICAgICAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgICBjbGlwLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgICAgIHBvaW50cz0iMzYuMDI5LDY2My40MDEgMzMuMTQ0LDY2OS4xODIgMzAuODUyLDY2OS4xODIgMzMuNzM2LDY2My40MDEgIgogICAgICAgICAgICAgICBpZD0icG9seWdvbjI5OTgiIC8+CiAgICAgICAgICAgIDxwb2x5Z29uCiAgICAgICAgICAgICAgIGZpbGwtcnVsZT0iZXZlbm9kZCIKICAgICAgICAgICAgICAgY2xpcC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgICAgICBwb2ludHM9IjQ0LjQ2NCw2NjMuNDAxIDQxLjU3OSw2NjkuMTgyIDM5LjI4NSw2NjkuMTgyIDQyLjE3MSw2NjMuNDAxICIKICAgICAgICAgICAgICAgaWQ9InBvbHlnb24zMDAwIiAvPgogICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiNiMmIyYjIiCiAgICAgICAgICAgZD0ibSA3MCw2ODkuMjkxIGMgMCwwLjY4NSAtMC41NTUsMS4yMzcgLTEuMjM4LDEuMjM3IEggMjEuMjM3IGMgLTAuNjgzLDAgLTEuMjM3LC0wLjU1MyAtMS4yMzcsLTEuMjM3IHYgLTEyLjMwNCBjIDAsLTAuNjg0IDAuNTU0LC0xLjIzNyAxLjIzNywtMS4yMzcgaCA0Ny41MjUgYyAwLjY4MywwIDEuMjM4LDAuNTU0IDEuMjM4LDEuMjM3IHoiCiAgICAgICAgICAgaWQ9InBhdGgzMDA2IiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZmlsbD0iI2Y3OTkwMyIKICAgICAgICAgICBkPSJtIDY1LjMxMyw2ODMuMTQxIGMgMCwxLjMyNiAtMS4wNzcsMi40MDMgLTIuNDA0LDIuNDAzIC0xLjMyOSwwIC0yLjQwNCwtMS4wNzcgLTIuNDA0LC0yLjQwMyAwLC0xLjMzMSAxLjA3NSwtMi40MDYgMi40MDQsLTIuNDA2IDEuMzI3LC0xMGUtNCAyLjQwNCwxLjA3NSAyLjQwNCwyLjQwNiB6IgogICAgICAgICAgIGlkPSJwYXRoMzAwOCIgLz4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJnMzAyMCI+CiAgICAgICAgICA8cG9seWdvbgogICAgICAgICAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgY2xpcC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgZmlsbD0iIzU5NTk1OSIKICAgICAgICAgICAgIHBvaW50cz0iNDAuMjM1LDY4MC4yNDkgMzcuMzUxLDY4Ni4wMjkgMzUuMDYsNjg2LjAyOSAzNy45NDMsNjgwLjI0OSAiCiAgICAgICAgICAgICBpZD0icG9seWdvbjMwMTAiIC8+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImczMDE4Ij4KICAgICAgICAgICAgPHBvbHlnb24KICAgICAgICAgICAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgICBjbGlwLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICAgICAgICAgIGZpbGw9IiM1OTU5NTkiCiAgICAgICAgICAgICAgIHBvaW50cz0iMzEuODIsNjgwLjI0OSAyOC45MzgsNjg2LjAyOSAyNi42NDQsNjg2LjAyOSAyOS41MjcsNjgwLjI0OSAiCiAgICAgICAgICAgICAgIGlkPSJwb2x5Z29uMzAxMiIgLz4KICAgICAgICAgICAgPHBvbHlnb24KICAgICAgICAgICAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgICBjbGlwLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICAgICAgICAgIGZpbGw9IiM1OTU5NTkiCiAgICAgICAgICAgICAgIHBvaW50cz0iMzYuMDI5LDY4MC4yNDkgMzMuMTQ0LDY4Ni4wMjkgMzAuODUyLDY4Ni4wMjkgMzMuNzM2LDY4MC4yNDkgIgogICAgICAgICAgICAgICBpZD0icG9seWdvbjMwMTQiIC8+CiAgICAgICAgICAgIDxwb2x5Z29uCiAgICAgICAgICAgICAgIGZpbGwtcnVsZT0iZXZlbm9kZCIKICAgICAgICAgICAgICAgY2xpcC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgICBmaWxsPSIjNTk1OTU5IgogICAgICAgICAgICAgICBwb2ludHM9IjQ0LjQ2NCw2ODAuMjQ5IDQxLjU3OSw2ODYuMDI5IDM5LjI4NSw2ODYuMDI5IDQyLjE3MSw2ODAuMjQ5ICIKICAgICAgICAgICAgICAgaWQ9InBvbHlnb24zMDE2IiAvPgogICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJnMzAzMiI+CiAgICAgICAgICA8cG9seWdvbgogICAgICAgICAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgY2xpcC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgZmlsbD0iIzU5NTk1OSIKICAgICAgICAgICAgIHBvaW50cz0iNDAuMjM1LDY5Ni44NiAzNy4zNTEsNzAyLjY0IDM1LjA2LDcwMi42NCAzNy45NDMsNjk2Ljg2ICIKICAgICAgICAgICAgIGlkPSJwb2x5Z29uMzAyMiIgLz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0iZzMwMzAiPgogICAgICAgICAgICA8cG9seWdvbgogICAgICAgICAgICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICAgICAgICAgIGNsaXAtcnVsZT0iZXZlbm9kZCIKICAgICAgICAgICAgICAgZmlsbD0iIzU5NTk1OSIKICAgICAgICAgICAgICAgcG9pbnRzPSIzMS44Miw2OTYuODYgMjguOTM4LDcwMi42NCAyNi42NDQsNzAyLjY0IDI5LjUyNyw2OTYuODYgIgogICAgICAgICAgICAgICBpZD0icG9seWdvbjMwMjQiIC8+CiAgICAgICAgICAgIDxwb2x5Z29uCiAgICAgICAgICAgICAgIGZpbGwtcnVsZT0iZXZlbm9kZCIKICAgICAgICAgICAgICAgY2xpcC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgICBmaWxsPSIjNTk1OTU5IgogICAgICAgICAgICAgICBwb2ludHM9IjM2LjAyOSw2OTYuODYgMzMuMTQ0LDcwMi42NCAzMC44NTIsNzAyLjY0IDMzLjczNiw2OTYuODYgIgogICAgICAgICAgICAgICBpZD0icG9seWdvbjMwMjYiIC8+CiAgICAgICAgICAgIDxwb2x5Z29uCiAgICAgICAgICAgICAgIGZpbGwtcnVsZT0iZXZlbm9kZCIKICAgICAgICAgICAgICAgY2xpcC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgICBmaWxsPSIjNTk1OTU5IgogICAgICAgICAgICAgICBwb2ludHM9IjQ0LjQ2NCw2OTYuODYgNDEuNTc5LDcwMi42NCAzOS4yODUsNzAyLjY0IDQyLjE3MSw2OTYuODYgIgogICAgICAgICAgICAgICBpZD0icG9seWdvbjMwMjgiIC8+CiAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9ImczMDM2Ij4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBmaWxsPSIjZjc5OTAzIgogICAgICAgICAgICAgZD0ibSA2OC4wMzYsNzA2LjgxMSBjIC0xLjAxMiwwIC0xLjgzOSwtMC44MjUgLTEuODM5LC0xLjg0IHYgLTMuMjEyIGMgMCwtMC44NTUgLTAuNjk1LC0xLjU0NCAtMS41NTIsLTEuNTQ0IC0wLjg0OCwwIC0xLjUzMiwwLjY4OCAtMS41MzIsMS41NDQgdiAzLjIxMiBjIDAsMS4wMTUgLTAuODM1LDEuODQgLTEuODUzLDEuODQgLTEuMDQ0LDAgLTEuODcxLC0wLjgyNSAtMS44NzEsLTEuODQgdiAtMy4yMTIgYyAwLC0wLjg1NSAtMC43LC0xLjU0NCAtMS41NDgsLTEuNTQ0IC0wLjg0OSwwIC0xLjU0MywwLjY4OCAtMS41NDMsMS41NDQgdiAzLjIxMiBjIDAsMS4wMTUgLTAuODMyLDEuODQgLTEuODQ3LDEuODQgLTEuMDE1LDAgLTEuODQxLC0wLjgyNSAtMS44NDEsLTEuODQgdiAtMy4yMTIgYyAwLC0yLjg4NiAyLjM0MywtNS4yNCA1LjIzMiwtNS4yNCAxLjE4MSwwIDIuMzA2LDAuMzk4IDMuMjQyLDEuMTMxIGwgMC4xNjgsMC4xMzkgMC4xNjcsLTAuMTM5IGMgMC45MzEsLTAuNzMyIDIuMDQ5LC0xLjEzMSAzLjIyNywtMS4xMzEgMi44OTgsMCA1LjI0NiwyLjM1NCA1LjI0Niw1LjI0IHYgMy4yMTIgYyAtMC4wMDIsMS4wMTQgLTAuODM1LDEuODQgLTEuODU2LDEuODQgeiIKICAgICAgICAgICAgIGlkPSJwYXRoMzAzNCIgLz4KICAgICAgICA8L2c+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4wNjYxNDU4MywwLDAsMC4wNjYxNDU4MywtNTYuNTE2ODMyLDM0LjYzMjUzOCkiCiAgICAgICAgIGlkPSJMYXllcl8yIgogICAgICAgICBuczA6bGF5ZXI9InllcyIKICAgICAgICAgbnMwOmVkaXRhYmxlPSJubyIKICAgICAgICAgbnMwOmRpbW1lZFBlcmNlbnQ9IjUwIgogICAgICAgICBuczA6cmdiVHJpbz0iI0ZGRkY0RjAwNEYwMCIKICAgICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGU7c3Ryb2tlOiMwMDAwMDAiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgbnMwOmtub2Nrb3V0PSJPZmYiCiAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4zNjtmaWxsOm5vbmU7c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgZD0iTSAyNTYsMjU2IEggMCBWIDAgaCAyNTYgeiIKICAgICAgICAgICBpZD0icGF0aDE1NiIgLz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjE4Mzk2MDE2LDAsMCwtMC4xNzA1ODkxOSwtMTAxLjk1MzgxLDIzMC45NTY0NykiCiAgICAgICAgIGlkPSJnMzg2MCI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0iZmlsbDojZmYwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBkPSJtIDI3MS44NzUsOTczLjY1NjI1IGEgNC4wMzQ0MDA1LDQuMDM0NDAwNSAwIDAgMCAtMy40Mzc1LDYgYyAzLjIyNiw1LjczNTEgNC41NzY0LDguOTAzMTYgNC41OTM3NSwxMS43ODEyNSAwLjAwOCwxLjMxODAyIC0wLjI4NTA3LDIuODQyNDkgLTAuOTM3NSw0LjY4NzUgYSA0LjAzNDQwMDUsNC4wMzQ0MDA1IDAgMCAwIC02LjIxODc1LC0xLjcxODc1IGMgLTQuNDQ5ODIsMy40NDM3NyAtOC4yNTUxNywxMC4yNDU3NSAtOS4zNzUsMTkuMjQ5OTUgLTEuMTE5ODMsOS4wMDQzIDEuMTA1NDQsMjAuMTM4IDEwLjE1NjI1LDMwLjM3NSAyLjUyNTE3LDIuODU2MiA2LjEzOTQ3LDUuODMzNSAxMS4xNTYyNSw2LjQ2ODggNS4wMTY3OCwwLjYzNTMgMTAuNzY5NywtMS4xMTYxIDE3LjUsLTUuODEyNSBhIDQuMDM0NDAwNSw0LjAzNDQwMDUgMCAwIDAgMC41NjI1LC0wLjUgYyAzLjQ4MjEsLTMuNTU2IDYuMDQ4MDQsLTYuODYwNyA3LjQ2ODc1LC0xMC44NzUgMS40MjA3MSwtNC4wMTQzIDEuNTc2NDUsLTguMzk2MyAxLjAzMTI1LC0xMy44MTI1IGEgNC4wMzQ0MDA1LDQuMDM0NDAwNSAwIDAgMCAtNC41MzEyNSwtMy41OTM4IGMgMC4xNjAxLC03LjAyNTcgLTEuNjk2MzcsLTEyLjg4MTggLTUuMDkzNzUsLTE3Ljk2ODcgLTQuODE2MDcsLTcuMjExMTYgLTExLjgzODA4LC0xMy4zMzQ1NyAtMTkuNjU2MjUsLTIyLjgxMjUgYSA0LjAzNDQwMDUsNC4wMzQ0MDA1IDAgMCAwIC0zLjIxODc1LC0xLjQ2ODc1IHoiCiAgICAgICAgICAgaWQ9InBhdGgzODI4IgogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBpZD0icGF0aDMwMTQiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDM5NzUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgZD0ibSAyNjguMzI4OSw5OTcuNTggMy4yNDUzMyw4LjkyNDcgYyA3LjU4MjU0LC0xMy41MTE5IDYuOTgwMjIsLTE3LjExNDIgMC40MDU2NiwtMjguODAyMyAxNi4wMzI2MywxOS40MzYzIDI4LjIwNTUyLDI1LjAyMTIgMjIuNzE3MzMsNDYuNjUxNyBsIDUuNjc5MzMsLTQuNDYyNCBjIDEuMDMxNTQsMTAuMjQ3NiAtMC43ODA0NywxNC43MzQ1IC03LjM3NjU1LDIxLjQ3MDUgLTEyLjQ4Nzg0LDguNzE0IC0xOC44NjkwMyw1LjAwNDkgLTIzLjMwMjc4LC0wLjAxIC0xNi42NzExLC0xOC44NTYxIC03LjM3NzE2LC0zOS4xNDU0IC0xLjM2ODMyLC00My43NzQxIHoiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICBpZD0iZzEyNSIKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS44MDQ2MjQ3LDAsMCwxLjgwNDYyNDcsLTExLjUyOTA3OSwtMjI2LjI0Mjc4KSIKICAgICAgICAgaW5rc2NhcGU6cGF0aC1lZmZlY3Q9IiNwYXRoLWVmZmVjdDc5NCI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgIGlkPSJwYXRoNzYiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZWQwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4zNTI3NzgiCiAgICAgICAgICAgZD0ibSAtMjcuODQ3MDU4LDE1NC43OTc5NyBoIDEyLjcxNjkyOCBsIC01LjA0OTQ0MiwtMTQuNTcxMjYgLTIuNjc1NjIsMCB6IgogICAgICAgICAgIGlua3NjYXBlOm9yaWdpbmFsLWQ9Im0gLTI4LjI0MTgzNywxNTUuNzM4NzMgaCAxMy41MTEwNCBWIDE0Mi4yMjc3IGggLTEzLjUxMTA0IHoiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgIGlkPSJwYXRoNzgiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZWQwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4zNTI3NzgiCiAgICAgICAgICAgZD0ibSAtMjcuNzEwNzY4LDE1My45NDI2MiBoIDEyLjE3OTczMiBsIC00LjY3NjEwMiwtMTMuNzI5MTUgLTIuNjc3OTc5LDAgeiIKICAgICAgICAgICBpbmtzY2FwZTpvcmlnaW5hbC1kPSJtIC0yOC40MTY0NTcsMTU1LjU2Mzc1IGggMTMuNTY5MjQgdiAtMTMuMzk0NjIgaCAtMTMuNTY5MjQgeiIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgaWQ9InBhdGg5NiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjM1Mjc3OCIKICAgICAgICAgICBkPSJtIC0yMi44ODc5NDgsMTQwLjE2NzczIDIuNzI1NjUyLDAgNS42MjU1OTQsMTUuNzgyNiAtMTMuOTYzOTk3LC0wLjAzNDYgeiBtIC00LjU2NTcwMiwxMy43NTE2MSAxMS44MzU5MzMsMC4wMTg2IC00LjU5MTUwOCwtMTMuNjgxNDcgLTIuNjM1OCwtMi4zZS00IHoiCiAgICAgICAgICAgaW5rc2NhcGU6b3JpZ2luYWwtZD0ibSAtMjguNTEzNDA0LDE0MS45NjM3NSBoIDEzLjk3NTk5NyBsIDcuMDVlLTQsMTMuOTg2NTggLTEzLjk3NjM0OSwtMC4wMDYgeiBtIDAuMzc0NjUsMTMuNTk1IDEzLjE5NjcxMSwwLjAwNCAwLjAxMDk0LC0xMy4yMDQ4MyAtMTMuMjA5MDU4LC0wLjAwMSB6IiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0ibSAtMjEuNTMzNTg1LDE0My45Nzk5OSAzLjE1NzM2NSw3LjExNjEyIDAuMDY0NzUsLTMuOTQ4NjUgLTIuNjgzMzg0LC00LjM4OTA3IDAuMjEwMzUzLC0wLjQ2NzQ4IC0wLjA5NDY2LC0wLjc2MDEzIDAuMTE5ODQsLTAuMjI2NjMgMC4wODY4MywwLjU1OTg4IDAuMjEwNzEsMC4yNzA3MiAwLjM1Mjg5MiwtMC44ODAxMyAwLjIwNDg0MSwwLjIwNzY2IGMgLTAuMDQyOTcsLTAuMTM1NjkgLTAuMTk5MjQ1LC0wLjU1MjMzIC0wLjUwMDEwNywtMC44MzI4NSAtMC4yOTU5NTMsLTAuMjc1OSAtMC40OTYzNjQsLTAuMTE4OTkgLTAuNTYzNDA3LC0wLjAxODIgbCAtMC40MTMzNzEsMC42MjMyIDAuMTMzMTU1LDAuMTgzOTUgLTAuMjgzNDY1LDAuNDYwNjkgLTAuMjgyMDcsLTAuNDYwNjkgMC4xMzM0NjUsLTAuMTgzOTUgLTAuNDExOTM0LC0wLjYyMzIgYyAtMC4wNjY4MiwtMC4xMDA4MyAtMC4yNjY4OTUsLTAuMjU3NzQgLTAuNTYzNTQ1LDAuMDE4MyAtMC4zMDEzNjUsMC4yODA0MyAtMC40NTI4ODQsMC42OTczMyAtMC40OTU5NTUsMC44MzI4OCBsIDAuMTk5NDQsLTAuMjA3NzkgMC4zNTA4ODMsMC44ODAxMiAwLjIxMjAwNCwtMC4yNzM5NSAwLjA4NzI2LC0wLjU1NjY0IDAuMTE5MzQxLDAuMjI2NjMgLTAuMDk2NCwwLjc1ODA2IDAuMjA5NDk4LDAuNDY5NTQgLTIuNjQ3NDYyLDQuMzE0NTMgMC4wNzMxNiwzLjg3MjA3IHoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4zNTI3NzgiCiAgICAgICAgICAgaWQ9InBhdGgxMDYiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICBpbmtzY2FwZTpvcmlnaW5hbC1kPSJtIC0yMS41NDY5NiwxNTAuNjM4MzEgNC4yMDY4NzUsNC4xOTcgMS42NDcxMTksLTEuNjQ2MDYgLTQuMjExNDYxLC00LjIwNzk0IDAuODIwOTE0LC0wLjgxNDIxIHYgLTEuNjM3MjQgbCAwLjU4NTI1OCwtMC41ODUyNiAwLjAwMTQsMS4zNTg1NSAwLjU3MTg1MiwwLjU2MjY4IDIuMDU0MjI1LC0yLjA1NjM0IDAuNTU1MjczLDAuNTQ4OTIgYyAwLC0wLjM1MzQ4IC0wLjEwNDQyMywtMS41NzAyMSAtMS4wODEyNjQsLTIuNTIyNzEgLTEuMDk0MzE3LC0xLjA2NjggLTIuMTg5MzM5LC0wLjQ0Mjc0IC0yLjU2NjgxMSwtMC4wNjYgbCAtMS45ODM2NywxLjk4NDAyIDAuNDkzNTM2LDAuNDkyNDggLTEuMDkzMjU4LDEuMDg5NzMgLTEuMDkxODQ3LC0xLjA4OTczIDAuNDkzMTgzLC0wLjQ5MjQ4IC0xLjk4MzMxNiwtMS45ODQwMiBjIC0wLjM3NzQ3MywtMC4zNzY3NyAtMS40NzI0OTUsLTEuMDAwODMgLTIuNTY3MTY0LDAuMDY2MyAtMC45NzY0ODksMC45NTIxNSAtMS4wNTgzMzQsMi4xNjk1OCAtMS4wNTgzMzQsMi41MjI3MSBsIDAuNTMyNjk1LC0wLjU0OTI3IDIuMDUzODcyLDIuMDU2MzQgMC41NzI1NTgsLTAuNTY5NzQgMy41M2UtNCwtMS4zNTE0OSAwLjU4NTI1OCwwLjU4NTI2IC0wLjAwMTEsMS42MzMzNiAwLjgyMjMyNSwwLjgxODA5IC00LjE2OTEyOCw0LjE2NTI1IDEuNjQ1MDAzLDEuNjQyMTggeiIgLz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjAyNDQ1OTcyLDAsMCwwLjAyNDQ1OTcyLC05NC43ODI4NzUsNC41NDc5NzgpIgogICAgICAgICBpZD0iZzIwNzEiPgogICAgICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDI2MzYiCiAgICAgICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICAgICAgeDE9Ii0yOTAxLjk1MTkiCiAgICAgICAgICAgeTE9IjkyMy41NzMiCiAgICAgICAgICAgeDI9Ii0yMDYxLjI0OSIKICAgICAgICAgICB5Mj0iMTQyMC4zMzExIgogICAgICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC4xMjM0LDAsMCwtMC4xMjM0LDExNTguMzMsMTU1MC4yNzMpIj4KICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICBzdG9wLWNvbG9yPSIjOTA5Y2E5IgogICAgICAgICAgICAgaWQ9InN0b3AyNjMyIiAvPgogICAgICAgICAgPHN0b3AKICAgICAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgICAgIHN0b3AtY29sb3I9IiNlZGVkZWUiCiAgICAgICAgICAgICBpZD0ic3RvcDI2MzQiIC8+CiAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9InVybCgjYSkiCiAgICAgICAgICAgZD0ibSAxNDEwLjc3Myw4MTQuMTk1IC0yODYuOSw5My42ODMgLTI0OS41OTksMTEwLjE2MSAtNjkuODI5LDE4LjQzNSBjIC0xNy43ODQsMTYuOTE2IC0zNi40MzEsMzQuMDQ5IC01Ni41OTksNTEuMzk3IC0yMi4xMTksMTkuMDgyIC00Mi43MiwzNi40MzMgLTU4LjU1Myw0OS4wMDggLTE3LjU2NCwxMy44OCAtNDMuNTg3LDM5LjkwMiAtNTYuODE0LDU2LjM4IC0xOS43MzUsMjQuNzIxIC0zNS4zNDgsNTAuOTYgLTQyLjA3MSw3MS4xMyAtMTEuOTI4LDM2LjQzMyAtNi4wNyw3My4yOTcgMTYuOTE2LDEwNy4zNDYgMjkuNDkyLDQzLjM2OSA4OC4yNjEsODcuNjA2IDE1Ni43ODUsMTE3Ljc0OSAzNC45MTYsMTUuNCA5My42ODMsMzUuMTMyIDEzNy45Miw0Ni4xOSA3My41MTIsMTguNjUxIDIxNS43NzEsMzguODE5IDI5NC4wNTQsNDEuODU3IDE1LjgyOCwwLjY1IDM3LjA4MiwwLjY1IDM3Ljk0NywwIDEuNzM3LC0xLjA4OCAxMy44ODEsLTI0LjI4OSAyNy45NzksLTUzLjEyOSA0OC4xNDIsLTk4LjIzOCA4Mi44MzgsLTE5MC40MDIgMTAxLjcwMywtMjY5LjExOSAxMS4yNzYsLTQ3LjcwNiAyMC4xNjYsLTExMS4yNDYgMjYuMDE5LC0xODYuNDkyIDEuNTIxLC0yMS4wMzYgMi4xNjksLTkxLjUxNCAwLjg2OCwtMTE1LjM3IC0xLjk1MywtMzkuMDMzIC01LjQyMywtNzAuNjkyIC0xMC44NCwtMTAxLjcwMyAtMC44NjgsLTQuNTU1IC0xLjA4OCwtOC42NzYgLTAuNjUyLC04Ljg5MiAwLjg2NSwtMC42NSAzLjQ2NywtMS41MTcgMzguODE1LC0xMS43MTIgbCAtNy4xNTMsLTE2LjkxMiB2IC0wLjAwNSAwIHogbSAtNjUuNDksMzguMzg2IGMgMi42MDIsMCA5LjUzOSw2Ni41NzMgMTEuMjczLDEwOC42NDYgMC40MzYsOC44OSAwLjIxNiwxNC43NDUgLTAuMjE2LDE0Ljc0NSAtMS43MzMsMCAtMzYuNjQ5LC0yMC41OTkgLTYxLjU4MywtMzYuMjEyIC0yMS42ODcsLTEzLjY2MyAtNjIuODg4LC00MC45ODggLTY5LjM5MywtNDYuMTkyIC0yLjE3MywtMS41MTcgLTEuOTU3LC0xLjczMyAxNS44MjgsLTcuODA3IDMwLjE0LC0xMC4xOTQgMTAxLjcwNiwtMzMuMTggMTA0LjA5MSwtMzMuMTggeiBtIC0xNDYuMTYxLDQ4LjE0MyBjIDEuOTUzLDAgNi45MzcsMi44MTYgMTguODY1LDEwLjE5MSA0NC42NzEsMjcuOTc0IDEwNS4zOTMsNjEuODA1IDEzMS40MTUsNzMuMDgzIDguMDIyLDMuNDY5IDguODg3LDIuMTY2IC05LjU0MiwxNC43NDYgLTM5LjQ2OCwyNi44ODkgLTg4LjY5Nyw1My4zNDQgLTE0OC45ODMsODAuMDE4IC0xMC42MjQsNC43NzEgLTE5LjUxNCw4LjQ1NiAtMTkuNzMsOC40NTYgLTAuNDMyLDAgMC44NjUsLTUuNDE4IDIuNTk4LC0xMS45MjUgMTQuNTMsLTU0LjAwMSAyMi43NzIsLTEwOC42NDcgMjMuMjA4LC0xNTIuNDUyIDAuMjE2LC0yMS42ODcgMC4yMTYsLTIxLjY4NyAyLjE2OSwtMjIuMzM0IC0wLjQzNiwwLjIxNyAtMC4yMiwwLjIxNyAwLDAuMjE3IHogbSAtMzAuMTQyLDExLjQ5MiBjIDEuMjk3LDEuMjk5IDAuNDMyLDQ5Ljg3NyAtMS4zMDQsNjMuMTA0IC0zLjkwMywzMS42NjIgLTkuOTc1LDYxLjE1MyAtMTkuOTQ3LDk0LjMzNSAtMi4zODYsOC4wMTggLTQuNTU4LDE0Ljc0NSAtNC45ODcsMTUuMTc3IC0wLjg3MiwxLjA4MyAtMzAuNTgxLC0yNy45NzUgLTQwLjMzOSwtMzkuMjUxIC0xNi45MTYsLTE5LjUxOCAtMzAuMTQxLC0zOS4wMzUgLTM5LjksLTU4LjExNyAtNC45ODgsLTkuNzU5IC0xMi43OTMsLTI4Ljg0IC0xMi4xNDQsLTI5LjQ5MiAzLjQ2OSwtMi4zODUgMTE3Ljc1MywtNDYuNjIyIDExOC42MjEsLTQ1Ljc1NiB6IG0gLTE0MS44MjYsNTUuNzMxIGMgMC4yMTYsMCAwLjQzMiwwIDAuNjUyLDAuMjE2IDAuNDMyLDAuNDM0IDEuOTUzLDMuOTA1IDMuMjU0LDcuODA3IDYuOTM3LDE4Ljg2NyAyMi41NDgsNDYuNjI0IDM1Ljk5Nyw2NC40MDcgMTQuNzQ2LDE5LjUxOCAzNC4wNDgsNDAuMzM0IDUwLjA5MSw1My45OTYgNS4yMDcsNC4zMzcgOS45NzUsOC40NTYgMTAuNjI0LDkuMTA4IDEuMzA0LDEuMzAyIDEuNzM3LDEuMDgzIC0zMy42MTIsMTQuNTMgLTQwLjk4MSwxNS42MTMgLTg1LjY1NiwzMS4yMjYgLTEzNi44MzUsNDcuNzA2IGEgNjgyNS40NzQsNjgyNS40NzQgMCAwIDAgLTM2LjY0MywxMS45MjggYyAtMS45NTUsMC42NTIgLTEuMzAzLC0wLjQzNCA0LjMzNSwtOS4zMjMgMjUuMzcxLC0zOS42ODYgNjMuOTcsLTExNy41MzYgODUuNjU3LC0xNzIuNjE4IDMuNjg3LC05LjU0MiA3LjM3MywtMTkuMDgyIDguMDI1LC0yMS4yNTEgMC44NjgsLTMuMDM4IDEuOTUsLTQuMTIxIDQuNzY4LC01LjY0IDEuNTE4LC0wLjQzIDMuMDM4LC0wLjg2NiAzLjY4NywtMC44NjYgeiBtIC00My4zNjcsMTcuOTk5IGMgMC42NDksMC40MzYgLTEwLjQxMSwyMy42MzcgLTIxLjI1NCw0NC44ODkgLTIxLjAzNiw0MC45ODUgLTQ0LjAyMiw4MS4zMjMgLTc0LjgxNSwxMzAuMzMxIC01LjIwNCw4LjQ1NiAtMTAuMTksMTYuMjY1IC0xMC44NDIsMTcuMTMyIC0xLjA4MywxLjUxOSAtMS41MTksMS4wODMgLTQuOTg4LC01LjYzOCAtNy4zNzMsLTE0LjUzIC0xMy40NDcsLTMzLjE4MSAtMTYuNjk5LC01MC4zMTMgLTMuMjU0LC0xNi45MTYgLTIuNjAyLC00Ni40MDYgMS4wODYsLTY0LjYyMSAyLjgxNiwtMTMuNDQ0IDIuNjAyLC0xMy4yMjcgOS4xMDcsLTE2LjQ4MSAyNy43NTcsLTE0LjA5NSAxMTcuNTM3LC01Ni4xNjYgMTE4LjQwNSwtNTUuMjk5IHogbSAzNzQuMDczLDE1LjE4MiB2IDkuMTA3IGMgMCw0OC4zNTkgLTUuMjA0LDExNC43MTYgLTEyLjc5NywxNjMuMDc3IC0xLjMwMSw4LjQ1NiAtMi4zODksMTUuMzkzIC0yLjYwMiwxNS42MTMgMCwwIC02LjI4OCwtMS43MzMgLTEzLjY2MSwtMy45MDUgLTMyLjUyNywtMTAuMTkzIC02Ny44NzUsLTI1LjE1NiAtOTkuNzU0LC00Mi43MTggLTIxLjAzOCwtMTEuNDk0IC01MS42MTIsLTMwLjM2MyAtNTAuNzQzLC0zMS4yMzEgMC4yMTMsLTAuMjE1IDkuMzIzLC00Ljk4NiAxOS45NDcsLTEwLjYyNSA0Mi41MDksLTIyLjExOCA4My4yNzQsLTQ1Ljk3MiAxMTguNjIyLC02OS42MDkgMTMuMjI5LC04Ljg5MiAzMy4xNzYsLTIzLjIwMiAzNy41MTgsLTI3LjEwNyB6IG0gLTUzNy44MDIsNjQuMTg1IGMgMC44NjcsMCAwLjY1LDEuNzM1IC0wLjY1MSw5LjU0MiAtMC44NjgsNS42NCAtMS45NTEsMTYuMDQ5IC0yLjM4MiwyMy4yMDIgLTEuNzM5LDMxLjY2MiAzLjQ2OSw1NS4wODQgMTkuMDgyLDg3LjE3NyA0LjMzNyw4Ljg5MiA3LjgwOSwxNi4yNjUgNy41ODksMTYuNDggLTEuNTE5LDEuMzAzIC0xNDUuMDc0LDQzLjM3NSAtMTkwLjE4Myw1NS43MzQgLTEzLjQ0NCwzLjY4NSAtMjUuMTUyLDYuOTM5IC0yNi4wMjQsNy4xNTMgLTEuNTE1LDAuNDM2IC0xLjczMywwLjIyIC0xLjA4MywtMy40NyA0Ljk4NywtMzEuODc1IDI5LjI3NiwtNzMuNTEyIDYzLjEwNCwtMTA4LjY0NCAyMi41NTQsLTIzLjQxOSA0MC41NTQsLTM3LjA4IDcxLjM0NywtNTQuNjQ4IDIyLjExOSwtMTIuNTc1IDU2LjE2NSwtMzEuNDM5IDU4Ljc2NywtMzIuMzA5IDAuMDAyLC0wLjIxNyAwLjIxOCwtMC4yMTcgMC40MzQsLTAuMjE3IHogbSAzMzguMjk1LDYwLjUwMyBjIDAuMjE2LC0wLjIxNiA1LjQyLDIuNjA1IDExLjcwOCw2LjI5IDQ2LjQwOCwyNi44OTEgMTExLjAzLDUxLjgzIDE2Ni4xMDgsNjQuNjIzIGwgNC45OTEsMS4wODYgLTYuOTQxLDMuODk5IGMgLTI4Ljg0LDE2LjA0OSAtMTIzLjYwNiw1NS41MTUgLTIyMC41MzgsOTEuNzMyIC0xNC4wOTgsNS4yMDIgLTI3Ljk3NSwxMC40MDkgLTMwLjU4MSwxMS40OTIgLTIuNjAyLDEuMDgzIC00Ljk4OCwxLjczNSAtNC45ODgsMS41MTkgMCwtMC4yMiAzLjkwNiwtNy44MDkgOC44OSwtMTcuMTMyIDI3LjEwNywtNTAuNzQ0IDU0LjQzMywtMTEyLjU0NyA2OC4zMTEsLTE1NS40ODUgMS43MzksLTQuMTIgMi44MiwtNy44MDUgMy4wNCwtOC4wMjQgeiBtIC0zNC40OCwxMS4yNzggYyAwLjIyLDAuMjIxIC0xLjUxNyw0Ljc3MSAtMy42ODcsOS45NzUgLTE4Ljg2NSw0NS43NTYgLTQzLjU5LDk1LjYzNiAtNzUuMjQ5LDE1MS41ODMgLTguMDIyLDE0LjMxNCAtMTQuNzQ2LDI1LjgwOCAtMTQuOTY2LDI1LjgwOCAtMC4yMTMsMCAtNi43MjEsLTMuOTA2IC0xNC41MjcsLTguNjc2IC00NS45NzYsLTI4LjE5MiAtODYuNzQzLC02Mi44ODggLTExMy40MTQsLTk2LjUwMSBsIC0zLjkwNSwtNC43NzEgMTkuNzMyLC01LjQyMiBjIDcwLjY5NiwtMTkuMjk4IDEzMC43NjIsLTQwLjExNiAxOTAuNCwtNjUuNzA0IDguNDU5LC0zLjQ3MSAxNS40LC02LjI5MiAxNS42MTYsLTYuMjkyIHogbSAyMTQuMjUzLDc0LjgxNSBjIDAsMCAwLjIxNywwLjIxNyAwLDAgMC4yMTYsNC45ODggLTEwLjg0NCw0OS42NjEgLTE5Ljk1Myw4MS45NjkgLTcuNTg5LDI3LjEwNyAtMTQuMDk4LDQ4LjM2MSAtMjYuMDIyLDg1Ljg3NCAtNS4yMDQsMTYuNDg1IC05Ljc1NSwzMC4xNDMgLTkuOTc1LDMwLjE0MyAtMC4yMTYsMCAtMS41MTcsLTAuMjE2IC0yLjgxOCwtMC42NDcgLTY0LjQwNSwtMTEuNzE0IC0xMjIuMDg5LC0yNy45NzcgLTE3Ni4zMDMsLTQ5LjY2MSAtMTUuMTgyLC02LjA3NCAtMzYuODY2LC0xNS44MzMgLTM4LjE2NywtMTYuOTE2IC0wLjQzMiwtMC40MzggMTIuNTgsLTYuNTA2IDI5LjA2LC0xMy42NjMgOTguNjY5LC00My4xNTQgMjAxLjAyNCwtOTIuMTY0IDIzNi4xNTMsLTExMy4xOTYgNC4xMTksLTIuNjAzIDcuMzczLC0zLjkwMyA4LjAyNSwtMy45MDMgeiBtIC00OTQuNjQ2LDE2LjkxNiBjIDAuNDM0LDAuNDMyIC0yNy4xMDcsNDAuMTE4IC02NS43MDksOTQuMTE0IC0xMy40NDQsMTguODY3IC0yOS4wNTcsNDAuOTg1IC0zNC45MTEsNDkuMjI1IC01Ljg1Niw4LjI0MSAtMTQuNzQ2LDIxLjI1MyAtMTkuNzM0LDI5LjA2IGwgLTkuMTEyLDE0LjA5NiAtOS43NTksLTguMjQgYyAtMTEuNDk0LC05LjU0NCAtMzEuNDQyLC0yOS45MjcgLTQwLjMzMywtNDEuMjA0IC0xOC42NTEsLTIzLjIwMSAtMzEuMjI2LC00Ny43MDYgLTM2LjIxNCwtNzAuMDQgLTIuMzg2LC0xMC40MTEgLTIuMzg2LC0xNS42MTggLTAuMjIsLTE2LjI2NSAzLjI1MiwtMC44NjcgNjEuMTUzLC0xNC41MyAxMTUuMzcsLTI3LjExIDMwLjE0MywtNi45MzcgNjUuMDU0LC0xNS4xNzcgNzcuNjMyLC0xOC4yMTMgMTIuNTc5LC0zLjA0MSAyMi43NzQsLTUuNDIzIDIyLjk5LC01LjQyMyB6IG0gMjcuNzU2LDEwLjYyNiA2LjkzNyw3LjgwNiBjIDMxLjIzMSwzNC45MTQgNjMuMTA4LDYwLjcyNCAxMDEuNzA4LDgzLjI3MiA2Ljk0MSwzLjkwNiAxMi4xNDQsNy4zNzMgMTEuNzA4LDcuNTk0IC0xLjUxNCwxLjA4MyAtMTM0LjAxNiw0OC4xMzYgLTE5NS4zODUsNjkuMzg5IC0zNC40NzgsMTIuMTQzIC02Mi44ODgsMjEuOTAxIC02My4xMDIsMjEuOTAxIC0wLjIxNiwwIC0yLjE2OSwtMS4yOTkgLTQuMzQxLC0yLjgxOCBsIC0zLjkwMSwtMi44MiA2LjI4OCwtOS4xMDYgYyAyMC4zODMsLTI5LjQ5MyA0NS45NzYsLTYxLjgwMyAxMDEuNzA3LC0xMjkuMDI4IHogbSAxNzMuMDUzLDEyMy44MjIgYyAwLjIxMywtMC4yMTUgOS43NTUsMy4yNTIgMjEuNDY0LDcuNTk0IDI4LjE5NSwxMC42MjQgNTAuNTI3LDE3LjM0NSA4MC40NTYsMjQuOTM2IDM2Ljg2Niw5LjMyNiA5MC4yMTEsMTguNDM0IDEyMS42NTcsMjEuMDM1IDQuNzcxLDAuNDMyIDcuMzczLDAuODY4IDYuNTA1LDEuNTE5IC0xLjUyMSwwLjg2OCAtMzMuMzk1LDExLjQ5NCAtNTYuODE2LDE4Ljg2NyAtMzcuMzAyLDExLjcwOCAtMTUxLjE0OSw0NS4zMiAtMjQzLjk2Miw3MS45OTUgLTE3LjEzMiw0Ljk4NyAtMzEuODc5LDkuMTA4IC0zMi43NDYsOS4zMjMgLTIuMTY2LDAuNDM2IC05LjMyNSwtMS41MTkgLTkuMzI1LC0yLjM4NiAwLC0wLjQzMSA1LjIwNCwtNy4xNTMgMTEuNDk0LC0xNC41MjcgMzEuMjI1LC0zNy4zIDYyLjIzOCwtNzguOTM1IDg4LjA0NCwtMTE4LjQwMyA3LjE1NCwtMTAuODQ2IDEzLjIyOSwtMTkuNzM2IDEzLjIyOSwtMTkuOTUzIHogbSAtMzguMTcsMS4wODcgYyAwLjIxNiwwLjIxNiAtMTUuMTc5LDI0LjkzNiAtNDIuMDY2LDY3LjQzOSAtMTEuNDk2LDE3Ljk5OSAtMjQuMjkxLDM4LjM4MyAtMjguODQ2LDQ1LjU0IC00LjMzNyw2LjkzOSAtMTAuODQyLDE3Ljc4NCAtMTQuNTI3LDIzLjg1NCBsIC02LjI5LDExLjA2MSAtMy4yNTIsLTAuODY4IGMgLTcuODA5LC0yLjE2OSAtNjIuNjcyLC0yMS40NzEgLTc3LjIwMiwtMjcuMzI1IC0xOCwtNy4xNTcgLTM2LjY0OSwtMTUuODI5IC01MC41MjksLTIzLjIwMiAtMTcuMzQ2LC05LjMyNiAtMzkuMDMsLTIzLjIwNiAtMzcuMjk3LC0yMy42MzcgMC40MzMsLTAuMjE2IDMwLjE0MywtOC4yNDMgNjUuOTIyLC0xNy45OTkgOTQuOTg0LC0yNS44MDkgMTQ3LjY3OCwtNDAuNzcgMTgyLjE2MSwtNTEuNjEyIDYuMjksLTEuOTUyIDExLjcxLC0zLjQ3MSAxMS45MjYsLTMuMjUxIHogbSAyNjkuOTg1LDYzLjMxOCBoIDAuMjE2IGMgMC44NjgsMi4xNzEgLTM0LjI2LDk5Ljc1NSAtNDcuMDYsMTMwLjU0NyAtMi44MTUsNi45MzkgLTMuODk2LDguNjc3IC01LjQxNyw4LjQ1NiAtMy42ODcsLTAuMjEzIC01NC42NDYsLTcuMzcgLTg1LjY2LC0xMS45MjUgLTUzLjk5NCwtOC4yNCAtMTQ0LjY0MSwtMjQuMDczIC0xNjcuNDA5LC0yOS4yNzUgbCAtNS4yMDQsLTEuMDgzIDMyLjMwNywtNy4zNzggYyA2OS4zOTYsLTE1LjYxMyAxMDIuNzkxLC0yNC4wNjkgMTM2LjYxOSwtMzQuNDc4IDQyLjcyMiwtMTMuMDExIDg1LjAxMSwtMjkuMjc2IDEyNy43MjksLTQ5LjIyNSA2LjcyMiwtMy4wMzcgMTIuMzYxLC01LjQyMiAxMy44NzksLTUuNjM5IHoiCiAgICAgICAgICAgaWQ9InBhdGgyMDU1IgogICAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjYSkiIC8+CiAgICAgICAgPGxpbmVhckdyYWRpZW50CiAgICAgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MjY0MyIKICAgICAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgICAgICB4MT0iLTI4ODIuNyIKICAgICAgICAgICB5MT0iMTAyODguODEiCiAgICAgICAgICAgeDI9Ii0yMjA2LjI0OSIKICAgICAgICAgICB5Mj0iMTAyODguODEiCiAgICAgICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjEyMzQsMCwwLC0wLjEyMzQsMTE1OC4zMywxNTUwLjI3MykiPgogICAgICAgICAgPHN0b3AKICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgIHN0b3AtY29sb3I9IiM5MzlmYWIiCiAgICAgICAgICAgICBpZD0ic3RvcDI2MzkiIC8+CiAgICAgICAgICA8c3RvcAogICAgICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICAgICAgc3RvcC1jb2xvcj0iI2RjZGVlMSIKICAgICAgICAgICAgIGlkPSJzdG9wMjY0MSIgLz4KICAgICAgICA8L2xpbmVhckdyYWRpZW50PgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZmlsbD0idXJsKCNiKSIKICAgICAgICAgICBkPSJtIDExMTQuOTgzLDE0NS40MTQgYyAtNC43NzEsLTAuNjQ3IC04MS43NTcsMjcuMTEgLTEzMS40MTUsNDcuMjc1IC02Ny4wMSwyNy4zMjcgLTExOS4wNTIsNTMuMzUxIC0xNTEuMTQ4LDc1Ljg5OSAtMTEuOTI1LDguNDYxIC0yNi44OTEsMjMuNDIyIC0yOS4yNzMsMjkuMjc2IC0wLjg2NywyLjE2OSAtMS4zMDMsNC43NzEgLTEuMzAzLDcuMzczIGwgMjkuMDYsMjcuNTQxIDY5LjE3NSwyMi4xMTkgMTY0LjU5NCwyOS40OTMgMTg4LjIyOCwzMi4zMTIgMS45NTMsLTE2LjI2NCBjIC0wLjY0OSwwIC0xLjA4NSwtMC4yMTYgLTEuNzMsLTAuMjE2IGwgLTI0LjcyOCwtMy45MDUgLTQuOTg0LC04Ljg5IGMgLTI1LjU5LC00NS4xMDcgLTUzLjc4MSwtMTAxLjA1NiAtNzAuMjYxLC0xMzguNzg5IC0xMi43OTMsLTI5LjI3NiAtMjQuOTM4LC02My4xMDIgLTMxLjY2MiwtODcuMzkxIC0zLjY4NywtMTQuNzQ2IC00LjExOSwtMTUuNjEzIC02LjUwMSwtMTUuODI5IHYgLTAuMDA1IGggLTAuMDEgeiBtIC0zLjQ3NCwxMS4wNjMgaCAwLjIyMyBjIDAuMjEzLDAuMjE0IDEuMDgxLDYuMjkgMS45NSwxMy40NDIgMy42ODMsMzAuMzY0IDEwLjQxMSw1OS42MzUgMjEuMDM1LDkxLjI5NyA4LjAyMiwyMy44NTUgOC4wMjIsMjIuNTU1IC0xLjMwMSwxOS43MzQgLTIyLjExOSwtNi4wNyAtMTIxLjIyMSwtMjMuMjAyIC0xOTMsLTMzLjE3NyAtMTEuNDk0LC0xLjUxOSAtMjEuMjUzLC0zLjAzNiAtMjEuMjUzLC0zLjI1MiAtMC44NjcsLTAuODY3IDUxLjgyNywtMjguNDEgNzUuMDMxLC0zOS4yNSAyOS43MDksLTEzLjY2NSAxMTEuMjQ2LC00Ny43MTEgMTE3LjMxNSwtNDguNzk0IHogbSAtMjA5LjA0Nyw5Ny4xNSA4LjQ2MSwyLjgxNiBjIDQ1Ljk3LDE1LjYxNiAxNjEuNTUxLDM3LjczNiAyMjUuMzEsNDIuOTQgNy4xNTQsMC42NTEgMTMuMjI5LDEuMzAzIDEzLjQ0MiwxLjMwMyAwLjIxNiwwLjIxNiAtNS44NTIsMy40NjkgLTEzLjY2MSw3LjE1NCAtMzAuNzksMTUuMzk3IC02NC42MjEsMzQuMjY0IC04OC4wNDIsNDguNzk0IC02LjkzNyw0LjMzNSAtMTMuMjI5LDcuODA3IC0xNC4wOTQsNy44MDcgLTAuODY4LDAgLTUuNDIsLTAuODY4IC0xMC4xOTEsLTEuNTE5IGwgLTguNjc0LC0xLjMwMyAtMjEuNjgzLC0yMS4yNTMgYyAtMzguMTY3LC0zNy4wOCAtNjguMDk0LC02NS43MDQgLTc5LjU4OCwtNzYuNTQ5IHogbSAtOC42NzEsNi43MjEgMzAuNTc2LDM4LjE2OCBjIDE2LjY5NiwyMS4wMzUgMzMuNjExLDQxLjYzNSAzNy4zMDEsNDYuMTg3IDMuNjgzLDQuNTU3IDYuNzIxLDguMjQ1IDYuNTA1LDguNDYxIC0wLjg2OCwwLjY1IC00NC4yMzYsLTcuODA5IC02Ny4yMjYsLTEzLjAxMSAtMjMuNjM3LC01LjQyMyAtMzMuMzk1LC04LjAyNSAtNDcuOTI0LC0xMi41NzcgbCAtMTEuOTI4LC0zLjkwNSB2IC0zLjAzOCBjIDAuMjE2LC0xNC41MyAxOC42NTEsLTM2LjIxNCA0OS44NzcsLTU4LjMzMSB6IG0gMjU5Ljc5MSw1Mi4wNDYgYyAwLjg2OSwwIDEuOTUsMS45NTEgNC41NTIsNy44MDYgNy4zNzMsMTYuMjYzIDMwLjM2NCw2MC4wNyAzNS45OTcsNjguNTI2IDEuNzQsMi44MjIgNC43NzEsMy4wMzggLTI1LjgwMiwtMS45NSAtNzMuNTEyLC0xMS45MyAtOTcuMTUyLC0xNS44MjkgLTk3LjE1MiwtMTYuMjYzIDAsLTAuMjE2IDIuMTY5LC0xLjczNSA0Ljk4OCwtMy4yNTQgMjIuNzcxLC0xMi41NzUgNDUuNzU2LC0yOC42MjQgNjYuMTQyLC00NS43NTYgNC45ODgsLTQuMTIxIDkuNTQyLC04LjAyNCAxMC40MDcsLTguNjc2IDAuMjE2LC0wLjQzMyAwLjY1MiwtMC42NDkgMC44NjgsLTAuNDMzIHoiCiAgICAgICAgICAgaWQ9InBhdGgyMDYyIgogICAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjYikiIC8+CiAgICAgICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MjY1MCIKICAgICAgICAgICBjeD0iLTE0MjE3LjQ0OCIKICAgICAgICAgICBjeT0iNzI3Ny43MDUxIgogICAgICAgICAgIHI9Ijg5OC4xMiIKICAgICAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjExODUsLTAuMDE3OCwtMC4wMzYsMC4yMzcsLTE5OC45NTUsLTEzMTQuNDE1KSIKICAgICAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgICAgICA8c3RvcAogICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgc3RvcC1jb2xvcj0iI2VlMzUyYyIKICAgICAgICAgICAgIGlkPSJzdG9wMjY0NiIgLz4KICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgICAgICBzdG9wLWNvbG9yPSIjYTkxZDIyIgogICAgICAgICAgICAgaWQ9InN0b3AyNjQ4IiAvPgogICAgICAgIDwvcmFkaWFsR3JhZGllbnQ+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSJ1cmwoI2MpIgogICAgICAgICAgIGQ9Im0gODA0LjY2LDI5NC44MjggYyAwLDAgLTQuNzY4LDcuNTkzIC0wLjIxNSwxOC44NyAyLjgyMiw2LjkzNyAxMS4wNjEsMTUuMzkzIDIwLjM4NCwyNC4wNjkgMCwwIDk2LjUsOTQuMTE0IDEwOC4yMTEsMTA3LjU2MSA1My4zNDQsNjEuNTg1IDc2LjU0OSwxMjIuMzA1IDc4LjcxOCwyMDYuMDEyIDEuMzAxLDUzLjc4IC04Ljg5NCwxMDEuMDU0IC0zNC4yNjQsMTU1LjkxOSAtNDUuMTA2LDk4LjQ1MyAtMTQwLjMwNywyMDcuMDk4IC0yODcuMTE3LDMyNy42NyBsIDIxLjQ3MiwtNy4xNTcgYyAxMy44NzgsLTEwLjQxMSAzMi43NDUsLTIxLjQ2NyA3Ni45ODIsLTQ1Ljc1NiAxMDIuMTM3LC01NS45NTIgMjE3LjA3MSwtMTA3LjM0NiAzNTguMDI4LC0xNjAuMjU4IDIwMi45NzEsLTc2LjMzNSA1MzYuNzE1LC0xNjUuNjgxIDcyNi42NzYsLTE5NC43MzYgbCAxOS43MzcsLTMuMDM4IC0zLjAzOCwtNC43NzEgYyAtMTcuMzQ1LC0yNi44OTEgLTI5LjI3NiwtNDMuNTg3IC00My41OSwtNjEuMzY5IC00MS42MzMsLTUxLjYxMiAtOTIuMTU3LC05My40NjMgLTE1My45NjQsLTEyOC4xNjEgLTg1LjAwNywtNDcuNDg5IC0xOTQuOTU2LC04NC41NzEgLTMzNC4xNzMsLTExMi4xMTIgLTI2LjIzOSwtNS4yMDcgLTgzLjkyMywtMTUuMTgxIC0xMzAuNzYzLC0yMi4zMzcgLTk5LjMyMSwtMTUuMzkzIC0xNjMuNTEsLTI2LjAyMSAtMjM0LjIwMywtMzguMTY1IC0yNS4zNywtNC4zMzkgLTYzLjMyMywtMTAuODQzIC04OC40NzgsLTE2LjI2MyAtMTMuMDExLC0yLjgyMiAtMzcuOTQ3LC04LjY3NiAtNTcuNDY0LC0xNS4zOTggLTE1LjYxMywtNi4wNzUgLTM4LjE2OCwtMTIuMTQ3IC00Mi45MzksLTMwLjU4IHogbSA1NS45NTIsNTQuMjE2IGMgMC4yMTQsLTAuMjE0IDMuNjgzLDEuMDgzIDguMjQsMi42MDIgOC4yNCwyLjgxNiAxOC44NjUsNi4wNyAzMS40NDYsOS41NDIgYSAxNTk5LjQ3LDE1OTkuNDcgMCAwIDAgMjguNjI0LDcuNTg5IGMgMTMuMDExLDMuMjUxIDIzLjg1Miw2LjI4OCAyNC4wNjgsNi4yODggMS41MjEsMS41MTkgMjMuNDI0LDcxLjU1OCAzMC43OTcsOTguNDQ5IDIuODE1LDEwLjE5NSA0Ljk4OCwxOC44NjcgNC43NzEsMTguODY3IC0wLjIyMywwLjIyIC0yLjYwNSwtMy40NjkgLTUuNDIzLC04LjQ1NiAtMjUuMzczLC00NC42NzMgLTY1LjQ5MSwtODkuOTk1IC0xMTEuODk5LC0xMjYuNDI4IC02LjA2OSwtNC4zMzMgLTEwLjYyNCwtOC4yMzcgLTEwLjYyNCwtOC40NTMgeiBtIDEwNi42OTIsMjkuNDkyIGMgMS4wODUsMCA1Ljg1NiwwLjY1MSAxMS43MDgsMS45NTEgMzYuODY2LDguMjQgMTAzLjAwOCwyMC44MTggMTQ1LjI5MywyNy45NzUgNy4xNTcsMS4wODMgMTIuNzk3LDIuMzg3IDEyLjc5NywyLjgxOCAwLDAuNDM2IC0yLjYwNSwxLjk1MSAtNS44NTksMy42ODggLTcuMTUzLDMuNjg1IC0zNS45OTcsMjAuODE1IC00NS41MzYsMjcuMzIyIC0yNC4wNzMsMTYuMDQ3IC00NS43NTYsMzMuMzk1IC02MS4zNzEsNDkuMDA4IC02LjI4OCw2LjI5IC0xMS43MTIsMTEuNDk0IC0xMS43MTIsMTEuNDk0IDAsMCAtMS4yOTcsLTMuNjg1IC0yLjM4NiwtOC4yNDIgLTcuODAyLC0zMC4xNDMgLTI0LjA2OSwtNzQuODE2IC0zOC44MTUsLTEwNi4yNTggLTIuMzg2LC00Ljk4NiAtNC4zMzksLTkuNTQxIC00LjMzOSwtOS45NzMgMCwwLjQzMyAwLDAuMjE3IDAuMjIsMC4yMTcgeiBtIDE4Ny43OTUsMzUuNzgxIGMgMS4zMDEsMC40MzIgMy40Nyw3LjgwNiA3LjgwNiwyNC4wNjkgOC4wMjUsMzEuNDQ2IDExLjcxMiw2Ni41NzYgMTAuNDExLDk5LjMyMSAtMC40MzYsOS4xMDggLTAuODY4LDE3LjU2NCAtMS4zMDQsMTguNjUxIGwgLTAuNjQ5LDIuMTY2IC0xMS4yNzYsLTMuNjg1IGMgLTIzLjIwNCwtNy4zNzMgLTYwLjkzNSwtMTguNDM1IC05My4yNDUsLTI3LjU0MSAtMTguNDM2LC00Ljk4OCAtMzMuMzk1LC05LjU0MiAtMzMuMzk1LC05Ljk3NSAwLC0xLjMwMyAyNi44OTEsLTI4LjE5MiAzOC4zODMsLTM4LjM4MyAyMS44OTgsLTE5LjMwMyA4MS4zMTYsLTY1LjI3NSA4My4yNjksLTY0LjYyMyB6IG0gMTQuOTYzLDIuMTY2IGMgMC42NTIsLTAuNjQ3IDg5Ljc3OSwxNC43NDYgMTMwLjMzMSwyMi41NTQgMzAuMTQ1LDUuODU0IDczLjk0OCwxNC45NjMgNzYuNTQ5LDE2LjA0OSAxLjMwMSwwLjQzMiAtMy4yNTQsMy4wMzQgLTE3Ljc4NCw5LjUzOSAtNTcuMjQ4LDI1LjgwOCAtOTkuNzU0LDQ5LjAwOCAtMTQyLjAzNiw3Ny4yMDIgLTExLjA2LDcuMzczIC0yMC4zODYsMTMuNDQ0IC0yMC42MDIsMTMuNDQ0IC0wLjIxNiwwIC0wLjQzMywtNi4yODcgLTAuNDMzLC0xMy44NzggMCwtNDEuMjAxIC04LjI0MSwtODIuODM4IC0yMy40MjQsLTExNy45NjggLTEuNTE3LC0zLjQ3IC0yLjgxOCwtNi43MjIgLTIuNjAxLC02Ljk0MiB6IG0gMjMwLjUxNiw0NS41NDIgYyAwLjY1MiwwLjY1IC0yLjE2OSwxOC4yMTcgLTQuNzcxLDI4LjYyNCAtNy44MDYsMzIuMzEyIC0yOC44NCw4MC4yNCAtNTQuNjQzLDEyNS4zNDMgLTQuNTU4LDguMDI0IC04LjY3NywxNC41MyAtOS4xMTQsMTQuNzQ2IC0wLjQyOSwwLjIxNiAtNi4yODUsLTMuMDM4IC0xMy4wMDksLTYuOTQxIC0yNS4xNTQsLTE0Ljc0NiAtNTMuNzc4LC0yOC42MjQgLTg1LjAwNywtNDEuNjM3IC04LjY3MSwtMy42ODUgLTE2LjI2MywtNi43MjMgLTE2LjQ4LC03LjE1MyAtMS41MjEsLTEuMzAzIDY4LjMwOCwtNDcuNDkzIDEwNS4xNzQsLTY5LjYxMiAyOS4yNzYsLTE3Ljc4MSA3Ni45ODIsLTQ0LjIzOSA3Ny44NSwtNDMuMzcgeiBtIDE2LjQ4LDIuNjAxIGMgMS45NTMsMCA0MS40MjEsMTAuODQ0IDYyLjAxOSwxNi45MTYgNTAuOTYzLDE1LjE4MSAxMDkuNTEyLDM2LjY0OCAxNDcuNjc5LDUzLjk5NiBsIDE1LjgyOCw3LjE1OSAtMTEuMDU2LDIuNiBjIC05My4yNDUsMjEuNDY3IC0xNzMuMDQ5LDQ2LjE5MiAtMjUwLjAzNCw3Ny40MTggLTYuMjg5LDIuNjAyIC0xMS45MjgsNC43NzEgLTEyLjM1Nyw0Ljc3MSAtMC40MzYsMCAxLjczMywtNC45ODcgNC41NTIsLTExLjA2MSAyMy4yMDQsLTQ5LjIyNSAzOC4xNjcsLTEwMC42MiA0MS44NSwtMTQ0LjQyNyAwLjIyMSwtNC4xMjEgMC44NjcsLTcuMzcyIDEuNTE5LC03LjM3MiB6IG0gLTM5Mi45MzgsOTAuMjEzIGMgMC42NDksLTAuNjUyIDMwLjc5Myw2LjUwNiA0Ny4wNTcsMTEuMDU2IDI0LjcyMSw2Ljk0MiA3Ny4xOTgsMjQuNTA1IDc3LjE5OCwyNS44MDggMCwwLjIxNiAtNS44NTMsNS4yMDQgLTEyLjc5LDExLjI3OCAtMjguNDA4LDIzLjYzNyAtNTUuNzM0LDQ4LjU3MiAtODguNDgxLDgwLjIzNCAtOS43NTksOS4zMjggLTE3Ljk5NywxNi45MTcgLTE4LjQyOSwxNi45MTcgLTAuNDM2LDAgLTAuNjQ5LC0xLjMwNCAtMC40MzYsLTMuMDM4IDQuOTg3LC0zNi40MzMgMy45MDYsLTgzLjI3MiAtMy4wMzQsLTEzMC43NjMgLTAuNjUzLC02LjA3NCAtMS4zMDIsLTExLjI3NiAtMS4wODUsLTExLjQ5MiB6IG0gNjMzLjQzMywwLjY1MiBjIDAuNDI5LDAuNDMxIC0xMy44ODEsMjIuOTg0IC0yMi45ODgsMzUuNzc3IC0xMy4wMDksMTguNjQ5IC0zMi4wOTgsNDMuMzc1IC03NS4yNTIsOTcuNTg4IC0yMi43NjUsMjguNjIyIC00OC4zNTgsNjAuOTM2IC01Ni44MTIsNzEuNzc4IC04LjY3OCwxMC44NDIgLTE1LjgzMSwxOS45NDggLTE2LjA1MSwxOS45NDggLTAuMjE2LDAgLTMuMDMxLC0zLjkwMSAtNi4wNjksLTguNjcxIC0yNC4yODksLTM2LjQzMyAtNTMuMzQ5LC02OC4zMTEgLTg3LjgyOSwtOTYuOTM1IC02LjUwNSwtNS40MjMgLTEzLjY1OCwtMTEuMjc4IC0xNi4wNDQsLTEzLjAxMyAtMi4zODYsLTEuNzM0IC00LjMzOSwtMy40NjkgLTQuMzM5LC0zLjY4NSAwLC0wLjY0OSAzNi44NjIsLTE2LjQ4MyA2NC44NDEsLTI3Ljc1NyA0OS4wMSwtMTkuOTUyIDExNS43OTQsLTQzLjgwNSAxNjUuODkyLC01OS4yMDMgMjYuMjQsLTguMjM5IDU0LjIxNSwtMTYuMjYzIDU0LjY1MSwtMTUuODI3IHogbSAxNi42OTYsNC4zMzQgYyAwLjg2NSwtMC4yMTUgNi4wNzIsMi4zODcgMTIuMzYxLDYuMDcgNTIuNjk3LDMwLjE0MyAxMDQuMzA1LDY4Ljk2MiAxNDUuMDc3LDEwOC44NjQgMTEuNDkyLDExLjI3OCAzOS45LDQwLjc3IDM5LjQ2NCw0MC45ODYgMCwwIC05Ljk3NSwwLjg2NyAtMjEuNjgzLDEuNzMzIC05MS4yOTYsNi45NDIgLTIwOC4xNzgsMjYuMjM5IC0zMjAuNTExLDUzLjM0NSAtNy41ODksMS43MzMgLTE0LjMxLDMuMjUyIC0xNC43NDYsMy4yNTIgLTAuNDI5LDAgOC4wMjUsLTguNDU2IDE4LjY1MywtMTguNjQ3IDY1LjkyMiwtNjMuNTM4IDk2LjA2NywtMTAzLjY1NiAxMzEuNjI4LC0xNzUuMjIgNC45ODYsLTEwLjYyMyA5LjMyNSwtMTkuNzMxIDkuNzU3LC0yMC4zODMgLTAuMjE2LDAgLTAuMjE2LDAgMCwwIHogbSAtNDgyLjkzNiw0OS40NDYgYyAzLjAzOCwwLjY0NyAzMS4yMjksMTMuODggNTIuNDgsMjQuNTAzIDE5LjUxNyw5Ljc1NSA0OC43OTQsMjUuMzcyIDUwLjMxMSwyNi42NzEgMC4yMTYsMC4yMTYgLTEwLjE5NSw1LjYzOCAtMjIuOTg0LDExLjkyOCAtNDAuNzcyLDIwLjM4NCAtNzUuNjg0LDM5LjY4MiAtMTEyLjExOCw2MS44MDIgLTEwLjQwOCw2LjI5IC0xOS4wODIsMTEuNDk3IC0xOS4yOTgsMTEuNDk3IC0wLjg2OCwwIC0wLjY1MiwtMC44NzIgNS4yMDQsLTExLjQ5NyAxOS41MTgsLTM1LjU2MSAzNS4xMjksLTc4LjA2NSA0NC4wMjMsLTExOS40ODYgMC44NjQsLTMuMjUyIDEuNzMzLC01LjQxOCAyLjM4MiwtNS40MTggeiBtIC0yOC4xOTIsNS4yMDIgYyAwLjY1MiwwLjY1MiAtNi43MjEsMjcuMzIzIC0xMS4yNzMsNDEuODUzIC04Ljg5NCwyNy41NDEgLTIzLjg1Niw2Mi4wMiAtMzguMzgzLDg4LjA0MyAtMy40NzQsNi4wNjkgLTguNjc3LDE0Ljk2MSAtMTEuNDk2LDE5Ljk0OCBsIC01LjQyLDguNjc0IC0xMi4xNDQsLTExLjcwNyBjIC0xNC4wOTQsLTEzLjY2MyAtMjUuNTksLTIyLjEyIC00MC4zMzMsLTI5LjcxMiAtNS44NTksLTMuMDMzIC0xMC40MTEsLTUuNjM4IC0xMC40MTEsLTYuMDY5IDAsLTEuNzM1IDM3LjA4MiwtMzUuMzQ3IDY1LjQ5LC01OS42MzUgMjAuMzgzLC0xNy41NjYgNjMuMzIxLC01Mi4wNDUgNjMuOTcsLTUxLjM5NSB6IG0gMTcyLjQwNCw3MC45MTMgMTAuNjI3LDYuOTM3IGMgMjQuMjgyLDE1LjgzMyA1Mi45MDYsMzYuODY2IDc0LjgxMyw1NS4yOTggMTIuMzU3LDEwLjE5IDM2LjIxLDMxLjY2MiA0MC45ODUsMzYuODY2IGwgMi41OTgsMi44MjIgLTE3LjU2MSw0Ljk4NiBjIC05OS4zMjEsMjcuNTM4IC0xNzYuMDg3LDUyLjA0MyAtMjY1LjY0OSw4NS4wMDcgLTkuOTc1LDMuNjg1IC0xOC40MzMsNi43MjEgLTE5LjA4NSw2LjcyMSAtMS4yOTcsMCAtMi4zODUsMS4wODMgMTkuOTU0LC0xOS41MTkgNTcuMjUxLC01Mi42OTEgMTA3Ljk5MiwtMTEwLjgxMiAxNDUuNzI2LC0xNjcuNDExIHogbSAtNDUuMzI0LDExLjI3NiBjIDAuNDMyLDAuNDMyIC0yOS4yNzYsNDIuMjg0IC00Ny4wNiw2NS45MjIgLTIxLjI1MSwyOC4xOTIgLTU4Ljk4NSw3NS40NjUgLTg1LjAwNywxMDYuMjU2IC0xMC44NCwxMi43OTcgLTIwLjE2MywyMy40MjIgLTIwLjU5OSwyMy42NCAtMC42NTIsMC4yMTYgLTAuODY4LC0zLjAzNiAtMC44NjgsLTguMDI0IDAsLTI2LjI0MiAtNi43MjEsLTU0LjIxNiAtMTguNDMzLC03OC4wNjggLTQuOTg4LC05Ljk3NSAtNS44NTYsLTEyLjM2MSAtNC43NjgsLTEzLjQ0NCA0LjExOSwtMy42ODggNjcuMjIzLC0zOS42ODYgMTA3LjEyMywtNjEuMTUzIDI2Ljg5LC0xNC4zMTIgNjguOTU2LC0zNS41NjMgNjkuNjEyLC0zNS4xMjkgeiBtIC0yNzQuMTA3LDY3LjIyNSBjIDAuNjUyLDAgNS42NCwyLjYgMTEuMjc5LDUuNjM4IDEzLjg3OCw3LjU4OSAyNi4yMzksMTYuMDQ2IDM3LjI5OCwyNS4xNTYgMC40MzIsMC40MzIgLTUuMjA0LDQuOTg4IC0xMi41NzcsMTAuNDA2IC0yMC42MDIsMTQuNzQ2IC01MS44MjgsMzguMzg1IC03MC4wNDEsNTIuOTE1IC0xOS4wODgsMTUuMTggLTE5LjczNCwxNS42MTMgLTE3LjU2OCwxMi4zNjEgMTQuMzE0LC0yMS45MDMgMjEuNDY3LC0zNC4yNjQgMjkuMDYsLTUwLjA5MyA2LjcyMSwtMTQuMDk0IDEzLjQ0MiwtMzAuNzkzIDE4LjIxMywtNDUuMzIzIDEuNzM0LC02LjI4OSAzLjkwNCwtMTEuMDYgNC4zMzYsLTExLjA2IHogbSA3My4wODMsNTcuMjQ4IGMgMS4wODEsLTAuMjE0IDIuMzg2LDEuNzM1IDguMjM4LDEwLjQxMSAxMi4zNjEsMTguNDI5IDIxLjkwMyw0My4xNTQgMjQuMjkyLDYzLjEwNCBsIDAuNDI5LDQuMzM5IC0yOS43MDUsMTEuNDk0IGMgLTUzLjEzMywyMC41OTkgLTEwMi4xMzksNDAuOTg1IC0xMzUuMzIyLDU2LjE2MiAtOS4zMjIsNC4zMzkgLTI1LjU4NywxMi4xNDQgLTM2LjIxMSwxNy4zNTIgLTEwLjYyNyw1LjQxOCAtMTkuMzAxLDkuNTM5IC0xOS4zMDEsOS4zMjMgMCwtMC4yMTYgNi43MjEsLTUuMjA0IDE0Ljk2MSwtMTEuMjc4IDY0Ljg0NCwtNDcuMDU1IDEyMS4wMDcsLTk4LjY2OSAxNjMuMDc2LC0xNTAuMjc5IDQuNTU1LC01LjQyMyA4LjY3NywtMTAuNDExIDkuMTA3LC0xMC42MjcgeiBtIC0zMy42MTIsOC4yNDIgYyAwLjg2OCwwLjg2NyAtMjMuODUzLDI4Ljg0IC00MC43NjgsNDUuOTcxIC00MS44NTMsNDIuNzIzIC04My4yNzMsNzYuMTIgLTEzNC42NjksMTA4LjY0OSAtNi41MDUsNC4xMTkgLTEyLjM1OSw3LjgwNCAtMTMuMDExLDguMjQgLTEuNTE5LDAuODY3IDAuNDMyLC0xLjMwMyAyMi45ODYsLTI1LjgwOCAxNC4zMTQsLTE1LjM5NyAyNS4xNTUsLTI4LjQwOCAzNy41MTYsLTQ0LjQ1MyA4LjI0LC0xMC42MjQgOS43NTksLTEyLjE0MyAyMS42ODgsLTIwLjYwNCAzMS44NzgsLTIyLjk4NyAxMDUuMzksLTcyLjg2NCAxMDYuMjU4LC03MS45OTUgeiIKICAgICAgICAgICBpZD0icGF0aDIwNjkiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNjKSIgLz4KICAgICAgPC9nPgogICAgPC9nPgogIDwvZz4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJWcnN0dmEgMiIKICAgICBpZD0ibGF5ZXIyIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiIC8+Cjwvc3ZnPgo=", + "name": "Raiffeisenbank statements for Pohoda", + "description": "Import Raiffeisenbank statements into Pohoda", + "executable": "pohoda-raiffeisenbank-statements", + "setup": "pohoda-raiffeisenbank-setup", + "cmdparams": "", + "deploy": "apt install pohoda-raiffeisenbank", + "homepage": "https://github.com/Spoje-NET/pohoda-raiffeisenbank", + "requirements": "Pohoda,SQLServer,RaiffeisenBank", + "ociimage": "", + "uuid": "a5bb05df-a681-47d2-81d0-58eb57614eab", + "topics": "RaiffeisenBank,Statements,Pohoda", + "environment": { + "ACCOUNT_NUMBER": { + "type": "text", + "description": "Bank Account Number", + "defval": "", + "required": true + }, + "CERT_PASS": { + "type": "password", + "description": "Certificate password", + "defval": "", + "required": true + }, + "CERT_FILE": { + "type": "string", + "description": "Path to RB Certificate file", + "defval": "", + "required": true + }, + "STATEMENT_IMPORT_SCOPE": { + "type": "text", + "description": "Time scope of transactions downloaded", + "defval": "auto", + "required": true + }, + "XIBMCLIENTID": { + "type": "text", + "description": "ClientID", + "defval": "", + "required": true + }, + "POHODA_ICO": { + "type": "text", + "description": "Pohoda ICO", + "defval": "12345678", + "required": true + }, + "POHODA_URL": { + "type": "text", + "description": "Pohoda URL", + "defval": "http://127.0.0.1:10010", + "required": true + }, + "POHODA_USERNAME": { + "type": "text", + "description": "Pohoda Username", + "defval": "Admin", + "required": true + }, + "POHODA_PASSWORD": { + "type": "password", + "description": "Pohoda Password", + "defval": "xxxxxxxx", + "required": true + }, + "POHODA_TIMEOUT": { + "type": "number", + "description": "Pohoda Timeout", + "defval": 60, + "required": true + }, + "POHODA_COMPRESS": { + "type": "boolean", + "description": "Pohoda Compress", + "defval": false, + "required": true + }, + "POHODA_DEBUG": { + "type": "boolean", + "description": "Pohoda Debug", + "defval": true, + "required": true + }, + "POHODA_BANK_IDS": { + "type": "text", + "description": "Pohoda Bank IDs", + "defval": "KB", + "required": true + }, + "DB_CONNECTION": { + "type": "text", + "description": "Database Connection", + "defval": "sqlsrv", + "required": true + }, + "DB_HOST": { + "type": "text", + "description": "Database Host", + "defval": "127.0.0.1", + "required": true + }, + "DB_PORT": { + "type": "number", + "description": "Database Port", + "defval": 1433, + "required": true + }, + "DB_DATABASE": { + "type": "text", + "description": "Database Name", + "defval": "StwPh_12345678_2023", + "required": true + }, + "DB_USERNAME": { + "type": "text", + "description": "Database Username", + "defval": "sa", + "required": true + }, + "DB_PASSWORD": { + "type": "password", + "description": "Database Password", + "defval": "pohodaSQLpassword", + "required": true + }, + "DB_SETTINGS": { + "type": "text", + "description": "Database Settings", + "defval": "encrypt=false", + "required": true + }, + "OFFICE365_USERNAME": { + "type": "text", + "description": "Office 365 Username", + "defval": "", + "required": false + }, + "OFFICE365_PASSWORD": { + "type": "password", + "description": "Office 365 Password", + "defval": "", + "required": false + }, + "OFFICE365_CLIENTID": { + "type": "text", + "description": "Office 365 Client ID", + "defval": "", + "required": false + }, + "OFFICE365_SECRET": { + "type": "text", + "description": "Office 365 Secret", + "defval": "", + "required": false + }, + "OFFICE365_CLSECRET": { + "type": "text", + "description": "Office 365 Client Secret", + "defval": "", + "required": false + }, + "OFFICE365_TENANT": { + "type": "text", + "description": "Office 365 Tenant", + "defval": "", + "required": true + }, + "OFFICE365_SITE": { + "type": "text", + "description": "Office 365 Site", + "defval": "", + "required": true + }, + "OFFICE365_PATH": { + "type": "text", + "description": "Office 365 Path", + "defval": "", + "required": true + } + }, + "multiflexi": "1.10.2.0" +} diff --git a/multiflexi/pohoda_raiffeisenbank.multiflexi.app.json b/multiflexi/pohoda_raiffeisenbank.multiflexi.app.json index aedb137..5a53eee 100644 --- a/multiflexi/pohoda_raiffeisenbank.multiflexi.app.json +++ b/multiflexi/pohoda_raiffeisenbank.multiflexi.app.json @@ -2,7 +2,7 @@ "image": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgc29kaXBvZGk6ZG9jbmFtZT0icG9ob2RhLXJhaWZmZWlzZW5iYW5rLnN2ZyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4yLjIgKGIwYTg0ODY1NDEsIDIwMjItMTItMDEpIgogICBpZD0ic3ZnOCIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMTAwIDEwMCIKICAgaGVpZ2h0PSIxMDBtbSIKICAgd2lkdGg9IjEwMG1tIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6bnMwPSImYW1wOyMzODsjMzg7IzM4OyMzODtuc19haTsiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMyIj4KICAgIDxpbmtzY2FwZTpwYXRoLWVmZmVjdAogICAgICAgZWZmZWN0PSJwZXJzcGVjdGl2ZS1lbnZlbG9wZSIKICAgICAgIHVwX2xlZnRfcG9pbnQ9Ii0yMi44NTk1OTUsMTQwLjE1OTE4IgogICAgICAgdXBfcmlnaHRfcG9pbnQ9Ii0yMC4xMzM4MDYsMTQwLjE3NjI4IgogICAgICAgZG93bl9sZWZ0X3BvaW50PSItMjguNTEzNDA0LDE1NS45NTAzMyIKICAgICAgIGRvd25fcmlnaHRfcG9pbnQ9Ii0xNC41MzY3MDIsMTU1Ljk1MDMzIgogICAgICAgaWQ9InBhdGgtZWZmZWN0Nzk0IgogICAgICAgaXNfdmlzaWJsZT0idHJ1ZSIKICAgICAgIGxwZXZlcnNpb249IjEiCiAgICAgICBkZWZvcm1fdHlwZT0icGVyc3BlY3RpdmUiCiAgICAgICBob3Jpem9udGFsX21pcnJvcj0iZmFsc2UiCiAgICAgICB2ZXJ0aWNhbF9taXJyb3I9InRydWUiCiAgICAgICBvdmVyZmxvd19wZXJzcGVjdGl2ZT0idHJ1ZSIgLz4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMzQ0NCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoMzQ0NiIKICAgICAgICAgZD0iTSAxMS41MiwxNjIgQyAxMS41Miw4MS42NzcgMTM1LjMwNywxNi41NiAyODgsMTYuNTYgNDQwLjY5MywxNi41NiA1NjQuNDgsODEuNjc4IDU2NC40OCwxNjIgNTY0LjQ4LDI0Mi4zMjIgNDQwLjY5MywzMDcuNDQgMjg4LDMwNy40NCAxMzUuMzA3LDMwNy40NCAxMS41MiwyNDIuMzIgMTEuNTIsMTYyIiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MzQ1MiIKICAgICAgIGN4PSIwIgogICAgICAgY3k9IjAiCiAgICAgICByPSIxIgogICAgICAgZng9IjAiCiAgICAgICBmeT0iMCIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMzYzLjA2LDAsMCwtMzYzLjA2LDE3Ny41MiwyNTYuMzEpIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBzcHJlYWRNZXRob2Q9InBhZCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQ1NCIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdG9wLWNvbG9yPSIjYWViMmQ1IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM0NTYiCiAgICAgICAgIG9mZnNldD0iMC4zIgogICAgICAgICBzdG9wLWNvbG9yPSIjYWViMmQ1IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM0NTgiCiAgICAgICAgIG9mZnNldD0iMC43NSIKICAgICAgICAgc3RvcC1jb2xvcj0iIzQ4NGM4OSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNDYwIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0b3AtY29sb3I9IiM0ODRjODkiIC8+CiAgICA8L3JhZGlhbEdyYWRpZW50PgogICAgPGNsaXBQYXRoCiAgICAgICBpZD0iY2xpcFBhdGgzNDY4Ij4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGgzNDcwIgogICAgICAgICBkPSJNIDAsMzI0IEggNTc2IFYgMCBIIDAgWiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8ZmlsdGVyCiAgICAgICBzdHlsZT0iY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzOnNSR0IiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0iRHJvcCBTaGFkb3ciCiAgICAgICBpZD0iZmlsdGVyNDYyMiIKICAgICAgIHg9Ii0wLjEyMTUxODYiCiAgICAgICB5PSItMC4yMTA1MTMzNCIKICAgICAgIHdpZHRoPSIxLjI5MzY3IgogICAgICAgaGVpZ2h0PSIxLjUwODc0MDYiPgogICAgICA8ZmVGbG9vZAogICAgICAgICBmbG9vZC1vcGFjaXR5PSIwLjQ5ODAzOSIKICAgICAgICAgZmxvb2QtY29sb3I9InJnYigwLDAsMCkiCiAgICAgICAgIHJlc3VsdD0iZmxvb2QiCiAgICAgICAgIGlkPSJmZUZsb29kNDYxMiIgLz4KICAgICAgPGZlQ29tcG9zaXRlCiAgICAgICAgIGluPSJmbG9vZCIKICAgICAgICAgaW4yPSJTb3VyY2VHcmFwaGljIgogICAgICAgICBvcGVyYXRvcj0iaW4iCiAgICAgICAgIHJlc3VsdD0iY29tcG9zaXRlMSIKICAgICAgICAgaWQ9ImZlQ29tcG9zaXRlNDYxNCIgLz4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGluPSJjb21wb3NpdGUxIgogICAgICAgICBzdGREZXZpYXRpb249IjYiCiAgICAgICAgIHJlc3VsdD0iYmx1ciIKICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDYxNiIgLz4KICAgICAgPGZlT2Zmc2V0CiAgICAgICAgIGR4PSI2IgogICAgICAgICBkeT0iNiIKICAgICAgICAgcmVzdWx0PSJvZmZzZXQiCiAgICAgICAgIGlkPSJmZU9mZnNldDQ2MTgiIC8+CiAgICAgIDxmZUNvbXBvc2l0ZQogICAgICAgICBpbj0iU291cmNlR3JhcGhpYyIKICAgICAgICAgaW4yPSJvZmZzZXQiCiAgICAgICAgIG9wZXJhdG9yPSJvdmVyIgogICAgICAgICByZXN1bHQ9ImZiU291cmNlR3JhcGhpYyIKICAgICAgICAgaWQ9ImZlQ29tcG9zaXRlNDYyMCIgLz4KICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgcmVzdWx0PSJmYlNvdXJjZUdyYXBoaWNBbHBoYSIKICAgICAgICAgaW49ImZiU291cmNlR3JhcGhpYyIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAtMSAwIDAgMCAwIC0xIDAgMCAwIDAgLTEgMCAwIDAgMCAxIDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4NDYyNCIgLz4KICAgICAgPGZlRmxvb2QKICAgICAgICAgaWQ9ImZlRmxvb2Q0NjI2IgogICAgICAgICBmbG9vZC1vcGFjaXR5PSIwLjQ5ODAzOSIKICAgICAgICAgZmxvb2QtY29sb3I9InJnYigwLDAsMCkiCiAgICAgICAgIHJlc3VsdD0iZmxvb2QiCiAgICAgICAgIGluPSJmYlNvdXJjZUdyYXBoaWMiIC8+CiAgICAgIDxmZUNvbXBvc2l0ZQogICAgICAgICBpbjI9ImZiU291cmNlR3JhcGhpYyIKICAgICAgICAgaWQ9ImZlQ29tcG9zaXRlNDYyOCIKICAgICAgICAgaW49ImZsb29kIgogICAgICAgICBvcGVyYXRvcj0iaW4iCiAgICAgICAgIHJlc3VsdD0iY29tcG9zaXRlMSIgLz4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjQ2MzAiCiAgICAgICAgIGluPSJjb21wb3NpdGUxIgogICAgICAgICBzdGREZXZpYXRpb249IjYiCiAgICAgICAgIHJlc3VsdD0iYmx1ciIgLz4KICAgICAgPGZlT2Zmc2V0CiAgICAgICAgIGlkPSJmZU9mZnNldDQ2MzIiCiAgICAgICAgIGR4PSI2IgogICAgICAgICBkeT0iNiIKICAgICAgICAgcmVzdWx0PSJvZmZzZXQiIC8+CiAgICAgIDxmZUNvbXBvc2l0ZQogICAgICAgICBpbjI9Im9mZnNldCIKICAgICAgICAgaWQ9ImZlQ29tcG9zaXRlNDYzNCIKICAgICAgICAgaW49ImZiU291cmNlR3JhcGhpYyIKICAgICAgICAgb3BlcmF0b3I9Im92ZXIiCiAgICAgICAgIHJlc3VsdD0iZmJTb3VyY2VHcmFwaGljIiAvPgogICAgICA8ZmVDb2xvck1hdHJpeAogICAgICAgICByZXN1bHQ9ImZiU291cmNlR3JhcGhpY0FscGhhIgogICAgICAgICBpbj0iZmJTb3VyY2VHcmFwaGljIgogICAgICAgICB2YWx1ZXM9IjAgMCAwIC0xIDAgMCAwIDAgLTEgMCAwIDAgMCAtMSAwIDAgMCAwIDEgMCIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXg0NjM2IiAvPgogICAgICA8ZmVGbG9vZAogICAgICAgICBpZD0iZmVGbG9vZDQ2MzgiCiAgICAgICAgIGZsb29kLW9wYWNpdHk9IjAuNDk4MDM5IgogICAgICAgICBmbG9vZC1jb2xvcj0icmdiKDAsMCwwKSIKICAgICAgICAgcmVzdWx0PSJmbG9vZCIKICAgICAgICAgaW49ImZiU291cmNlR3JhcGhpYyIgLz4KICAgICAgPGZlQ29tcG9zaXRlCiAgICAgICAgIGluMj0iZmJTb3VyY2VHcmFwaGljIgogICAgICAgICBpZD0iZmVDb21wb3NpdGU0NjQwIgogICAgICAgICBpbj0iZmxvb2QiCiAgICAgICAgIG9wZXJhdG9yPSJpbiIKICAgICAgICAgcmVzdWx0PSJjb21wb3NpdGUxIiAvPgogICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDY0MiIKICAgICAgICAgaW49ImNvbXBvc2l0ZTEiCiAgICAgICAgIHN0ZERldmlhdGlvbj0iNiIKICAgICAgICAgcmVzdWx0PSJibHVyIiAvPgogICAgICA8ZmVPZmZzZXQKICAgICAgICAgaWQ9ImZlT2Zmc2V0NDY0NCIKICAgICAgICAgZHg9IjYiCiAgICAgICAgIGR5PSI2IgogICAgICAgICByZXN1bHQ9Im9mZnNldCIgLz4KICAgICAgPGZlQ29tcG9zaXRlCiAgICAgICAgIGluMj0ib2Zmc2V0IgogICAgICAgICBpZD0iZmVDb21wb3NpdGU0NjQ2IgogICAgICAgICBpbj0iZmJTb3VyY2VHcmFwaGljIgogICAgICAgICBvcGVyYXRvcj0ib3ZlciIKICAgICAgICAgcmVzdWx0PSJjb21wb3NpdGUyIiAvPgogICAgPC9maWx0ZXI+CiAgICA8ZmlsdGVyCiAgICAgICBzdHlsZT0iY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzOnNSR0IiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0iQmx1ciIKICAgICAgIGlkPSJmaWx0ZXIyMDU4Ij4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMTAuNTYzNSAwLjAxIgogICAgICAgICByZXN1bHQ9ImZiU291cmNlR3JhcGhpYyIKICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyMjA1NiIgLz4KICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgcmVzdWx0PSJmYlNvdXJjZUdyYXBoaWNBbHBoYSIKICAgICAgICAgaW49ImZiU291cmNlR3JhcGhpYyIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAtMSAwIDAgMCAwIC0xIDAgMCAwIDAgLTEgMCAwIDAgMCAxIDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4MjA2MCIgLz4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjIwNjIiCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMTAuNTYzNSAwLjAxIgogICAgICAgICByZXN1bHQ9ImJsdXIiCiAgICAgICAgIGluPSJmYlNvdXJjZUdyYXBoaWMiIC8+CiAgICA8L2ZpbHRlcj4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9IlhNTElEXzFfIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iMTY4LjAzNjEiCiAgICAgICB5MT0iMTY4LjIxMDAxIgogICAgICAgeDI9IjgzLjE0OTkwMiIKICAgICAgIHkyPSI4My4zMjQzMDMiPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM2RDdCQjAiCiAgICAgICAgIGlkPSJzdG9wMTY0IiAvPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM5OUFDRDIiCiAgICAgICAgIGlkPSJzdG9wMTY1IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9IlhNTElEXzJfIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iMTY4LjcxNzgiCiAgICAgICB5MT0iMTc0LjYzNTciCiAgICAgICB4Mj0iODMuODMxNzAzIgogICAgICAgeTI9Ijg5Ljc1MDI5OCI+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzZEN0JCMCIKICAgICAgICAgaWQ9InN0b3AxNzEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6Izk5QUNEMiIKICAgICAgICAgaWQ9InN0b3AxNzIiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0iWE1MSURfM18iCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSIxMjYuOTc5NSIKICAgICAgIHkxPSIxMzAuOTkyMiIKICAgICAgIHgyPSIyMzMuNTYyMTkiCiAgICAgICB5Mj0iMjM3LjU3NiIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC45OTI5LC0wLjExOTEsLTAuMDU2LDEuMDEzOCw3Ljc1NTYsOC44NzYpIj4KICAgICAgPHN0b3AKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojRDhFMUVEIgogICAgICAgICBpZD0ic3RvcDE3OCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNUU3NkFBIgogICAgICAgICBpZD0ic3RvcDE3OSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJYTUxJRF80XyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9IjEyNi4wMzgxIgogICAgICAgeTE9IjE0NC44MTg0MSIKICAgICAgIHgyPSIxMjYuMDM4MSIKICAgICAgIHkyPSI3Ny41NjcyOTkiPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM4MDhEQzIiCiAgICAgICAgIGlkPSJzdG9wMTg1IiAvPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1RTc2QUEiCiAgICAgICAgIGlkPSJzdG9wMTg2IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9IlhNTElEXzVfIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iMTIxLjI3NjkiCiAgICAgICB5MT0iOTEuOTcxNzAzIgogICAgICAgeDI9IjEyMS4yNzY5IgogICAgICAgeTI9IjEzLjM4NzkiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuOTkyOSwtMC4xMTkxLC0wLjA1NiwxLjAxMzgsNy43NTU2LDguODc2KSI+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I0RCRThGMiIKICAgICAgICAgaWQ9InN0b3AxOTIiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMC4yODQ3IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojRDlFNkYxIgogICAgICAgICBpZD0ic3RvcDE5MyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgb2Zmc2V0PSIwLjQzNTkiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNEMURGRUQiCiAgICAgICAgIGlkPSJzdG9wMTk0IiAvPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjAuNTU1NyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I0MzRDNFNyIKICAgICAgICAgaWQ9InN0b3AxOTUiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMC42NTkiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNCMEMzREYiCiAgICAgICAgIGlkPSJzdG9wMTk2IiAvPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjAuNzUxOCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6Izk3QUREMyIKICAgICAgICAgaWQ9InN0b3AxOTciIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMC44MzciCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM3ODkzQzUiCiAgICAgICAgIGlkPSJzdG9wMTk4IiAvPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjAuOTE2MyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzU0NzNCNSIKICAgICAgICAgaWQ9InN0b3AxOTkiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMC45ODkxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMkI1MEEyIgogICAgICAgICBpZD0ic3RvcDIwMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMjQ0QTlGIgogICAgICAgICBpZD0ic3RvcDIwMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM4MTctMSIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDM5NzUiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC44MDIzMDM0NiwxLjA2NDUwMTJlLTcsLTEuMTg5NzM3NmUtNywwLjg5NjY5MjgxLDE4MC44OTEwNCwxMDkuNTM3MzgpIgogICAgICAgY3g9IjEyNCIKICAgICAgIGN5PSIxMDIxLjkyNjciCiAgICAgICBmeD0iMTI0IgogICAgICAgZnk9IjEwMjEuOTI2NyIKICAgICAgIHI9IjIxLjE4ODk5IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzODE3LTEiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wMzgxOS03IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZiYzAwO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMzgyMS00IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjI2MiIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMTc2IgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtcm90YXRpb249IjAiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iZzI1OTgiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9Im1tIgogICAgIGlua3NjYXBlOmN5PSIxOTQuNzA2OSIKICAgICBpbmtzY2FwZTpjeD0iNTAuMjU1MDg5IgogICAgIGlua3NjYXBlOnpvb209IjEuOTc5ODk5IgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGlkPSJiYXNlIgogICAgIGlua3NjYXBlOnNob3dwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9IjAiCiAgICAgaW5rc2NhcGU6ZGVza2NvbG9yPSIjZDFkMWQxIiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTUiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaWQ9ImxheWVyMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlua3NjYXBlOmxhYmVsPSJWcnN0dmEgMSIgLz4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJWcnN0dmEgMyIKICAgICBpZD0ibGF5ZXIzIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiPgogICAgPGcKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuNDAzMzQ4MSwwLDAsMS40MDMzNDgxLDEyMC42NzU3OCw3LjAyMzEyNTIpIgogICAgICAgaWQ9ImcyNTk4Ij4KICAgICAgPGcKICAgICAgICAgaWQ9ImczMDM4IgogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjg5OTAxMzkyLDAsMCwwLjg5OTAwMTA4LC05MC44MTc4ODUsLTU4Ny43MzE3KSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjYjJiMmIyIgogICAgICAgICAgIGQ9Im0gNDguMTM4LDcwNC45NzEgdiAtMy4yMTIgYyAwLC00Ljc1NyAzLjg4NSwtOC44MjcgOC41MjEsLTkuMjMgSCAyMS4yMzcgYyAtMC42ODMsMCAtMS4yMzcsMC4zODggLTEuMjM3LDEuMDcxIHYgMTIuMzA0IGMgMCwwLjY4NSAwLjU1NCwxLjA5NyAxLjIzNywxLjA5NyBoIDI3LjQ5NyBjIC0wLjI4LC0wLjQwMSAtMC41OTYsLTEuMjY0IC0wLjU5NiwtMi4wMyB6IgogICAgICAgICAgIGlkPSJwYXRoMjk4OCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiM1OTU5NTkiCiAgICAgICAgICAgZD0ibSA3MCw2NzIuNDQ0IGMgMCwwLjY4NiAtMC41NTUsMS4yMzcgLTEuMjM4LDEuMjM3IEggMjEuMjM3IGMgLTAuNjgzLDAgLTEuMjM3LC0wLjU1MiAtMS4yMzcsLTEuMjM3IHYgLTEyLjMwMyBjIDAsLTAuNjg2IDAuNTU0LC0xLjIzOSAxLjIzNywtMS4yMzkgaCA0Ny41MjUgYyAwLjY4MywwIDEuMjM4LDAuNTU0IDEuMjM4LDEuMjM5IHoiCiAgICAgICAgICAgaWQ9InBhdGgyOTkwIiAvPgogICAgICAgIDxjaXJjbGUKICAgICAgICAgICBmaWxsPSIjZjc5OTAzIgogICAgICAgICAgIGN4PSI2Mi45MSIKICAgICAgICAgICBjeT0iNjY2LjI5MzAzIgogICAgICAgICAgIHI9IjIuNDA0IgogICAgICAgICAgIGlkPSJjaXJjbGUyOTkyIiAvPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9ImczMDA0Ij4KICAgICAgICAgIDxwb2x5Z29uCiAgICAgICAgICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICAgICAgICBjbGlwLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgICAgcG9pbnRzPSI0MC4yMzUsNjYzLjQwMSAzNy4zNTEsNjY5LjE4MiAzNS4wNiw2NjkuMTgyIDM3Ljk0Myw2NjMuNDAxICIKICAgICAgICAgICAgIGlkPSJwb2x5Z29uMjk5NCIgLz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0iZzMwMDIiPgogICAgICAgICAgICA8cG9seWdvbgogICAgICAgICAgICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICAgICAgICAgIGNsaXAtcnVsZT0iZXZlbm9kZCIKICAgICAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICAgICAgcG9pbnRzPSIzMS44Miw2NjMuNDAxIDI4LjkzOCw2NjkuMTgyIDI2LjY0NCw2NjkuMTgyIDI5LjUyNyw2NjMuNDAxICIKICAgICAgICAgICAgICAgaWQ9InBvbHlnb24yOTk2IiAvPgogICAgICAgICAgICA8cG9seWdvbgogICAgICAgICAgICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICAgICAgICAgIGNsaXAtcnVsZT0iZXZlbm9kZCIKICAgICAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICAgICAgcG9pbnRzPSIzNi4wMjksNjYzLjQwMSAzMy4xNDQsNjY5LjE4MiAzMC44NTIsNjY5LjE4MiAzMy43MzYsNjYzLjQwMSAiCiAgICAgICAgICAgICAgIGlkPSJwb2x5Z29uMjk5OCIgLz4KICAgICAgICAgICAgPHBvbHlnb24KICAgICAgICAgICAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgICBjbGlwLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgICAgIHBvaW50cz0iNDQuNDY0LDY2My40MDEgNDEuNTc5LDY2OS4xODIgMzkuMjg1LDY2OS4xODIgNDIuMTcxLDY2My40MDEgIgogICAgICAgICAgICAgICBpZD0icG9seWdvbjMwMDAiIC8+CiAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZmlsbD0iI2IyYjJiMiIKICAgICAgICAgICBkPSJtIDcwLDY4OS4yOTEgYyAwLDAuNjg1IC0wLjU1NSwxLjIzNyAtMS4yMzgsMS4yMzcgSCAyMS4yMzcgYyAtMC42ODMsMCAtMS4yMzcsLTAuNTUzIC0xLjIzNywtMS4yMzcgdiAtMTIuMzA0IGMgMCwtMC42ODQgMC41NTQsLTEuMjM3IDEuMjM3LC0xLjIzNyBoIDQ3LjUyNSBjIDAuNjgzLDAgMS4yMzgsMC41NTQgMS4yMzgsMS4yMzcgeiIKICAgICAgICAgICBpZD0icGF0aDMwMDYiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjZjc5OTAzIgogICAgICAgICAgIGQ9Im0gNjUuMzEzLDY4My4xNDEgYyAwLDEuMzI2IC0xLjA3NywyLjQwMyAtMi40MDQsMi40MDMgLTEuMzI5LDAgLTIuNDA0LC0xLjA3NyAtMi40MDQsLTIuNDAzIDAsLTEuMzMxIDEuMDc1LC0yLjQwNiAyLjQwNCwtMi40MDYgMS4zMjcsLTEwZS00IDIuNDA0LDEuMDc1IDIuNDA0LDIuNDA2IHoiCiAgICAgICAgICAgaWQ9InBhdGgzMDA4IiAvPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9ImczMDIwIj4KICAgICAgICAgIDxwb2x5Z29uCiAgICAgICAgICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICAgICAgICBjbGlwLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICAgICAgICBmaWxsPSIjNTk1OTU5IgogICAgICAgICAgICAgcG9pbnRzPSI0MC4yMzUsNjgwLjI0OSAzNy4zNTEsNjg2LjAyOSAzNS4wNiw2ODYuMDI5IDM3Ljk0Myw2ODAuMjQ5ICIKICAgICAgICAgICAgIGlkPSJwb2x5Z29uMzAxMCIgLz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0iZzMwMTgiPgogICAgICAgICAgICA8cG9seWdvbgogICAgICAgICAgICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICAgICAgICAgIGNsaXAtcnVsZT0iZXZlbm9kZCIKICAgICAgICAgICAgICAgZmlsbD0iIzU5NTk1OSIKICAgICAgICAgICAgICAgcG9pbnRzPSIzMS44Miw2ODAuMjQ5IDI4LjkzOCw2ODYuMDI5IDI2LjY0NCw2ODYuMDI5IDI5LjUyNyw2ODAuMjQ5ICIKICAgICAgICAgICAgICAgaWQ9InBvbHlnb24zMDEyIiAvPgogICAgICAgICAgICA8cG9seWdvbgogICAgICAgICAgICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICAgICAgICAgIGNsaXAtcnVsZT0iZXZlbm9kZCIKICAgICAgICAgICAgICAgZmlsbD0iIzU5NTk1OSIKICAgICAgICAgICAgICAgcG9pbnRzPSIzNi4wMjksNjgwLjI0OSAzMy4xNDQsNjg2LjAyOSAzMC44NTIsNjg2LjAyOSAzMy43MzYsNjgwLjI0OSAiCiAgICAgICAgICAgICAgIGlkPSJwb2x5Z29uMzAxNCIgLz4KICAgICAgICAgICAgPHBvbHlnb24KICAgICAgICAgICAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgICBjbGlwLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICAgICAgICAgIGZpbGw9IiM1OTU5NTkiCiAgICAgICAgICAgICAgIHBvaW50cz0iNDQuNDY0LDY4MC4yNDkgNDEuNTc5LDY4Ni4wMjkgMzkuMjg1LDY4Ni4wMjkgNDIuMTcxLDY4MC4yNDkgIgogICAgICAgICAgICAgICBpZD0icG9seWdvbjMwMTYiIC8+CiAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9ImczMDMyIj4KICAgICAgICAgIDxwb2x5Z29uCiAgICAgICAgICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICAgICAgICBjbGlwLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICAgICAgICBmaWxsPSIjNTk1OTU5IgogICAgICAgICAgICAgcG9pbnRzPSI0MC4yMzUsNjk2Ljg2IDM3LjM1MSw3MDIuNjQgMzUuMDYsNzAyLjY0IDM3Ljk0Myw2OTYuODYgIgogICAgICAgICAgICAgaWQ9InBvbHlnb24zMDIyIiAvPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJnMzAzMCI+CiAgICAgICAgICAgIDxwb2x5Z29uCiAgICAgICAgICAgICAgIGZpbGwtcnVsZT0iZXZlbm9kZCIKICAgICAgICAgICAgICAgY2xpcC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgICBmaWxsPSIjNTk1OTU5IgogICAgICAgICAgICAgICBwb2ludHM9IjMxLjgyLDY5Ni44NiAyOC45MzgsNzAyLjY0IDI2LjY0NCw3MDIuNjQgMjkuNTI3LDY5Ni44NiAiCiAgICAgICAgICAgICAgIGlkPSJwb2x5Z29uMzAyNCIgLz4KICAgICAgICAgICAgPHBvbHlnb24KICAgICAgICAgICAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgICBjbGlwLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICAgICAgICAgIGZpbGw9IiM1OTU5NTkiCiAgICAgICAgICAgICAgIHBvaW50cz0iMzYuMDI5LDY5Ni44NiAzMy4xNDQsNzAyLjY0IDMwLjg1Miw3MDIuNjQgMzMuNzM2LDY5Ni44NiAiCiAgICAgICAgICAgICAgIGlkPSJwb2x5Z29uMzAyNiIgLz4KICAgICAgICAgICAgPHBvbHlnb24KICAgICAgICAgICAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgICBjbGlwLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICAgICAgICAgIGZpbGw9IiM1OTU5NTkiCiAgICAgICAgICAgICAgIHBvaW50cz0iNDQuNDY0LDY5Ni44NiA0MS41NzksNzAyLjY0IDM5LjI4NSw3MDIuNjQgNDIuMTcxLDY5Ni44NiAiCiAgICAgICAgICAgICAgIGlkPSJwb2x5Z29uMzAyOCIgLz4KICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0iZzMwMzYiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGZpbGw9IiNmNzk5MDMiCiAgICAgICAgICAgICBkPSJtIDY4LjAzNiw3MDYuODExIGMgLTEuMDEyLDAgLTEuODM5LC0wLjgyNSAtMS44MzksLTEuODQgdiAtMy4yMTIgYyAwLC0wLjg1NSAtMC42OTUsLTEuNTQ0IC0xLjU1MiwtMS41NDQgLTAuODQ4LDAgLTEuNTMyLDAuNjg4IC0xLjUzMiwxLjU0NCB2IDMuMjEyIGMgMCwxLjAxNSAtMC44MzUsMS44NCAtMS44NTMsMS44NCAtMS4wNDQsMCAtMS44NzEsLTAuODI1IC0xLjg3MSwtMS44NCB2IC0zLjIxMiBjIDAsLTAuODU1IC0wLjcsLTEuNTQ0IC0xLjU0OCwtMS41NDQgLTAuODQ5LDAgLTEuNTQzLDAuNjg4IC0xLjU0MywxLjU0NCB2IDMuMjEyIGMgMCwxLjAxNSAtMC44MzIsMS44NCAtMS44NDcsMS44NCAtMS4wMTUsMCAtMS44NDEsLTAuODI1IC0xLjg0MSwtMS44NCB2IC0zLjIxMiBjIDAsLTIuODg2IDIuMzQzLC01LjI0IDUuMjMyLC01LjI0IDEuMTgxLDAgMi4zMDYsMC4zOTggMy4yNDIsMS4xMzEgbCAwLjE2OCwwLjEzOSAwLjE2NywtMC4xMzkgYyAwLjkzMSwtMC43MzIgMi4wNDksLTEuMTMxIDMuMjI3LC0xLjEzMSAyLjg5OCwwIDUuMjQ2LDIuMzU0IDUuMjQ2LDUuMjQgdiAzLjIxMiBjIC0wLjAwMiwxLjAxNCAtMC44MzUsMS44NCAtMS44NTYsMS44NCB6IgogICAgICAgICAgICAgaWQ9InBhdGgzMDM0IiAvPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjA2NjE0NTgzLDAsMCwwLjA2NjE0NTgzLC01Ni41MTY4MzIsMzQuNjMyNTM4KSIKICAgICAgICAgaWQ9IkxheWVyXzIiCiAgICAgICAgIG5zMDpsYXllcj0ieWVzIgogICAgICAgICBuczA6ZWRpdGFibGU9Im5vIgogICAgICAgICBuczA6ZGltbWVkUGVyY2VudD0iNTAiCiAgICAgICAgIG5zMDpyZ2JUcmlvPSIjRkZGRjRGMDA0RjAwIgogICAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZTtzdHJva2U6IzAwMDAwMCI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBuczA6a25vY2tvdXQ9Ik9mZiIKICAgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjM2O2ZpbGw6bm9uZTtzdHJva2U6bm9uZSIKICAgICAgICAgICBkPSJNIDI1NiwyNTYgSCAwIFYgMCBoIDI1NiB6IgogICAgICAgICAgIGlkPSJwYXRoMTU2IiAvPgogICAgICA8L2c+CiAgICAgIDxnCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMTgzOTYwMTYsMCwwLC0wLjE3MDU4OTE5LC0xMDEuOTUzODEsMjMwLjk1NjQ3KSIKICAgICAgICAgaWQ9ImczODYwIj4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZjAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGQ9Im0gMjcxLjg3NSw5NzMuNjU2MjUgYSA0LjAzNDQwMDUsNC4wMzQ0MDA1IDAgMCAwIC0zLjQzNzUsNiBjIDMuMjI2LDUuNzM1MSA0LjU3NjQsOC45MDMxNiA0LjU5Mzc1LDExLjc4MTI1IDAuMDA4LDEuMzE4MDIgLTAuMjg1MDcsMi44NDI0OSAtMC45Mzc1LDQuNjg3NSBhIDQuMDM0NDAwNSw0LjAzNDQwMDUgMCAwIDAgLTYuMjE4NzUsLTEuNzE4NzUgYyAtNC40NDk4MiwzLjQ0Mzc3IC04LjI1NTE3LDEwLjI0NTc1IC05LjM3NSwxOS4yNDk5NSAtMS4xMTk4Myw5LjAwNDMgMS4xMDU0NCwyMC4xMzggMTAuMTU2MjUsMzAuMzc1IDIuNTI1MTcsMi44NTYyIDYuMTM5NDcsNS44MzM1IDExLjE1NjI1LDYuNDY4OCA1LjAxNjc4LDAuNjM1MyAxMC43Njk3LC0xLjExNjEgMTcuNSwtNS44MTI1IGEgNC4wMzQ0MDA1LDQuMDM0NDAwNSAwIDAgMCAwLjU2MjUsLTAuNSBjIDMuNDgyMSwtMy41NTYgNi4wNDgwNCwtNi44NjA3IDcuNDY4NzUsLTEwLjg3NSAxLjQyMDcxLC00LjAxNDMgMS41NzY0NSwtOC4zOTYzIDEuMDMxMjUsLTEzLjgxMjUgYSA0LjAzNDQwMDUsNC4wMzQ0MDA1IDAgMCAwIC00LjUzMTI1LC0zLjU5MzggYyAwLjE2MDEsLTcuMDI1NyAtMS42OTYzNywtMTIuODgxOCAtNS4wOTM3NSwtMTcuOTY4NyAtNC44MTYwNywtNy4yMTExNiAtMTEuODM4MDgsLTEzLjMzNDU3IC0xOS42NTYyNSwtMjIuODEyNSBhIDQuMDM0NDAwNSw0LjAzNDQwMDUgMCAwIDAgLTMuMjE4NzUsLTEuNDY4NzUgeiIKICAgICAgICAgICBpZD0icGF0aDM4MjgiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGlkPSJwYXRoMzAxNCIKICAgICAgICAgICBzdHlsZT0iZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50Mzk3NSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBkPSJtIDI2OC4zMjg5LDk5Ny41OCAzLjI0NTMzLDguOTI0NyBjIDcuNTgyNTQsLTEzLjUxMTkgNi45ODAyMiwtMTcuMTE0MiAwLjQwNTY2LC0yOC44MDIzIDE2LjAzMjYzLDE5LjQzNjMgMjguMjA1NTIsMjUuMDIxMiAyMi43MTczMyw0Ni42NTE3IGwgNS42NzkzMywtNC40NjI0IGMgMS4wMzE1NCwxMC4yNDc2IC0wLjc4MDQ3LDE0LjczNDUgLTcuMzc2NTUsMjEuNDcwNSAtMTIuNDg3ODQsOC43MTQgLTE4Ljg2OTAzLDUuMDA0OSAtMjMuMzAyNzgsLTAuMDEgLTE2LjY3MTEsLTE4Ljg1NjEgLTcuMzc3MTYsLTM5LjE0NTQgLTEuMzY4MzIsLTQzLjc3NDEgeiIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICA8L2c+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMTI1IgogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjgwNDYyNDcsMCwwLDEuODA0NjI0NywtMTEuNTI5MDc5LC0yMjYuMjQyNzgpIgogICAgICAgICBpbmtzY2FwZTpwYXRoLWVmZmVjdD0iI3BhdGgtZWZmZWN0Nzk0Ij4KICAgICAgICA8cGF0aAogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgaWQ9InBhdGg3NiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZlZDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjM1Mjc3OCIKICAgICAgICAgICBkPSJtIC0yNy44NDcwNTgsMTU0Ljc5Nzk3IGggMTIuNzE2OTI4IGwgLTUuMDQ5NDQyLC0xNC41NzEyNiAtMi42NzU2MiwwIHoiCiAgICAgICAgICAgaW5rc2NhcGU6b3JpZ2luYWwtZD0ibSAtMjguMjQxODM3LDE1NS43Mzg3MyBoIDEzLjUxMTA0IFYgMTQyLjIyNzcgaCAtMTMuNTExMDQgeiIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgaWQ9InBhdGg3OCIKICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZlZDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjM1Mjc3OCIKICAgICAgICAgICBkPSJtIC0yNy43MTA3NjgsMTUzLjk0MjYyIGggMTIuMTc5NzMyIGwgLTQuNjc2MTAyLC0xMy43MjkxNSAtMi42Nzc5NzksMCB6IgogICAgICAgICAgIGlua3NjYXBlOm9yaWdpbmFsLWQ9Im0gLTI4LjQxNjQ1NywxNTUuNTYzNzUgaCAxMy41NjkyNCB2IC0xMy4zOTQ2MiBoIC0xMy41NjkyNCB6IiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICBpZD0icGF0aDk2IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMzUyNzc4IgogICAgICAgICAgIGQ9Im0gLTIyLjg4Nzk0OCwxNDAuMTY3NzMgMi43MjU2NTIsMCA1LjYyNTU5NCwxNS43ODI2IC0xMy45NjM5OTcsLTAuMDM0NiB6IG0gLTQuNTY1NzAyLDEzLjc1MTYxIDExLjgzNTkzMywwLjAxODYgLTQuNTkxNTA4LC0xMy42ODE0NyAtMi42MzU4LC0yLjNlLTQgeiIKICAgICAgICAgICBpbmtzY2FwZTpvcmlnaW5hbC1kPSJtIC0yOC41MTM0MDQsMTQxLjk2Mzc1IGggMTMuOTc1OTk3IGwgNy4wNWUtNCwxMy45ODY1OCAtMTMuOTc2MzQ5LC0wLjAwNiB6IG0gMC4zNzQ2NSwxMy41OTUgMTMuMTk2NzExLDAuMDA0IDAuMDEwOTQsLTEzLjIwNDgzIC0xMy4yMDkwNTgsLTAuMDAxIHoiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBkPSJtIC0yMS41MzM1ODUsMTQzLjk3OTk5IDMuMTU3MzY1LDcuMTE2MTIgMC4wNjQ3NSwtMy45NDg2NSAtMi42ODMzODQsLTQuMzg5MDcgMC4yMTAzNTMsLTAuNDY3NDggLTAuMDk0NjYsLTAuNzYwMTMgMC4xMTk4NCwtMC4yMjY2MyAwLjA4NjgzLDAuNTU5ODggMC4yMTA3MSwwLjI3MDcyIDAuMzUyODkyLC0wLjg4MDEzIDAuMjA0ODQxLDAuMjA3NjYgYyAtMC4wNDI5NywtMC4xMzU2OSAtMC4xOTkyNDUsLTAuNTUyMzMgLTAuNTAwMTA3LC0wLjgzMjg1IC0wLjI5NTk1MywtMC4yNzU5IC0wLjQ5NjM2NCwtMC4xMTg5OSAtMC41NjM0MDcsLTAuMDE4MiBsIC0wLjQxMzM3MSwwLjYyMzIgMC4xMzMxNTUsMC4xODM5NSAtMC4yODM0NjUsMC40NjA2OSAtMC4yODIwNywtMC40NjA2OSAwLjEzMzQ2NSwtMC4xODM5NSAtMC40MTE5MzQsLTAuNjIzMiBjIC0wLjA2NjgyLC0wLjEwMDgzIC0wLjI2Njg5NSwtMC4yNTc3NCAtMC41NjM1NDUsMC4wMTgzIC0wLjMwMTM2NSwwLjI4MDQzIC0wLjQ1Mjg4NCwwLjY5NzMzIC0wLjQ5NTk1NSwwLjgzMjg4IGwgMC4xOTk0NCwtMC4yMDc3OSAwLjM1MDg4MywwLjg4MDEyIDAuMjEyMDA0LC0wLjI3Mzk1IDAuMDg3MjYsLTAuNTU2NjQgMC4xMTkzNDEsMC4yMjY2MyAtMC4wOTY0LDAuNzU4MDYgMC4yMDk0OTgsMC40Njk1NCAtMi42NDc0NjIsNC4zMTQ1MyAwLjA3MzE2LDMuODcyMDcgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjM1Mjc3OCIKICAgICAgICAgICBpZD0icGF0aDEwNiIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgIGlua3NjYXBlOm9yaWdpbmFsLWQ9Im0gLTIxLjU0Njk2LDE1MC42MzgzMSA0LjIwNjg3NSw0LjE5NyAxLjY0NzExOSwtMS42NDYwNiAtNC4yMTE0NjEsLTQuMjA3OTQgMC44MjA5MTQsLTAuODE0MjEgdiAtMS42MzcyNCBsIDAuNTg1MjU4LC0wLjU4NTI2IDAuMDAxNCwxLjM1ODU1IDAuNTcxODUyLDAuNTYyNjggMi4wNTQyMjUsLTIuMDU2MzQgMC41NTUyNzMsMC41NDg5MiBjIDAsLTAuMzUzNDggLTAuMTA0NDIzLC0xLjU3MDIxIC0xLjA4MTI2NCwtMi41MjI3MSAtMS4wOTQzMTcsLTEuMDY2OCAtMi4xODkzMzksLTAuNDQyNzQgLTIuNTY2ODExLC0wLjA2NiBsIC0xLjk4MzY3LDEuOTg0MDIgMC40OTM1MzYsMC40OTI0OCAtMS4wOTMyNTgsMS4wODk3MyAtMS4wOTE4NDcsLTEuMDg5NzMgMC40OTMxODMsLTAuNDkyNDggLTEuOTgzMzE2LC0xLjk4NDAyIGMgLTAuMzc3NDczLC0wLjM3Njc3IC0xLjQ3MjQ5NSwtMS4wMDA4MyAtMi41NjcxNjQsMC4wNjYzIC0wLjk3NjQ4OSwwLjk1MjE1IC0xLjA1ODMzNCwyLjE2OTU4IC0xLjA1ODMzNCwyLjUyMjcxIGwgMC41MzI2OTUsLTAuNTQ5MjcgMi4wNTM4NzIsMi4wNTYzNCAwLjU3MjU1OCwtMC41Njk3NCAzLjUzZS00LC0xLjM1MTQ5IDAuNTg1MjU4LDAuNTg1MjYgLTAuMDAxMSwxLjYzMzM2IDAuODIyMzI1LDAuODE4MDkgLTQuMTY5MTI4LDQuMTY1MjUgMS42NDUwMDMsMS42NDIxOCB6IiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IlZyc3R2YSAyIgogICAgIGlkPSJsYXllcjIiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIgLz4KPC9zdmc+Cg==", "name": "Raiffeisenbank statements for PohodaSQL", "description": "Import Raiffeisenbank statements into Pohoda", - "executable": "pohoda-raiffeisenbank-statements", + "executable": "pohoda-raiffeisenbank-transactions", "setup": "pohoda-raiffeisenbank-setup", "cmdparams": "", "deploy": "apt install pohoda-raiffeisenbank", @@ -10,6 +10,7 @@ "requirements": "Pohoda,SQLServer,RaiffeisenBank", "ociimage": "", "topics": "RaiffeisenBank,Statements,Pohoda", + "uuid": "e9893573-24aa-4518-bf05-66fae9ad153c", "environment": { "ACCOUNT_NUMBER": { "type": "text", diff --git a/phpstan-default-baseline.neon b/phpstan-default-baseline.neon new file mode 100644 index 0000000..364905f --- /dev/null +++ b/phpstan-default-baseline.neon @@ -0,0 +1,2 @@ +parameters: + ignoreErrors: diff --git a/phpstan-default.neon.dist b/phpstan-default.neon.dist new file mode 100644 index 0000000..ead7041 --- /dev/null +++ b/phpstan-default.neon.dist @@ -0,0 +1,9 @@ +includes: + - phpstan-default-baseline.neon + +parameters: + inferPrivatePropertyTypeFromConstructor: true + level: 6 + paths: + - src + - tests diff --git a/pohoda-raiffeisenbank-statements.svg b/pohoda-raiffeisenbank-statements.svg new file mode 100644 index 0000000..9ea205c --- /dev/null +++ b/pohoda-raiffeisenbank-statements.svg @@ -0,0 +1,681 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Pohoda/RaiffeisenBank/PohodaBankClient.php b/src/Pohoda/RaiffeisenBank/PohodaBankClient.php index 28be5ba..375590f 100644 --- a/src/Pohoda/RaiffeisenBank/PohodaBankClient.php +++ b/src/Pohoda/RaiffeisenBank/PohodaBankClient.php @@ -1,76 +1,60 @@ * - * @author Vítězslav Dvořák - * @copyright (C) 2023-2024 Spoje.Net + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. */ namespace Pohoda\RaiffeisenBank; /** - * Description of ApiClient + * Description of ApiClient. * * @author vitex */ abstract class PohodaBankClient extends \mServer\Bank { - protected $constantor; - protected $constSymbols; - /** - * - * @var \DateTime - */ - protected $since; - - /** - * - * @var \DateTime + * DateTime Formating eg. 2021-08-01T10:00:00.0Z. */ - protected $until; + public static string $dateTimeFormat = 'Y-m-d\\TH:i:s.0\\Z'; /** - * DateTime Formating eg. 2021-08-01T10:00:00.0Z - * @var string + * DateTime Formating eg. 2021-08-01T10:00:00.0Z. */ - public static $dateTimeFormat = 'Y-m-d\\TH:i:s.0\\Z'; + public static string $dateFormat = 'Y-m-d'; - /** - * DateTime Formating eg. 2021-08-01T10:00:00.0Z - * @var string - */ - public static $dateFormat = 'Y-m-d'; - - /** - * - * @var Response - */ - public $response; - - /** - * - * @var - */ + // public Response $response; TODO: Update + protected $constantor; + protected $constSymbols; + protected \DateTime $since; + protected \DateTime $until; protected $bank; /** - * Transaction Handler + * Transaction Handler. * * @param string $bankAccount Account Number - * @param array $options + * @param array $options */ public function __construct($bankAccount, $options = []) { parent::__construct(); $this->setDataValue('account', $bankAccount); -// $this->constantor = new \Pohoda\RW(null, ['evidence' => 'konst-symbol']); -// $this->constSymbols = $this->constantor->getColumnsFromPohoda(['kod'], ['limit' => 0], 'kod'); + // $this->constantor = new \Pohoda\RW(null, ['evidence' => 'konst-symbol']); + // $this->constSymbols = $this->constantor->getColumnsFromPohoda(['kod'], ['limit' => 0], 'kod'); } /** - * Source Identifier + * Source Identifier. * * @return string */ @@ -80,97 +64,113 @@ public function sourceString() } /** - * Try to check certificate readibilty + * Try to check certificate readibilty. * * @param string $certFile path to certificate */ - public static function checkCertificatePresence($certFile) + public static function checkCertificatePresence($certFile): void { if ((file_exists($certFile) === false) || (is_readable($certFile) === false)) { - fwrite(STDERR, 'Cannot read specified certificate file: ' . $certFile . PHP_EOL); + fwrite(\STDERR, 'Cannot read specified certificate file: ' . $certFile . \PHP_EOL); + exit(1); } } /** - * Prepare processing interval + * Prepare processing interval. * * @param string $scope * * @throws \Exception */ - function setScope($scope) + public function setScope($scope): void { switch ($scope) { case 'today': $this->since = (new \DateTime())->setTime(0, 0); $this->until = (new \DateTime())->setTime(23, 59); + break; case 'yesterday': $this->since = (new \DateTime('yesterday'))->setTime(0, 0); $this->until = (new \DateTime('yesterday'))->setTime(23, 59); + break; case 'current_month': - $this->since = new \DateTime("first day of this month"); + $this->since = new \DateTime('first day of this month'); $this->until = new \DateTime(); + break; case 'last_month': - $this->since = new \DateTime("first day of last month"); - $this->until = new \DateTime("last day of last month"); + $this->since = new \DateTime('first day of last month'); + $this->until = new \DateTime('last day of last month'); + break; case 'last_two_months': - $this->since = (new \DateTime("first day of last month"))->modify('-1 month'); - $this->until = (new \DateTime("last day of last month")); + $this->since = (new \DateTime('first day of last month'))->modify('-1 month'); + $this->until = (new \DateTime('last day of last month')); + break; case 'previous_month': - $this->since = new \DateTime("first day of -2 month"); - $this->until = new \DateTime("last day of -2 month"); + $this->since = new \DateTime('first day of -2 month'); + $this->until = new \DateTime('last day of -2 month'); + break; case 'two_months_ago': - $this->since = new \DateTime("first day of -3 month"); - $this->until = new \DateTime("last day of -3 month"); + $this->since = new \DateTime('first day of -3 month'); + $this->until = new \DateTime('last day of -3 month'); + break; case 'this_year': $this->since = new \DateTime('first day of January ' . date('Y')); - $this->until = new \DateTime("last day of December" . date('Y')); + $this->until = new \DateTime('last day of December' . date('Y')); + break; - case 'January': //1 - case 'February': //2 - case 'March': //3 - case 'April': //4 - case 'May': //5 - case 'June': //6 - case 'July': //7 - case 'August': //8 - case 'September'://9 - case 'October': //10 - case 'November': //11 - case 'December': //12 + case 'January': // 1 + case 'February': // 2 + case 'March': // 3 + case 'April': // 4 + case 'May': // 5 + case 'June': // 6 + case 'July': // 7 + case 'August': // 8 + case 'September':// 9 + case 'October': // 10 + case 'November': // 11 + case 'December': // 12 $this->since = new \DateTime('first day of ' . $scope . ' ' . date('Y')); $this->until = new \DateTime('last day of ' . $scope . ' ' . date('Y')); + break; case 'auto': $latestRecord = $this->getColumnsFromPohoda(['id', 'lastUpdate'], ['limit' => 1, 'order' => 'lastUpdate@A', 'source' => $this->sourceString(), 'banka' => $this->bank]); - if (array_key_exists(0, $latestRecord) && array_key_exists('lastUpdate', $latestRecord[0])) { + + if (\array_key_exists(0, $latestRecord) && \array_key_exists('lastUpdate', $latestRecord[0])) { $this->since = $latestRecord[0]['lastUpdate']; } else { $this->addStatusMessage('Previous record for "auto since" not found. Defaulting to today\'s 00:00', 'warning'); $this->since = (new \DateTime())->setTime(0, 0); } - $this->until = new \DateTime(); //Now + + $this->until = new \DateTime(); // Now + break; + default: throw new \Exception('Unknown scope ' . $scope); + break; } - if ($scope != 'auto' && $scope != 'today' && $scope != 'yesterday') { + + if ($scope !== 'auto' && $scope !== 'today' && $scope !== 'yesterday') { $this->since = $this->since->setTime(0, 0); $this->until = $this->until->setTime(0, 0); } } /** - * Request Identifier + * Request Identifier. * * @return string */ @@ -180,7 +180,7 @@ public function getxRequestId() } /** - * Obtain Current Currency + * Obtain Current Currency. * * @return string */ @@ -196,16 +196,15 @@ public function getCurrencyCode() */ public function checkForTransactionPresence() { - return false; //!empty($this->getColumnsFromPohoda('id', ['cisDosle' => $this->getDataValue('cisDosle')])); TODO + return false; // !empty($this->getColumnsFromPohoda('id', ['cisDosle' => $this->getDataValue('cisDosle')])); TODO } /** - * * @param string $conSym */ - public function ensureKSExists($conSym) + public function ensureKSExists($conSym): void { - if (!array_key_exists($conSym, $this->constSymbols)) { + if (!\array_key_exists($conSym, $this->constSymbols)) { $this->constantor->insertToPohoda(['kod' => $conSym, 'poznam' => 'Created by Raiffeisen Bank importer', 'nazev' => '?!?!? ' . $conSym]); $this->constantor->addStatusMessage('New constant ' . $conSym . ' created in flexibee', 'warning'); $this->constSymbols[$conSym] = $conSym; @@ -213,7 +212,6 @@ public function ensureKSExists($conSym) } /** - * * @param int $success * * @return int @@ -223,16 +221,19 @@ public function insertTransactionToPohoda($success) $producedId = ''; $producedNumber = ''; $producedAction = ''; + if ($this->checkForTransactionPresence() === false) { try { $cache = $this->getData(); $this->reset(); - //TODO: $result = $this->sync(); + // TODO: $result = $this->sync(); $result = $this->addToPohoda($cache); + if ($this->commit()) { - $success++; + ++$success; } - if (property_exists($this->response, 'producedDetails') && is_array($this->response->producedDetails)) { + + if (property_exists($this->response, 'producedDetails') && \is_array($this->response->producedDetails)) { $producedId = $this->response->producedDetails['id']; $producedNumber = $this->response->producedDetails['number']; $producedAction = $this->response->producedDetails['actionType']; @@ -244,10 +245,12 @@ public function insertTransactionToPohoda($success) $producedNumber = 'n/a'; $producedAction = 'n/a'; } + $this->addStatusMessage('#' . $producedId . ' ' . $producedAction . ' ' . $producedNumber, $result ? 'success' : 'error'); // TODO: Parse response for docID } else { - $this->addStatusMessage('Record with remoteNumber ' . 'TODO' . ' already present in Pohoda', 'warning'); + $this->addStatusMessage('Record with remoteNumber TODO already present in Pohoda', 'warning'); } + return $success; } } diff --git a/src/Pohoda/RaiffeisenBank/Statementor.php b/src/Pohoda/RaiffeisenBank/Statementor.php index 70a2ecb..1987358 100644 --- a/src/Pohoda/RaiffeisenBank/Statementor.php +++ b/src/Pohoda/RaiffeisenBank/Statementor.php @@ -1,63 +1,48 @@ - * @copyright (C) 2023-2024 Spoje.Net + * (c) Spoje.Net IT s.r.o. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. */ namespace Pohoda\RaiffeisenBank; /** - * Description of Statementor + * Description of Statementor. * * @author vitex */ -class Statementor extends PohodaBankClient { - - /** - * - * @var \VitexSoftware\Raiffeisenbank\Statementor - */ - private $obtainer; - - /** - * - * @var string - */ - private $statementsDir; - - /** - * - * @var string - */ - public $account; +class Statementor extends PohodaBankClient +{ + public string $account; + public string $scope = ''; + private \VitexSoftware\Raiffeisenbank\Statementor $obtainer; + private string $statementsDir; /** - * Downloaded XML statements - * @var array + * Downloaded XML statements. */ - private $statementsXML = []; + private array $statementsXML = []; /** - * Downloaded PDF statements - * @var array - */ - private $statementsPDF = []; - - /** - * - * @var string + * Downloaded PDF statements. */ - public $scope = ''; + private array $statementsPDF = []; /** - * * @param string $bankAccount * @param array $options */ - public function __construct($bankAccount, $options = []) { + public function __construct($bankAccount, $options = []) + { parent::__construct($bankAccount, $options); $this->obtainer = new \VitexSoftware\Raiffeisenbank\Statementor($bankAccount); @@ -71,65 +56,71 @@ public function __construct($bankAccount, $options = []) { } /** - * - * @param string $xmlFile - * * @return array */ - public function importXML(string $xmlFile) { + public function importXML(string $xmlFile) + { $this->statementsXML[basename($xmlFile)] = $xmlFile; $pdfFile = str_replace('.xml', '.pdf', $xmlFile); + if (file_exists($pdfFile)) { $this->statementsPDF[basename($pdfFile)] = $pdfFile; } + return $this->import(); } /** - * * @return array */ - public function importOnline() { + public function importOnline() + { $this->statementsXML = $this->obtainer->download($this->statementsDir, $this->obtainer->getStatements(), 'xml'); $this->statementsPDF = $this->obtainer->download($this->statementsDir, $this->obtainer->getStatements(), 'pdf'); + return $this->import(); } /** - * * @return array */ - public function import() { + public function import() + { $inserted = []; - $this->account = \Ease\Shared::cfg('POHODA_BANK_IDS', 'RB'); //TODO!!! + $this->account = \Ease\Shared::cfg('POHODA_BANK_IDS', 'RB'); // TODO!!! $success = 0; + foreach ($this->statementsXML as $pos => $statement) { $statementXML = new \SimpleXMLElement(file_get_contents($statement)); $statementNumberLong = current((array) $statementXML->BkToCstmrStmt->Stmt->Id); + foreach ($statementXML->BkToCstmrStmt->Stmt->Ntry as $entry) { $this->dataReset(); $this->setData($this->entryToPohoda($entry)); - list($statementNumber, $statementYear, ) = explode('_', $pos); + [$statementNumber, $statementYear] = explode('_', $pos); $this->setDataValue('statementNumber', ['statementNumber' => $statementNumber . '/' . $statementYear]); -// $this->setDataValue('account', current((array) $entry->NtryRef)); -// $this->setDataValue('vypisCisDokl', $statementXML->BkToCstmrStmt->Stmt->Id); -// $this->setDataValue('cisSouhrnne', $statementXML->BkToCstmrStmt->Stmt->LglSeqNb); + // $this->setDataValue('account', current((array) $entry->NtryRef)); + // $this->setDataValue('vypisCisDokl', $statementXML->BkToCstmrStmt->Stmt->Id); + // $this->setDataValue('cisSouhrnne', $statementXML->BkToCstmrStmt->Stmt->LglSeqNb); $success = $this->insertTransactionToPohoda($success); - if (property_exists($this->response, 'producedDetails') && is_array($this->response->producedDetails)) { - if (array_key_exists('id', $this->response->producedDetails)) { + + if (property_exists($this->response, 'producedDetails') && \is_array($this->response->producedDetails)) { + if (\array_key_exists('id', $this->response->producedDetails)) { $inserted[$this->response->producedDetails['id']] = $this->response->producedDetails; } else { echo ''; // WTF? } } } - $this->addStatusMessage($statementNumberLong . ' Import done. ' . $success . ' of ' . count($this->statementsXML) . ' imported'); + + $this->addStatusMessage($statementNumberLong . ' Import done. ' . $success . ' of ' . \count($this->statementsXML) . ' imported'); + return $inserted; } } /** - * Parse Ntry element and convert into \Pohoda\Banka data + * Parse Ntry element and convert into \Pohoda\Banka data. * * @see https://cbaonline.cz/upload/1425-standard-xml-cba-listopad-2020.pdf * @see https://www.stormware.cz/xml/schema/version_2/bank.xsd @@ -138,45 +129,52 @@ public function import() { * * @return array */ - public function entryToPohoda($entry) { + public function entryToPohoda($entry) + { $data['symPar'] = current((array) $entry->NtryRef); $data['intNote'] = 'Import Job ' . \Ease\Shared::cfg('JOB_ID', 'n/a'); $data['note'] = 'Imported by ' . \Ease\Shared::AppName() . ' ' . \Ease\Shared::AppVersion(); $data['datePayment'] = current((array) $entry->BookgDt->DtTm); $data['dateStatement'] = current((array) $entry->ValDt->DtTm); $moveTrans = ['DBIT' => 'expense', 'CRDT' => 'receipt']; - $data['bankType'] = $moveTrans[trim($entry->CdtDbtInd)]; -// $data['cisDosle', strval($entry->NtryRef)); -// $data['datVyst', new \DateTime($entry->BookgDt->DtTm)); - $data['homeCurrency'] = ['priceNone' => abs(floatval($entry->Amt))]; // "price3", "price3Sum", "price3VAT", "priceHigh", "priceHighSum", "priceHighVAT", "priceLow", "priceLowSum", "priceLowVAT", "priceNone", "round" - //TODO $data['foreignCurrency', abs(floatval($entry->Amt))); -// $data['account', $this->bank); -// $data['mena', \Pohoda\RO::code($entry->Amt->attributes()->Ccy)); + $data['bankType'] = $moveTrans[trim((string)$entry->CdtDbtInd)]; + // $data['cisDosle', strval($entry->NtryRef)); + // $data['datVyst', new \DateTime($entry->BookgDt->DtTm)); + $data['homeCurrency'] = ['priceNone' => abs((float) $entry->Amt)]; // "price3", "price3Sum", "price3VAT", "priceHigh", "priceHighSum", "priceHighVAT", "priceLow", "priceLowSum", "priceLowVAT", "priceNone", "round" + + // TODO $data['foreignCurrency', abs(floatval($entry->Amt))); + // $data['account', $this->bank); + // $data['mena', \Pohoda\RO::code($entry->Amt->attributes()->Ccy)); if (property_exists($entry, 'NtryDtls')) { if (property_exists($entry->NtryDtls, 'TxDtls')) { $transactionData = []; + if (property_exists($entry->NtryDtls->TxDtls, 'AddtlTxInf')) { $data['text'] = current((array) $entry->NtryDtls->TxDtls->AddtlTxInf); } -// if ($entry->NtryDtls->TxDtls->Refs->MsgId) { -// $data['numberMovement'] = current((array) $entry->NtryDtls->TxDtls->Refs->MsgId); -// } + + // if ($entry->NtryDtls->TxDtls->Refs->MsgId) { + // $data['numberMovement'] = current((array) $entry->NtryDtls->TxDtls->Refs->MsgId); + // } if ($entry->NtryDtls->TxDtls->Refs->InstrId) { // ZPS: Platební titul, // SEPA: Identifikace platby Dříve i pro TPS: Konstantní symbol $data['symConst'] = current((array) $entry->NtryDtls->TxDtls->Refs->InstrId); } + if (property_exists($entry->NtryDtls->TxDtls->Refs, 'EndToEndId')) { // ZPS: Klientská reference, // SEPA: Reference, Karetní operace: Číslo dobíjeného mobilu, případně číslo faktury, Klientská reference Dříve i pro TPS: Variabilní symbol $data['symVar'] = current((array) $entry->NtryDtls->TxDtls->Refs->EndToEndId); } + $paymentAccount = []; + if (property_exists($entry->NtryDtls->TxDtls, 'RltdPties')) { if (property_exists($entry->NtryDtls->TxDtls->RltdPties, 'DbtrAcct')) { $paymentAccount['accountNo'] = current((array) $entry->NtryDtls->TxDtls->RltdPties->DbtrAcct->Id->Othr->Id); - $data['partnerIdentity'] = [//"address", "addressLinkToAddress", "extId", "id", "shipToAddress" + $data['partnerIdentity'] = [// "address", "addressLinkToAddress", "extId", "id", "shipToAddress" 'address' => [// "VATPayerType", "city", "company", "country", "dic", "division", "email", "fax", "icDph", "ico", "mobilPhone", "name", "phone", "street", "zip" 'name' => current((array) $entry->NtryDtls->TxDtls->RltdPties->DbtrAcct->Nm)]]; } @@ -187,8 +185,8 @@ public function entryToPohoda($entry) { if (property_exists($entry->NtryDtls->TxDtls->RltdPties->CdtrAcct, 'Nm')) { $data['partnerIdentity'] = [ 'address' => [ - 'name' => current((array) $entry->NtryDtls->TxDtls->RltdPties->CdtrAcct->Nm) - ] + 'name' => current((array) $entry->NtryDtls->TxDtls->RltdPties->CdtrAcct->Nm), + ], ]; } else { $this->addStatusMessage(sprintf(_('%s payment without partnerIdentity name'), $paymentAccount['accountNo'])); @@ -204,110 +202,132 @@ public function entryToPohoda($entry) { } } -// if (count($paymentAccount)) { -// $data['paymentAccount'] = current((array) $paymentAccount['accountNo']); -// } -// accountNo, bankCode + // if (count($paymentAccount)) { + // $data['paymentAccount'] = current((array) $paymentAccount['accountNo']); + // } + // accountNo, bankCode if (empty($paymentAccount) === false) { $data['paymentAccount'] = $paymentAccount; } } } -// -// $data['source'] = $this->sourceString()); + + // + // $data['source'] = $this->sourceString()); return $data; } /** - * Prepare processing interval + * Prepare processing interval. * * @param string $scope * * @throws \Exception */ - function setScope($scope) { + public function setScope($scope): void + { switch ($scope) { case 'yesterday': $this->since = (new \DateTime('yesterday'))->setTime(0, 0); $this->until = (new \DateTime('yesterday'))->setTime(23, 59); + break; case 'current_month': - $this->since = new \DateTime("first day of this month"); + $this->since = new \DateTime('first day of this month'); $this->until = new \DateTime(); + break; case 'last_month': - $this->since = new \DateTime("first day of last month"); - $this->until = new \DateTime("last day of last month"); + $this->since = new \DateTime('first day of last month'); + $this->until = new \DateTime('last day of last month'); + break; case 'last_week': - $this->since = new \DateTime("first day of last week"); - $this->until = new \DateTime("last day of last week"); + $this->since = new \DateTime('first day of last week'); + $this->until = new \DateTime('last day of last week'); + break; case 'last_two_months': - $this->since = (new \DateTime("first day of last month"))->modify('-1 month'); - $this->until = (new \DateTime("last day of last month")); + $this->since = (new \DateTime('first day of last month'))->modify('-1 month'); + $this->until = (new \DateTime('last day of last month')); + break; case 'previous_month': - $this->since = new \DateTime("first day of -2 month"); - $this->until = new \DateTime("last day of -2 month"); + $this->since = new \DateTime('first day of -2 month'); + $this->until = new \DateTime('last day of -2 month'); + break; case 'two_months_ago': - $this->since = new \DateTime("first day of -3 month"); - $this->until = new \DateTime("last day of -3 month"); + $this->since = new \DateTime('first day of -3 month'); + $this->until = new \DateTime('last day of -3 month'); + break; case 'this_year': $this->since = new \DateTime('first day of January ' . date('Y')); - $this->until = new \DateTime("last day of December" . date('Y')); + $this->until = new \DateTime('last day of December' . date('Y')); + break; - case 'January': //1 - case 'February': //2 - case 'March': //3 - case 'April': //4 - case 'May': //5 - case 'June': //6 - case 'July': //7 - case 'August': //8 - case 'September'://9 - case 'October': //10 - case 'November': //11 - case 'December': //12 + case 'January': // 1 + case 'February': // 2 + case 'March': // 3 + case 'April': // 4 + case 'May': // 5 + case 'June': // 6 + case 'July': // 7 + case 'August': // 8 + case 'September':// 9 + case 'October': // 10 + case 'November': // 11 + case 'December': // 12 $this->since = new \DateTime('first day of ' . $scope . ' ' . date('Y')); $this->until = new \DateTime('last day of ' . $scope . ' ' . date('Y')); + break; case 'auto': $latestRecord = $this->getColumnsFromPohoda(['id', 'lastUpdate'], ['limit' => 1, 'order' => 'lastUpdate@A', 'source' => $this->sourceString(), 'banka' => $this->bank]); - if (array_key_exists(0, $latestRecord) && array_key_exists('lastUpdate', $latestRecord[0])) { + + if (\array_key_exists(0, $latestRecord) && \array_key_exists('lastUpdate', $latestRecord[0])) { $this->since = $latestRecord[0]['lastUpdate']; } else { $this->addStatusMessage('Previous record for "auto since" not found. Defaulting to today\'s 00:00', 'warning'); $this->since = (new \DateTime())->setTime(0, 0); } - $this->until = new \DateTime(); //Now + + $this->until = new \DateTime(); // Now + break; + default: throw new \Exception('Unknown scope ' . $scope); + break; } - if ($scope != 'auto' && $scope != 'today' && $scope != 'yesterday') { + + if ($scope !== 'auto' && $scope !== 'today' && $scope !== 'yesterday') { $this->since = $this->since->setTime(0, 0); $this->until = $this->until->setTime(0, 0); } + $this->scope = $scope; } /** - * List of downloaded PDF statements + * List of downloaded PDF statements. + * * @return array */ - public function getPdfStatements() { + public function getPdfStatements() + { return $this->statementsPDF; } /** - * List of downloaded XML statements + * List of downloaded XML statements. + * * @return array */ - public function getXmlStatements() { + public function getXmlStatements() + { return $this->statementsXML; } } diff --git a/src/Pohoda/RaiffeisenBank/Transactor.php b/src/Pohoda/RaiffeisenBank/Transactor.php index 6f2d17a..fb3f58d 100644 --- a/src/Pohoda/RaiffeisenBank/Transactor.php +++ b/src/Pohoda/RaiffeisenBank/Transactor.php @@ -1,25 +1,32 @@ - * @copyright (C) 2023-2024 Spoje.Net + * (c) Spoje.Net IT s.r.o. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. */ namespace Pohoda\RaiffeisenBank; /** - * Handle bank transactions + * Handle bank transactions. * * @author vitex */ class Transactor extends PohodaBankClient { + /** - * Transaction Handler + * Transaction Handler. * - * @param null $init + * @param mixed $bankAccount * @param array $options */ public function __construct($bankAccount, $options = []) @@ -28,7 +35,7 @@ public function __construct($bankAccount, $options = []) } /** - * Obtain Transactions from RB + * Obtain Transactions from RB. * * @return array */ @@ -38,171 +45,194 @@ public function getTransactions() $page = 1; $transactions = []; $this->addStatusMessage(sprintf(_('Request transactions from %s to %s'), $this->since->format(self::$dateTimeFormat), $this->until->format(self::$dateTimeFormat)), 'debug'); + try { do { $result = $apiInstance->getTransactionList($this->getxRequestId(), $this->getDataValue('account'), $this->getCurrencyCode(), $this->since->format(self::$dateTimeFormat), $this->until->format(self::$dateTimeFormat), $page); + if (empty($result)) { $this->addStatusMessage(sprintf(_('No transactions from %s to %s'), $this->since->format(self::$dateTimeFormat), $this->until->format(self::$dateTimeFormat))); $result['lastPage'] = true; } - if (array_key_exists('transactions', $result)) { + + if (\array_key_exists('transactions', $result)) { $transactions = array_merge($transactions, $result['transactions']); } } while ($result['lastPage'] === false); } catch (Exception $e) { - echo 'Exception when calling GetTransactionListApi->getTransactionList: ', $e->getMessage(), PHP_EOL; + echo 'Exception when calling GetTransactionListApi->getTransactionList: ', $e->getMessage(), \PHP_EOL; } + return $transactions; } /** - * Import process itself + * Import process itself. */ - public function import() + public function import(): void { -// $allMoves = $this->getColumnsFromPohoda('id', ['limit' => 0, 'banka' => $this->bank]); + // $allMoves = $this->getColumnsFromPohoda('id', ['limit' => 0, 'banka' => $this->bank]); $allTransactions = $this->getTransactions(); - $this->addStatusMessage(count($allTransactions) . ' transactions obtained via API', 'debug'); + $this->addStatusMessage(\count($allTransactions) . ' transactions obtained via API', 'debug'); $success = 0; + foreach ($allTransactions as $transaction) { - //$this->dataReset(); + // $this->dataReset(); $this->takeTransactionData($transaction); $success = $this->insertTransactionToPohoda($success); $this->reset(); } - $this->addStatusMessage('Import done. ' . $success . ' of ' . count($allTransactions) . ' imported'); + + $this->addStatusMessage('Import done. ' . $success . ' of ' . \count($allTransactions) . ' imported'); } /** - * Use Transaction data for Bank record + * Use Transaction data for Bank record. * * @param array $transactionData */ - public function takeTransactionData($transactionData) + public function takeTransactionData($transactionData): void { -// $this->setMyKey(\Pohoda\RO::code('RB' . $transactionData->entryReference)); + // $this->setMyKey(\Pohoda\RO::code('RB' . $transactionData->entryReference)); $moveTrans = [ 'DBIT' => 'expense', - 'CRDT' => 'receipt' + 'CRDT' => 'receipt', ]; $this->setDataValue('bankType', $moveTrans[$transactionData->creditDebitIndication]); - $this->setDataValue('account', \Ease\Shared::cfg('POHODA_BANK_IDS')); // KB + $this->setDataValue('account', \Ease\Shared::cfg('POHODA_BANK_IDS')); // RB $this->setDataValue('datePayment', (new \DateTime($transactionData->valueDate))->format('Y-m-d')); $this->setDataValue('intNote', _('Automatic Import') . ': ' . \Ease\Shared::appName() . ' ' . \Ease\Shared::appVersion() . ' ' . $transactionData->entryReference); $this->setDataValue('statementNumber', ['statementNumber' => $transactionData->bankTransactionCode->code]); - $counterAccount = $transactionData->entryDetails->transactionDetails->relatedParties->counterParty; -//$bankRecord = [ -//// "MOSS" => ['ids' => 'AB'], -// 'account' => 'KB', -//// "accounting", -//// "accountingPeriodMOSS", -//// "activity" => 'testing', -// 'bankType' => 'receipt', -//// "centre", -//// "classificationKVDPH", -//// "classificationVAT", -// "contract" => 'n/a', -// "datePayment" => date('Y-m-d'), -// "dateStatement" => date('Y-m-d'), -//// "evidentiaryResourcesMOSS", -// "intNote" => 'Import works well', -//// "myIdentity", -// "note" => 'Automated import', -// 'partnerIdentity' => ['address' => ['street' => 'dlouha'], 'shipToAddress' => ['street' => 'kratka']], -// "paymentAccount" => ['accountNo' => '1234', 'bankCode' => '5500'], -// 'statementNumber' => [ -// 'statementNumber' => (string) time(), -// //'numberMovement' => (string) time() -// ], -//// "symConst" => 'XX', -//// ?"symPar", -// "symSpec" => '23', -// "symVar" => (string) time(), -// "text" => 'Testing income ' . time(), -// 'homeCurrency' => ['priceNone' => '1001'] -//]; -// $this->setDataValue('cisDosle', $transactionData->entryReference); + $this->setDataValue('symPar', (string) $transactionData->entryReference); + + // $bankRecord = [ + // // "MOSS" => ['ids' => 'AB'], + // 'account' => 'KB', + // // "accounting", + // // "accountingPeriodMOSS", + // // "activity" => 'testing', + // 'bankType' => 'receipt', + // // "centre", + // // "classificationKVDPH", + // // "classificationVAT", + // "contract" => 'n/a', + // "datePayment" => date('Y-m-d'), + // "dateStatement" => date('Y-m-d'), + // // "evidentiaryResourcesMOSS", + // "intNote" => 'Import works well', + // // "myIdentity", + // "note" => 'Automated import', + // 'partnerIdentity' => ['address' => ['street' => 'dlouha'], 'shipToAddress' => ['street' => 'kratka']], + // "paymentAccount" => ['accountNo' => '1234', 'bankCode' => '5500'], + // 'statementNumber' => [ + // 'statementNumber' => (string) time(), + // //'numberMovement' => (string) time() + // ], + // // "symConst" => 'XX', + // // ?"symPar", + // "symSpec" => '23', + // "symVar" => (string) time(), + // "text" => 'Testing income ' . time(), + // 'homeCurrency' => ['priceNone' => '1001'] + // ]; + // $this->setDataValue('cisDosle', $transactionData->entryReference); if (property_exists($transactionData->entryDetails->transactionDetails->remittanceInformation, 'creditorReferenceInformation')) { if (property_exists($transactionData->entryDetails->transactionDetails->remittanceInformation->creditorReferenceInformation, 'variable')) { $this->setDataValue('symVar', $transactionData->entryDetails->transactionDetails->remittanceInformation->creditorReferenceInformation->variable); } -// if (property_exists($transactionData->entryDetails->transactionDetails->remittanceInformation->creditorReferenceInformation, 'constant')) { -// $conSym = $transactionData->entryDetails->transactionDetails->remittanceInformation->creditorReferenceInformation->constant; -// if (intval($conSym)) { -// $conSym = sprintf('%04d', $conSym); -// $this->ensureKSExists($conSym); -// $this->setDataValue('konSym', \Pohoda\RO::code($conSym)); -// } -// } + // if (property_exists($transactionData->entryDetails->transactionDetails->remittanceInformation->creditorReferenceInformation, 'constant')) { + // $conSym = $transactionData->entryDetails->transactionDetails->remittanceInformation->creditorReferenceInformation->constant; + // if (intval($conSym)) { + // $conSym = sprintf('%04d', $conSym); + // $this->ensureKSExists($conSym); + // $this->setDataValue('konSym', \Pohoda\RO::code($conSym)); + // } + // } } - -// $this->setDataValue('datVyst', $transactionData->bookingDate); - //$this->setDataValue('duzpPuv', $transactionData->valueDate); + // $this->setDataValue('datVyst', $transactionData->bookingDate); + // $this->setDataValue('duzpPuv', $transactionData->valueDate); if (property_exists($transactionData->entryDetails->transactionDetails->remittanceInformation, 'originatorMessage')) { $this->setDataValue('text', $transactionData->entryDetails->transactionDetails->remittanceInformation->originatorMessage); } $this->setDataValue('note', 'Import Job ' . \Ease\Shared::cfg('JOB_ID', 'n/a')); + if (property_exists($transactionData->entryDetails->transactionDetails->relatedParties, 'counterParty')) { + $counterAccount = $transactionData->entryDetails->transactionDetails->relatedParties->counterParty; + if (property_exists($transactionData->entryDetails->transactionDetails->relatedParties->counterParty, 'name')) { -//TODO $this->setDataValue('nazFirmy', $transactionData->entryDetails->transactionDetails->relatedParties->counterParty->name); + // TODO $this->setDataValue('nazFirmy', $transactionData->entryDetails->transactionDetails->relatedParties->counterParty->name); } - $counterAccountNumber = $counterAccount->account->accountNumber; + if (property_exists($counterAccount->account, 'accountNumberPrefix')) { $accountNumber = $counterAccount->account->accountNumberPrefix . '-' . $counterAccountNumber; } else { $accountNumber = $counterAccountNumber; } + $this->setDataValue('paymentAccount', ['accountNo' => $accountNumber, 'bankCode' => $counterAccount->organisationIdentification->bankCode]); - $amount = strval(abs($transactionData->amount->value)); - if ($transactionData->amount->currency == 'CZK') { + $amount = (string) abs($transactionData->amount->value); + + if ($transactionData->amount->currency === 'CZK') { $this->setDataValue('homeCurrency', ['priceNone' => $amount]); } else { - $this->setDataValue('foreginCurrency', ['priceNone' => $amount]); //TODO: Not tested + $this->setDataValue('foreginCurrency', ['priceNone' => $amount]); // TODO: Not tested } } -// $this->setDataValue('source', $this->sourceString()); -// echo $this->getJsonizedData() . "\n"; + // $this->setDataValue('source', $this->sourceString()); + // echo $this->getJsonizedData() . "\n"; } /** - * Prepare processing interval + * Prepare processing interval. * * @param string $scope * * @throws \Exception */ - function setScope($scope) + public function setScope($scope): void { switch ($scope) { case 'today': $this->since = (new \DateTime())->setTime(0, 0); $this->until = (new \DateTime())->setTime(23, 59); + break; case 'yesterday': $this->since = (new \DateTime('yesterday'))->setTime(0, 0); $this->until = (new \DateTime('yesterday'))->setTime(23, 59, 59, 999); + + case 'last_week': + $this->since = new \DateTime('first day of last week'); + $this->until = new \DateTime('last day of last week'); + break; case 'auto': $latestRecord = $this->getColumnsFromPohoda(['id', 'lastUpdate'], ['limit' => 1, 'order' => 'lastUpdate@A', 'source' => $this->sourceString(), 'banka' => $this->bank]); - if (array_key_exists(0, $latestRecord) && array_key_exists('lastUpdate', $latestRecord[0])) { + + if (\array_key_exists(0, $latestRecord) && \array_key_exists('lastUpdate', $latestRecord[0])) { $this->since = $latestRecord[0]['lastUpdate']; } else { $this->addStatusMessage('Previous record for "auto since" not found. Defaulting to today\'s 00:00', 'warning'); $this->since = (new \DateTime('yesterday'))->setTime(0, 0); } - $this->until = (new \DateTime('two days ago'))->setTime(0, 0); //Now + + $this->until = (new \DateTime('two days ago'))->setTime(0, 0); // Now + break; + default: throw new \Exception('Unknown scope ' . $scope); + break; } - if ($scope != 'auto' && $scope != 'today' && $scope != 'yesterday') { + + if ($scope !== 'auto' && $scope !== 'today' && $scope !== 'yesterday') { $this->since = $this->since->setTime(0, 0); $this->until = $this->until->setTime(0, 0); } diff --git a/src/pohoda-raiffeisenbank-setup.php b/src/pohoda-raiffeisenbank-setup.php index 778ac90..3803d7a 100644 --- a/src/pohoda-raiffeisenbank-setup.php +++ b/src/pohoda-raiffeisenbank-setup.php @@ -1,36 +1,46 @@ - * @copyright (C) 2023-2024 Spoje.Net + * (c) Spoje.Net IT s.r.o. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. */ namespace Pohoda\RaiffeisenBank; -require_once('../vendor/autoload.php'); +require_once '../vendor/autoload.php'; /** - * Get List of bank accounts and import it into Pohoda + * Get List of bank accounts and import it into Pohoda. */ -\Ease\Shared::init(['POHODA_URL', 'POHODA_USERNAME', 'POHODA_PASSWORD', 'POHODA_ICO', 'CERT_FILE', 'CERT_PASS', 'XIBMCLIENTID'], isset($argv[1]) ? $argv[1] : '../.env'); +\Ease\Shared::init(['POHODA_URL', 'POHODA_USERNAME', 'POHODA_PASSWORD', 'POHODA_ICO', 'CERT_FILE', 'CERT_PASS', 'XIBMCLIENTID'], $argv[1] ?? '../.env'); $apiInstance = new \VitexSoftware\Raiffeisenbank\PremiumAPI\GetAccountsApi(); $x_request_id = time(); // string | Unique request id provided by consumer application for reference and auditing. Transactor::checkCertificatePresence(\Ease\Shared::cfg('CERT_FILE')); -exit(0); //TODO +exit(0); // TODO try { $result = $apiInstance->getAccounts($x_request_id); - if (array_key_exists('accounts', $result)) { + + if (\array_key_exists('accounts', $result)) { $banker = new \SpojeNet\PohodaSQL\DOC(); + if (\Ease\Shared::cfg('APP_DEBUG')) { $banker->logBanner($apiInstance->getConfig()->getUserAgent()); } + $currentAccounts = $banker->getColumnsFromPohoda(['id', 'kod', 'nazev', 'iban', 'bic', 'nazBanky', 'poznam'], ['limit' => 0], 'iban'); + foreach ($result['accounts'] as $account) { - if (array_key_exists($account->iban, $currentAccounts)) { + if (\array_key_exists($account->iban, $currentAccounts)) { $banker->addStatusMessage(sprintf('Account %s already exists in pohoda as %s', $account->friendlyName, $currentAccounts[$account->iban]['kod'])); } else { $banker->dataReset(); @@ -44,12 +54,12 @@ $banker->setDataValue('bic', $account->bankBicCode); $saved = $banker->sync(); $banker->addStatusMessage( - sprintf('Account %s registered in flexibee as %s', $account->friendlyName, $banker->getRecordCode()), - ($saved ? 'success' : 'error') + sprintf('Account %s registered in flexibee as %s', $account->friendlyName, $banker->getRecordCode()), + $saved ? 'success' : 'error', ); } } } } catch (Exception $e) { - echo 'Exception when calling GetAccountsApi->getAccounts: ', $e->getMessage(), PHP_EOL; + echo 'Exception when calling GetAccountsApi->getAccounts: ', $e->getMessage(), \PHP_EOL; } diff --git a/src/pohoda-raiffeisenbank-statements.php b/src/pohoda-raiffeisenbank-statements.php index f9bd14a..f30d089 100644 --- a/src/pohoda-raiffeisenbank-statements.php +++ b/src/pohoda-raiffeisenbank-statements.php @@ -1,10 +1,16 @@ - * @copyright (C) 2023-2024 Spoje.Net + * (c) Spoje.Net IT s.r.o. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. */ namespace Pohoda\RaiffeisenBank; @@ -14,39 +20,37 @@ use Office365\Runtime\Auth\UserCredentials; use Office365\SharePoint\ClientContext; -require_once('../vendor/autoload.php'); +require_once '../vendor/autoload.php'; -define('APP_NAME', 'Pohoda RaiffeisenBank Statements'); +\define('APP_NAME', 'Pohoda RaiffeisenBank Statements'); /** - * Get today's Statements list + * Get today's Statements list. */ -\Ease\Shared::init(['POHODA_URL', 'POHODA_USERNAME', 'POHODA_PASSWORD', 'POHODA_ICO', 'CERT_FILE', 'CERT_PASS', 'XIBMCLIENTID', 'ACCOUNT_NUMBER'], isset($argv[1]) ? $argv[1] : '../.env'); +\Ease\Shared::init(['POHODA_URL', 'POHODA_USERNAME', 'POHODA_PASSWORD', 'POHODA_ICO', 'CERT_FILE', 'CERT_PASS', 'XIBMCLIENTID', 'ACCOUNT_NUMBER'], $argv[1] ?? '../.env'); PohodaBankClient::checkCertificatePresence(\Ease\Shared::cfg('CERT_FILE')); $engine = new Statementor(\Ease\Shared::cfg('ACCOUNT_NUMBER')); -$engine->setScope(\Ease\Shared::cfg('STATEMENT_IMPORT_SCOPE', 'last_month')); +$engine->setScope(\Ease\Shared::cfg('IMPORT_SCOPE', 'last_month')); $engine->logBanner('', 'Scope: ' . $engine->scope); $inserted = $engine->importOnline(); if ($inserted) { - -// -// [243] => Array -// ( -// [id] => 243 -// [number] => KB102023 -// [actionType] => add -// ) -// -// [244] => Array -// ( -// [id] => 244 -// [number] => KB102023 -// [actionType] => add -// ) -// - + // + // [243] => Array + // ( + // [id] => 243 + // [number] => KB102023 + // [actionType] => add + // ) + // + // [244] => Array + // ( + // [id] => 244 + // [number] => KB102023 + // [actionType] => add + // ) + // $pdfs = $engine->getPdfStatements(); @@ -65,22 +69,25 @@ foreach ($pdfs as $filename) { $uploadFile = $targetFolder->uploadFile(basename($filename), file_get_contents($filename)); + try { $ctx->executeQuery(); } catch (Exception $exc) { - fwrite(fopen('php://stderr', 'wb'), $exc->getMessage() . PHP_EOL); + fwrite(fopen('php://stderr', 'wb'), $exc->getMessage() . \PHP_EOL); + exit(1); } + $fileUrl = $ctx->getBaseUrl() . '/_layouts/15/download.aspx?SourceUrl=' . urlencode($uploadFile->getServerRelativeUrl()); } $doc = new \SpojeNet\PohodaSQL\DOC(); - $doc->setDataValue('RelAgID', \SpojeNet\PohodaSQL\Agenda::BANK); //Bank + $doc->setDataValue('RelAgID', \SpojeNet\PohodaSQL\Agenda::BANK); // Bank foreach ($inserted as $id => $importInfo) { $statement = current($pdfs); - //$url = \Ease\Shared::cfg('DOWNLOAD_LINK_PREFIX') . urlencode(basename($statement)); + // $url = \Ease\Shared::cfg('DOWNLOAD_LINK_PREFIX') . urlencode(basename($statement)); $result = $doc->urlAttachment($id, $fileUrl, basename($statement)); - $doc->addStatusMessage($importInfo['number'] . ' ' . $fileUrl, is_null($result) ? 'error' : 'success'); + $doc->addStatusMessage($importInfo['number'] . ' ' . $fileUrl, null === $result ? 'error' : 'success'); } -} \ No newline at end of file +} diff --git a/src/pohoda-raiffeisenbank-transactions.php b/src/pohoda-raiffeisenbank-transactions.php index 2efbbad..5e39756 100644 --- a/src/pohoda-raiffeisenbank-transactions.php +++ b/src/pohoda-raiffeisenbank-transactions.php @@ -1,20 +1,28 @@ - * @copyright (C) 2023-2024 Spoje.Net + * (c) Spoje.Net IT s.r.o. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. */ namespace Pohoda\RaiffeisenBank; -require_once('../vendor/autoload.php'); +\define('APP_NAME', 'PohodaRBTransactions'); + +require_once '../vendor/autoload.php'; /** - * Get today's transactions list + * Get today's transactions list. */ -\Ease\Shared::init(['POHODA_URL', 'POHODA_USERNAME', 'POHODA_PASSWORD', 'POHODA_ICO', 'CERT_FILE', 'CERT_PASS', 'XIBMCLIENTID', 'ACCOUNT_NUMBER'], isset($argv[1]) ? $argv[1] : '../.env'); +\Ease\Shared::init(['POHODA_URL', 'POHODA_USERNAME', 'POHODA_PASSWORD', 'POHODA_ICO', 'CERT_FILE', 'CERT_PASS', 'XIBMCLIENTID', 'ACCOUNT_NUMBER'], $argv[1] ?? '../.env'); Transactor::checkCertificatePresence(\Ease\Shared::cfg('CERT_FILE')); $engine = new Transactor(\Ease\Shared::cfg('ACCOUNT_NUMBER')); -$engine->setScope(\Ease\Shared::cfg('TRANSACTION_IMPORT_SCOPE', 'yesterday')); +$engine->setScope(\Ease\Shared::cfg('IMPORT_SCOPE', 'yesterday')); $engine->import(); diff --git a/src/pohoda-raiffeisenbank-xml-statement.php b/src/pohoda-raiffeisenbank-xml-statement.php index cbd1825..07dd7fe 100644 --- a/src/pohoda-raiffeisenbank-xml-statement.php +++ b/src/pohoda-raiffeisenbank-xml-statement.php @@ -1,29 +1,34 @@ * - * @author Vítězslav Dvořák - * @copyright (C) 2023-2024 Spoje.Net + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. */ namespace Pohoda\RaiffeisenBank; -use SpojeNet\PohodaSQL\Agenda; use Ease\Shared; use Office365\Runtime\Auth\ClientCredential; use Office365\Runtime\Auth\UserCredentials; use Office365\SharePoint\ClientContext; -require_once('../vendor/autoload.php'); +require_once '../vendor/autoload.php'; -define('APP_NAME', 'Pohoda RaiffeisenBank Statements'); +\define('APP_NAME', 'Pohoda RaiffeisenBank Statements'); /** - * Get today's tramsactons list + * Get today's tramsactons list. */ -\Ease\Shared::init(['POHODA_URL', 'POHODA_USERNAME', 'POHODA_PASSWORD', 'POHODA_ICO', 'ACCOUNT_NUMBER'], isset($argv[2]) ? $argv[2] : '../.env'); -$xmlFile = \Ease\Shared::cfg('STATEMENT_FILE', isset($argv[1]) ? $argv[1] : ''); +\Ease\Shared::init(['POHODA_URL', 'POHODA_USERNAME', 'POHODA_PASSWORD', 'POHODA_ICO', 'ACCOUNT_NUMBER'], $argv[2] ?? '../.env'); +$xmlFile = \Ease\Shared::cfg('STATEMENT_FILE', $argv[1] ?? ''); $engine = new Statementor(\Ease\Shared::cfg('ACCOUNT_NUMBER')); $inserted = $engine->importXML($xmlFile); @@ -44,7 +49,6 @@ // ) // - $pdfs = $engine->getPdfStatements(); if (Shared::cfg('OFFICE365_USERNAME', false) && Shared::cfg('OFFICE365_PASSWORD', false)) { @@ -58,23 +62,24 @@ foreach ($pdfs as $filename) { $uploadFile = $targetFolder->uploadFile(basename($filename), file_get_contents($filename)); + try { $ctx->executeQuery(); } catch (Exception $exc) { - fwrite(fopen('php://stderr', 'wb'), $exc->getMessage() . PHP_EOL); + fwrite(fopen('php://stderr', 'wb'), $exc->getMessage() . \PHP_EOL); + exit(1); } + $fileUrl = $ctx->getBaseUrl() . '/_layouts/15/download.aspx?SourceUrl=' . urlencode($uploadFile->getServerRelativeUrl()); } - - $doc = new \SpojeNet\PohodaSQL\DOC(); -$doc->setDataValue('RelAgID', \SpojeNet\PohodaSQL\Agenda::BANK); //Bank +$doc->setDataValue('RelAgID', \SpojeNet\PohodaSQL\Agenda::BANK); // Bank foreach ($inserted as $id => $importInfo) { $statement = current($pdfs); - //$url = \Ease\Shared::cfg('DOWNLOAD_LINK_PREFIX') . urlencode(basename($statement)); + // $url = \Ease\Shared::cfg('DOWNLOAD_LINK_PREFIX') . urlencode(basename($statement)); $result = $doc->urlAttachment($id, $fileUrl, basename($statement)); - $doc->addStatusMessage($importInfo['number'] . ' ' . $fileUrl, is_null($result) ? 'error' : 'success'); + $doc->addStatusMessage($importInfo['number'] . ' ' . $fileUrl, null === $result ? 'error' : 'success'); } diff --git a/transactions.png b/transactions.png new file mode 100644 index 0000000000000000000000000000000000000000..e29b1181b7adcc3ea655ada62772eee6088bec37 GIT binary patch literal 145409 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 literal 0 HcmV?d00001