pax_global_header00006660000000000000000000000064126757726220014532gustar00rootroot0000000000000052 comment=91d92c4ff80e4c6573a4dc91aee08e50d2617d30 composer-1.0.0-beta2/000077500000000000000000000000001267577262200143525ustar00rootroot00000000000000composer-1.0.0-beta2/.gitattributes000066400000000000000000000010071267577262200172430ustar00rootroot00000000000000# Auto-detect text files, ensure they use LF. * text=auto eol=lf # These files are always considered text and should use LF. # See core.whitespace @ http://git-scm.com/docs/git-config for whitespace flags. *.php text eol=lf whitespace=blank-at-eol,blank-at-eof,space-before-tab,tab-in-indent,tabwidth=4 diff=php *.json text eol=lf whitespace=blank-at-eol,blank-at-eof,space-before-tab,tab-in-indent,tabwidth=4 *.test text eol=lf whitespace=blank-at-eol,blank-at-eof,space-before-tab,tab-in-indent,tabwidth=4 composer-1.0.0-beta2/.github/000077500000000000000000000000001267577262200157125ustar00rootroot00000000000000composer-1.0.0-beta2/.github/CONTRIBUTING.md000066400000000000000000000041351267577262200201460ustar00rootroot00000000000000Contributing to Composer ======================== Please note that this project is released with a [Contributor Code of Conduct](http://contributor-covenant.org/version/1/2/0/). By participating in this project you agree to abide by its terms. Reporting Issues ---------------- When reporting issues, please try to be as descriptive as possible, and include as much relevant information as you can. A step by step guide on how to reproduce the issue will greatly increase the chances of your issue being resolved in a timely manner. For example, if you are experiencing a problem while running one of the commands, please provide full output of said command in very very verbose mode (`-vvv`, e.g. `composer install -vvv`). If your issue involves installing, updating or resolving dependencies, the chance of us being able to reproduce your issue will be much higher if you share your `composer.json` with us. Installation from Source ------------------------ Prior to contributing to Composer, you must be able to run the test suite. To achieve this, you need to acquire the Composer source code: 1. Run `git clone https://github.com/composer/composer.git` 2. Download the [`composer.phar`](https://getcomposer.org/composer.phar) executable 3. Run Composer to get the dependencies: `cd composer && php ../composer.phar install` You can run the test suite by executing `vendor/bin/phpunit` when inside the composer directory, and run Composer by executing the `bin/composer`. To test your modified Composer code against another project, run `php /path/to/composer/bin/composer` inside that project's directory. Contributing policy ------------------- Fork the project, create a feature branch, and send us a pull request. To ensure a consistent code base, you should make sure the code follows the [PSR-2 Coding Standards](http://www.php-fig.org/psr/psr-2/). You can also run [php-cs-fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) with the configuration file that can be found in the project root directory. If you would like to help, take a look at the [list of open issues](https://github.com/composer/composer/issues). composer-1.0.0-beta2/.github/ISSUE_TEMPLATE.md000066400000000000000000000003111267577262200204120ustar00rootroot00000000000000With the following composer.json: ```json { ... } ``` When I run this command: ``` composer command -vvv (please include -vvv!) ``` I get this output: ``` ``` And I expected this to happen: composer-1.0.0-beta2/.gitignore000066400000000000000000000001671267577262200163460ustar00rootroot00000000000000/.settings /.project /.buildpath /composer.phar /vendor /nbproject phpunit.xml .vagrant Vagrantfile .idea .php_cs.cachecomposer-1.0.0-beta2/.php_cs000066400000000000000000000035521267577262200156340ustar00rootroot00000000000000 Jordi Boggiano For the full copyright and license information, please view the LICENSE file that was distributed with this source code. EOF; $finder = Symfony\CS\Finder::create() ->files() ->name('*.php') ->exclude('Fixtures') ->in(__DIR__.'/src') ->in(__DIR__.'/tests') ; return Symfony\CS\Config::create() ->setUsingCache(true) //->setUsingLinter(false) ->setRiskyAllowed(true) ->setRules(array( '@PSR2' => true, 'binary_operator_spaces' => true, 'blank_line_before_return' => true, 'header_comment' => array('header' => $header), 'include' => true, 'long_array_syntax' => true, 'method_separation' => true, 'no_blank_lines_after_class_opening' => true, 'no_blank_lines_after_phpdoc' => true, 'no_blank_lines_between_uses' => true, 'no_duplicate_semicolons' => true, 'no_extra_consecutive_blank_lines' => true, 'no_leading_import_slash' => true, 'no_leading_namespace_whitespace' => true, 'no_trailing_comma_in_singleline_array' => true, 'no_unused_imports' => true, 'object_operator_without_whitespace' => true, 'phpdoc_align' => true, 'phpdoc_indent' => true, 'phpdoc_no_access' => true, 'phpdoc_no_package' => true, 'phpdoc_order' => true, 'phpdoc_scalar' => true, 'phpdoc_trim' => true, 'phpdoc_type_to_var' => true, 'psr0' => true, 'single_blank_line_before_namespace' => true, 'spaces_cast' => true, 'standardize_not_equals' => true, 'ternary_operator_spaces' => true, 'trailing_comma_in_multiline_array' => true, 'whitespacy_lines' => true, )) ->finder($finder) ; composer-1.0.0-beta2/.travis.yml000066400000000000000000000014001267577262200164560ustar00rootroot00000000000000language: php sudo: false cache: directories: - $HOME/.composer/cache addons: apt: packages: - parallel php: - 5.3 - 5.4 - 5.5 - 5.6 - 7.0 - hhvm - nightly matrix: fast_finish: true allow_failures: - php: nightly before_script: - rm -f ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/xdebug.ini - flags="" - composer install $flags - bin/composer install $flags - git config --global user.name travis-ci - git config --global user.email travis@example.com script: - ls -d tests/Composer/Test/* | parallel --gnu --keep-order 'echo "Running {} tests"; ./vendor/bin/phpunit -c tests/complete.phpunit.xml --colors=always {} || (echo -e "\e[41mFAILED\e[0m {}" && $(exit 1));' git: depth: 5 composer-1.0.0-beta2/CHANGELOG.md000066400000000000000000000615241267577262200161730ustar00rootroot00000000000000### [1.0.0-beta2] - 2016-03-27 * Break: The `install` command now turns into an `update` command automatically if you have no composer.lock. This was done only half-way before which caused inconsistencies * Break: By default the `remove` command now removes dependencies as well, and --update-with-dependencies is deprecated. Use --no-update-with-dependencies to get old behavior * Added support for update channels in `self-update`. All users will now update to stable builds by default. Run `self-update` with `--snapshot`, `--preview` or `--stable` to switch between update channels. * Added support for SSL_CERT_DIR env var and openssl.capath ini value * Added some conflict detection in `why-not` command * Added suggestion of root package's suggests in `create-project` command * Fixed `create-project` ignoring --ignore-platform-reqs when choosing a version of the package * Fixed `search` command in a directory without composer.json * Fixed path repository handling of symlinks on windows * Fixed PEAR repo handling to prefer HTTPS mirrors over HTTP ones * Fixed handling of Path env var on Windows, only PATH was accepted before * Small error reporting and docs improvements ### [1.0.0-beta1] - 2016-03-03 * Break: By default we now disable any non-secure protocols (http, git, svn). This may lead to issues if you rely on those. See `secure-http` config option. * Break: `show` / `list` command now only show installed packages by default. An `--all` option is added to show all packages. * Added VCS repo support for the GitLab API, see also `gitlab-oauth` and `gitlab-domains` config options * Added `prohibits` / `why-not` command to show what blocks an upgrade to a given package:version pair * Added --tree / -t to the `show` command to see all your installed packages in a tree view * Added --interactive / -i to the `update` command, which lets you pick packages to update interactively * Added `exec` command to run binaries while having bin-dir in the PATH for convenience * Added --root-reqs to the `update` command to update only your direct, first degree dependencies * Added `cafile` and `capath` config options to control HTTPS certificate authority * Added pubkey verification of composer.phar when running self-update * Added possibility to configure per-package `preferred-install` types for more flexibility between prefer-source and prefer-dist * Added unpushed-changes detection when updating dependencies and in the `status` command * Added COMPOSER_AUTH env var that lets you pass a json configuration like the auth.json file * Added `secure-http` and `disable-tls` config options to control HTTPS/HTTP * Added warning when Xdebug is enabled as it reduces performance quite a bit, hide it with COMPOSER_DISABLE_XDEBUG_WARN=1 if you must * Added duplicate key detection when loading composer.json * Added `sort-packages` config option to force sorting of the requirements when using the `require` command * Added support for the XDG Base Directory spec on linux * Added XzDownloader for xz file support * Fixed SSL support to fully verify peers in all PHP versions, unsecure HTTP is also disabled by default * Fixed stashing and cleaning up of untracked files when updating packages * Fixed plugins being enabled after installation even when --no-plugins * Many small bug fixes and additions ### [1.0.0-alpha11] - 2015-11-14 * Added config.platform to let you specify what your target environment looks like and make sure you do not inadvertently install dependencies that would break it * Added `exclude-from-classmap` in the autoload config that lets you ignore sub-paths of classmapped directories, or psr-0/4 directories when building optimized autoloaders * Added `path` repository type to install/symlink packages from local paths * Added possibility to reference script handlers from within other handlers using @script-name to reduce duplication * Added `suggests` command to show what packages are suggested, use -v to see more details * Added `content-hash` inside the composer.lock to restrict the warnings about outdated lock file to some specific changes in the composer.json file * Added `archive-format` and `archive-dir` config options to specify default values for the archive command * Added --classmap-authoritative to `install`, `update`, `require`, `remove` and `dump-autoload` commands, forcing the optimized classmap to be authoritative * Added -A / --with-dependencies to the `validate` command to allow validating all your dependencies recursively * Added --strict to the `validate` command to treat any warning as an error that then returns a non-zero exit code * Added a dependency on composer/semver, which is the externalized lib for all the version constraints parsing and handling * Added support for classmap autoloading to load plugin classes and script handlers * Added `bin-compat` config option that if set to `full` will create .bat proxy for binaries even if Composer runs in a linux VM * Added SPDX 2.0 support, and externalized that in a composer/spdx-licenses lib * Added warnings when the classmap autoloader finds duplicate classes * Added --file to the `archive` command to choose the filename * Added Ctrl+C handling in create-project to cancel the operation cleanly * Fixed version guessing to use ^ always, default to stable versions, and avoid versions that require a higher php version than you have * Fixed the lock file switching back and forth between old and new URL when a package URL is changed and many people run updates * Fixed partial updates updating things they shouldn't when the current vendor dir was out of date with the lock file * Fixed PHAR file creation to be more reproducible and always generate the exact same phar file from a given source * Fixed issue when checking out git branches or tags that are also the name of a file in the repo * Many minor fixes and documentation additions and UX improvements ### [1.0.0-alpha10] - 2015-04-14 * Break: The following event classes are deprecated and you should update your script handlers to use the new ones in type hints: - `Composer\Script\CommandEvent` is deprecated, use `Composer\Script\Event` - `Composer\Script\PackageEvent` is deprecated, use `Composer\Installer\PackageEvent` * Break: Output is now split between stdout and stderr. Any irrelevant output to each command is on stderr as per unix best practices. * Added support for npm-style semver operators (`^` and `-` ranges, ` ` = AND, `||` = OR) * Added --prefer-lowest to `update` command to allow testing a package with the lowest declared dependencies * Added support for parsing semver build metadata `+anything` at the end of versions * Added --sort-packages option to `require` command for sorting dependencies * Added --no-autoloader to `install` and `update` commands to skip autoload generation * Added --list to `run-script` command to see available scripts * Added --absolute to `config` command to get back absolute paths * Added `classmap-authoritative` config option, if enabled only the classmap info will be used by the composer autoloader * Added support for branch-alias on numeric branches * Added support for the `https_proxy`/`HTTPS_PROXY` env vars used only for https URLs * Added support for using real composer repos as local paths in `create-project` command * Added --no-dev to `licenses` command * Added support for PHP 7.0 nightly builds * Fixed detection of stability when parsing multiple constraints * Fixed installs from lock file containing updated composer.json requirement * Fixed the autoloader suffix in vendor/autoload.php changing in every build * Many minor fixes, documentation additions and UX improvements ### [1.0.0-alpha9] - 2014-12-07 * Added `remove` command to do the reverse of `require` * Added --ignore-platform-reqs to `install`/`update` commands to install even if you are missing a php extension or have an invalid php version * Added a warning when abandoned packages are being installed * Added auto-selection of the version constraint in the `require` command, which can now be used simply as `composer require foo/bar` * Added ability to define custom composer commands using scripts * Added `browse` command to open a browser to the given package's repo URL (or homepage with `-H`) * Added an `autoload-dev` section to declare dev-only autoload rules + a --no-dev flag to dump-autoload * Added an `auth.json` file, with `store-auths` config option * Added a `http-basic` config option to store login/pwds to hosts * Added failover to source/dist and vice-versa in case a download method fails * Added --path (-P) flag to the show command to see the install path of packages * Added --update-with-dependencies and --update-no-dev flags to the require command * Added `optimize-autoloader` config option to force the `-o` flag from the config * Added `clear-cache` command * Added a GzipDownloader to download single gzipped files * Added `ssh` support in the `github-protocols` config option * Added `pre-dependencies-solving` and `post-dependencies-solving` events * Added `pre-archive-cmd` and `post-archive-cmd` script events to the `archive` command * Added a `no-api` flag to GitHub VCS repos to skip the API but still get zip downloads * Added http-basic auth support for private git repos not on github * Added support for autoloading `.hh` files when running HHVM * Added support for PHP 5.6 * Added support for OTP auth when retrieving a GitHub API key * Fixed isolation of `files` autoloaded scripts to ensure they can not affect anything * Improved performance of solving dependencies * Improved SVN and Perforce support * A boatload of minor fixes, documentation additions and UX improvements ### [1.0.0-alpha8] - 2014-01-06 * Break: The `install` command now has --dev enabled by default. --no-dev can be used to install without dev requirements * Added `composer-plugin` package type to allow extensibility, and deprecated `composer-installer` * Added `psr-4` autoloading support and deprecated `target-dir` since it is a better alternative * Added --no-plugins flag to replace --no-custom-installers where available * Added `global` command to operate Composer in a user-global directory * Added `licenses` command to list the license of all your dependencies * Added `pre-status-cmd` and `post-status-cmd` script events to the `status` command * Added `post-root-package-install` and `post-create-project-cmd` script events to the `create-project` command * Added `pre-autoload-dump` script event * Added --rollback flag to self-update * Added --no-install flag to create-project to skip installing the dependencies * Added a `hhvm` platform package to require Facebook's HHVM implementation of PHP * Added `github-domains` config option to allow using GitHub Enterprise with Composer's GitHub support * Added `prepend-autoloader` config option to allow appending Composer's autoloader instead of the default prepend behavior * Added Perforce support to the VCS repository * Added a vendor/composer/autoload_files.php file that lists all files being included by the files autoloader * Added support for the `no_proxy` env var and other proxy support improvements * Added many robustness tweaks to make sure zip downloads work more consistently and corrupted caches are invalidated * Added the release date to `composer -V` output * Added `autoloader-suffix` config option to allow overriding the randomly generated autoloader class suffix * Fixed BitBucket API usage * Fixed parsing of inferred stability flags that are more stable than the minimum stability * Fixed installation order of plugins/custom installers * Fixed tilde and wildcard version constraints to be more intuitive regarding stabilities * Fixed handling of target-dir changes when updating packages * Improved performance of the class loader * Improved memory usage and performance of solving dependencies * Tons of minor bug fixes and improvements ### [1.0.0-alpha7] - 2013-05-04 * Break: For forward compatibility, you should change your deployment scripts to run `composer install --no-dev`. The install command will install dev dependencies by default starting in the next release * Break: The `update` command now has --dev enabled by default. --no-dev can be used to update without dev requirements, but it will create an incomplete lock file and is discouraged * Break: Removed support for lock files created before 2012-09-15 due to their outdated unusable format * Added `prefer-stable` flag to pick stable packages over unstable ones when possible * Added `preferred-install` config option to always enable --prefer-source or --prefer-dist * Added `diagnose` command to to system/network checks and find common problems * Added wildcard support in the update whitelist, e.g. to update all packages of a vendor do `composer update vendor/*` * Added `archive` command to archive the current directory or a given package * Added `run-script` command to manually trigger scripts * Added `proprietary` as valid license identifier for non-free code * Added a `php-64bit` platform package that you can require to force a 64bit php * Added a `lib-ICU` platform package * Added a new official package type `project` for project-bootstrapping packages * Added zip/dist local cache to speed up repetitive installations * Added `post-autoload-dump` script event * Added `Event::getDevMode` to let script handlers know if dev requirements are being installed * Added `discard-changes` config option to control the default behavior when updating "dirty" dependencies * Added `use-include-path` config option to make the autoloader look for files in the include path too * Added `cache-ttl`, `cache-files-ttl` and `cache-files-maxsize` config option * Added `cache-dir`, `cache-files-dir`, `cache-repo-dir` and `cache-vcs-dir` config option * Added support for using http(s) authentication to non-github repos * Added support for using multiple autoloaders at once (e.g. PHPUnit + application both using Composer autoloader) * Added support for .inc files for classmap autoloading (legacy support, do not do this on new projects!) * Added support for version constraints in show command, e.g. `composer show monolog/monolog 1.4.*` * Added support for svn repositories containing packages in a deeper path (see package-path option) * Added an `artifact` repository to scan a directory containing zipped packages * Added --no-dev flag to `install` and `update` commands * Added --stability (-s) flag to create-project to lower the required stability * Added --no-progress to `install` and `update` to hide the progress indicators * Added --available (-a) flag to the `show` command to display only available packages * Added --name-only (-N) flag to the `show` command to show only package names (one per line, no formatting) * Added --optimize-autoloader (-o) flag to optimize the autoloader from the `install` and `update` commands * Added -vv and -vvv flags to get more verbose output, can be useful to debug some issues * Added COMPOSER_NO_INTERACTION env var to do the equivalent of --no-interaction (should be set on build boxes, CI, PaaS) * Added PHP 5.2 compatibility to the autoloader configuration files so they can be used to configure another autoloader * Fixed handling of platform requirements of the root package when installing from lock * Fixed handling of require-dev dependencies * Fixed handling of unstable packages that should be downgraded to stable packages when updating to new version constraints * Fixed parsing of the `~` operator combined with unstable versions * Fixed the `require` command corrupting the json if the new requirement was invalid * Fixed support of aliases used together with `#` constraints * Improved output of dependency solver problems by grouping versions of a package together * Improved performance of classmap generation * Improved mercurial support in various places * Improved lock file format to minimize unnecessary diffs * Improved the `config` command to support all options * Improved the coverage of the `validate` command * Tons of minor bug fixes and improvements ### [1.0.0-alpha6] - 2012-10-23 * Schema: Added ability to pass additional options to repositories (i.e. ssh keys/client certificates to secure private repos) * Schema: Added a new `~` operator that should be preferred over `>=`, see http://getcomposer.org/doc/01-basic-usage.md#package-versions * Schema: Version constraints `` flags in require for restricting packages to a certain stability * Schema: Removed `recommend` * Schema: `suggest` is now informational and can use any description for a package, not only a constraint * Break: vendor/.composer/autoload.php has been moved to vendor/autoload.php, other files are now in vendor/composer/ * Added caching of repository metadata (faster startup times & failover if packagist is down) * Added removal of packages that are not needed anymore * Added include_path support for legacy projects that are full of require_once statements * Added installation notifications API to allow better statistics on Composer repositories * Added support for proxies that require authentication * Added support for private github repositories over https * Added autoloading support for root packages that use target-dir * Added awareness of the root package presence and support for it's provide/replace/conflict keys * Added IOInterface::isDecorated to test for colored output support * Added validation of licenses based on the [SPDX registry](http://www.spdx.org/licenses/) * Improved repository protocol to have large cacheable parts * Fixed various bugs relating to package aliasing, proxy configuration, binaries * Various bug fixes and docs improvements ### [1.0.0-alpha2] - 2012-04-03 * Added `create-project` command to install a project from scratch with composer * Added automated `classmap` autoloading support for non-PSR-0 compliant projects * Added human readable error reporting when deps can not be solved * Added support for private GitHub and SVN repositories (use --no-interaction for CI) * Added "file" downloader type to download plain files * Added support for authentication with svn repositories * Added autoload support for PEAR repositories * Improved clones from GitHub which now automatically select between git/https/http protocols * Improved `validate` command to give more feedback * Improved the `search` & `show` commands output * Removed dependency on filter_var * Various robustness & error handling improvements, docs fixes and more bug fixes ### 1.0.0-alpha1 - 2012-03-01 * Initial release [1.0.0-beta1]: https://github.com/composer/composer/compare/1.0.0-beta1...1.0.0-beta2 [1.0.0-beta1]: https://github.com/composer/composer/compare/1.0.0-alpha11...1.0.0-beta1 [1.0.0-alpha11]: https://github.com/composer/composer/compare/1.0.0-alpha10...1.0.0-alpha11 [1.0.0-alpha10]: https://github.com/composer/composer/compare/1.0.0-alpha9...1.0.0-alpha10 [1.0.0-alpha9]: https://github.com/composer/composer/compare/1.0.0-alpha8...1.0.0-alpha9 [1.0.0-alpha8]: https://github.com/composer/composer/compare/1.0.0-alpha7...1.0.0-alpha8 [1.0.0-alpha7]: https://github.com/composer/composer/compare/1.0.0-alpha6...1.0.0-alpha7 [1.0.0-alpha6]: https://github.com/composer/composer/compare/1.0.0-alpha5...1.0.0-alpha6 [1.0.0-alpha5]: https://github.com/composer/composer/compare/1.0.0-alpha4...1.0.0-alpha5 [1.0.0-alpha4]: https://github.com/composer/composer/compare/1.0.0-alpha3...1.0.0-alpha4 [1.0.0-alpha3]: https://github.com/composer/composer/compare/1.0.0-alpha2...1.0.0-alpha3 [1.0.0-alpha2]: https://github.com/composer/composer/compare/1.0.0-alpha1...1.0.0-alpha2 composer-1.0.0-beta2/LICENSE000066400000000000000000000020611267577262200153560ustar00rootroot00000000000000Copyright (c) 2016 Nils Adermann, Jordi Boggiano Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. composer-1.0.0-beta2/PORTING_INFO000066400000000000000000000031001267577262200162240ustar00rootroot00000000000000 * add rule * p = direct literal; always < 0 for installed rpm rules * d, if < 0 direct literal, if > 0 offset into whatprovides, if == 0 rule is assertion (look at p only) * * * A requires b, b provided by B1,B2,B3 => (-A|B1|B2|B3) * * p < 0 : pkg id of A * d > 0 : Offset in whatprovidesdata (list of providers of b) * * A conflicts b, b provided by B1,B2,B3 => (-A|-B1), (-A|-B2), (-A|-B3) * p < 0 : pkg id of A * d < 0 : Id of solvable (e.g. B1) * * d == 0: unary rule, assertion => (A) or (-A) * * Install: p > 0, d = 0 (A) user requested install * Remove: p < 0, d = 0 (-A) user requested remove (also: uninstallable) * Requires: p < 0, d > 0 (-A|B1|B2|...) d: * Updates: p > 0, d > 0 (A|B1|B2|...) d: * Conflicts: p < 0, d < 0 (-A|-B) either p (conflict issuer) or d (conflict provider) (binary rule) * also used for obsoletes * ?: p > 0, d < 0 (A|-B) * No-op ?: p = 0, d = 0 (null) (used as policy rule placeholder) * * resulting watches: * ------------------ * Direct assertion (no watch needed)( if d <0 ) --> d = 0, w1 = p, w2 = 0 * Binary rule: p = first literal, d = 0, w2 = second literal, w1 = p * every other : w1 = p, w2 = whatprovidesdata[d]; * Disabled rule: w1 = 0 * * always returns a rule for non-rpm rules p > 0, d = 0, (A), w1 = p, w2 = 0 p < 0, d = 0, (-A), w1 = p, w2 = 0 p !=0, d = 0, (p|q), w1 = p, w2 = q composer-1.0.0-beta2/README.md000066400000000000000000000061301267577262200156310ustar00rootroot00000000000000Composer - Dependency Management for PHP ======================================== Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere. See [https://getcomposer.org/](https://getcomposer.org/) for more information and documentation. [![Build Status](https://travis-ci.org/composer/composer.svg?branch=master)](https://travis-ci.org/composer/composer) [![Dependency Status](https://www.versioneye.com/php/composer:composer/dev-master/badge.svg)](https://www.versioneye.com/php/composer:composer/dev-master) [![Reference Status](https://www.versioneye.com/php/composer:composer/reference_badge.svg?style=flat)](https://www.versioneye.com/php/composer:composer/references) Installation / Usage -------------------- 1. Download and install Composer by following the [official instructions](https://getcomposer.org/download/). 2. Create a composer.json defining your dependencies. Note that this example is a short version for applications that are not meant to be published as packages themselves. To create libraries/packages please read the [documentation](https://getcomposer.org/doc/02-libraries.md). ``` json { "require": { "monolog/monolog": ">=1.0.0" } } ``` 3. Run Composer: `php composer.phar install` 4. Browse for more packages on [Packagist](https://packagist.org). Global installation of Composer (manual) ---------------------------------------- Follow instructions [in the documentation](https://getcomposer.org/doc/00-intro.md#globally) Updating Composer ----------------- Running `php composer.phar self-update` or equivalent will update a phar install to the latest version. Community --------- IRC channels are on irc.freenode.org: [#composer](irc://irc.freenode.org/composer) for users and [#composer-dev](irc://irc.freenode.org/composer-dev) for development. For support, Stack Overflow also offers a good collection of [Composer related questions](https://stackoverflow.com/questions/tagged/composer-php). Please note that this project is released with a [Contributor Code of Conduct](http://contributor-covenant.org/version/1/2/0/). By participating in this project and its community you agree to abide by those terms. Requirements ------------ PHP 5.3.2 or above (at least 5.3.4 recommended to avoid potential bugs) Authors ------- Nils Adermann - - -
Jordi Boggiano - - -
See also the list of [contributors](https://github.com/composer/composer/contributors) who participated in this project. License ------- Composer is licensed under the MIT License - see the LICENSE file for details Acknowledgments --------------- - This project's Solver started out as a PHP port of openSUSE's [Libzypp satsolver](https://en.opensuse.org/openSUSE:Libzypp_satsolver). - This project uses hiddeninput.exe to prompt for passwords on windows, sources and details can be found on the [github page of the project](https://github.com/Seldaek/hidden-input). composer-1.0.0-beta2/appveyor.yml000066400000000000000000000020641267577262200167440ustar00rootroot00000000000000build: false shallow_clone: true platform: - x86 - x64 clone_folder: c:\projects\composer cache: - c:\tools\php -> appveyor.yml init: - SET PATH=C:\Program Files\OpenSSL;c:\tools\php;%PATH% - SET COMPOSER_NO_INTERACTION=1 - SET PHP=1 - SET ANSICON=121x90 (121x90) install: - IF EXIST c:\tools\php (SET PHP=0) - IF %PHP%==1 cinst -y OpenSSL.Light - IF %PHP%==1 cinst -y php - cd c:\tools\php - IF %PHP%==1 copy php.ini-production php.ini /Y - IF %PHP%==1 echo date.timezone="UTC" >> php.ini - IF %PHP%==1 echo extension_dir=ext >> php.ini - IF %PHP%==1 echo extension=php_openssl.dll >> php.ini - IF %PHP%==1 echo extension=php_mbstring.dll >> php.ini - IF %PHP%==1 echo extension=php_fileinfo.dll >> php.ini - IF %PHP%==1 echo @php %%~dp0composer.phar %%* > composer.bat - appveyor DownloadFile https://getcomposer.org/composer.phar - cd c:\projects\composer - composer install --prefer-source --no-progress test_script: - cd c:\projects\composer - vendor/bin/phpunit --colors=always composer-1.0.0-beta2/bin/000077500000000000000000000000001267577262200151225ustar00rootroot00000000000000composer-1.0.0-beta2/bin/compile000077500000000000000000000017061267577262200165040ustar00rootroot00000000000000#!/usr/bin/env php compile(); } catch (\Exception $e) { echo 'Failed to compile phar: ['.get_class($e).'] '.$e->getMessage().' at '.$e->getFile().':'.$e->getLine().PHP_EOL; exit(1); } composer-1.0.0-beta2/bin/composer000077500000000000000000000021771267577262200167060ustar00rootroot00000000000000#!/usr/bin/env php run(); composer-1.0.0-beta2/composer.json000066400000000000000000000042711267577262200171000ustar00rootroot00000000000000{ "name": "composer/composer", "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.", "keywords": ["package", "dependency", "autoload"], "homepage": "https://getcomposer.org/", "type": "library", "license": "MIT", "authors": [ { "name": "Nils Adermann", "email": "naderman@naderman.de", "homepage": "http://www.naderman.de" }, { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", "homepage": "http://seld.be" } ], "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/composer/issues" }, "require": { "php": "^5.3.2 || ^7.0", "justinrainbow/json-schema": "^1.6", "composer/spdx-licenses": "^1.0", "composer/semver": "^1.0", "seld/jsonlint": "^1.4", "symfony/console": "^2.5 || ^3.0", "symfony/finder": "^2.2 || ^3.0", "symfony/process": "^2.1 || ^3.0", "symfony/filesystem": "^2.5 || ^3.0", "seld/phar-utils": "^1.0", "seld/cli-prompt": "^1.0" }, "require-dev": { "phpunit/phpunit": "^4.5 || ^5.0.5", "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" }, "_": "phpunit/phpunit-mock-objects required in 2.3.0 due to https://github.com/sebastianbergmann/phpunit-mock-objects/issues/223 - needs hhvm 3.8+ on travis", "config": { "platform": { "php": "5.3.9" } }, "suggest": { "ext-zip": "Enabling the zip extension allows you to unzip archives", "ext-zlib": "Allow gzip compression of HTTP requests", "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages" }, "autoload": { "psr-4": { "Composer\\": "src/Composer" } }, "autoload-dev": { "psr-4": { "Composer\\Test\\": "tests/Composer/Test" } }, "bin": ["bin/composer"], "extra": { "branch-alias": { "dev-master": "1.0-dev" } }, "scripts": { "test": "phpunit" } } composer-1.0.0-beta2/composer.lock000066400000000000000000001513711267577262200170630ustar00rootroot00000000000000{ "_readme": [ "This file locks the dependencies of your project to a known state", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], "hash": "31b3c13c89f8d6c810637ca1fe8fc6ae", "content-hash": "454148e20b837d9755dee7862f9c7a5d", "packages": [ { "name": "composer/semver", "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/composer/semver.git", "reference": "df4463baa9f44fe6cf0a6da4fde2934d4c0a2747" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/composer/semver/zipball/df4463baa9f44fe6cf0a6da4fde2934d4c0a2747", "reference": "df4463baa9f44fe6cf0a6da4fde2934d4c0a2747", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0" }, "require-dev": { "phpunit/phpunit": "^4.5 || ^5.0.5", "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { "Composer\\Semver\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nils Adermann", "email": "naderman@naderman.de", "homepage": "http://www.naderman.de" }, { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", "homepage": "http://seld.be" }, { "name": "Rob Bast", "email": "rob.bast@gmail.com", "homepage": "http://robbast.nl" } ], "description": "Semver library that offers utilities, version constraint parsing and validation.", "keywords": [ "semantic", "semver", "validation", "versioning" ], "time": "2016-02-25 22:23:39" }, { "name": "composer/spdx-licenses", "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/composer/spdx-licenses.git", "reference": "9e1c3926bb0842812967213d7c92827bc5883671" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/9e1c3926bb0842812967213d7c92827bc5883671", "reference": "9e1c3926bb0842812967213d7c92827bc5883671", "shasum": "" }, "require": { "php": ">=5.3.2" }, "require-dev": { "phpunit/phpunit": "~4.5", "phpunit/phpunit-mock-objects": "~2.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { "Composer\\Spdx\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nils Adermann", "email": "naderman@naderman.de", "homepage": "http://www.naderman.de" }, { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", "homepage": "http://seld.be" }, { "name": "Rob Bast", "email": "rob.bast@gmail.com", "homepage": "http://robbast.nl" } ], "description": "SPDX licenses list and validation library.", "keywords": [ "license", "spdx", "validator" ], "time": "2015-10-05 11:27:42" }, { "name": "justinrainbow/json-schema", "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/justinrainbow/json-schema.git", "reference": "f9e27c3e202faf14fd581ef41355d83bb4b7eb7d" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/f9e27c3e202faf14fd581ef41355d83bb4b7eb7d", "reference": "f9e27c3e202faf14fd581ef41355d83bb4b7eb7d", "shasum": "" }, "require": { "php": ">=5.3.2" }, "require-dev": { "json-schema/json-schema-test-suite": "1.1.0", "phpdocumentor/phpdocumentor": "~2", "phpunit/phpunit": "~3.7" }, "bin": [ "bin/validate-json" ], "type": "library", "extra": { "branch-alias": { "dev-master": "1.4.x-dev" } }, "autoload": { "psr-4": { "JsonSchema\\": "src/JsonSchema/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Bruno Prieto Reis", "email": "bruno.p.reis@gmail.com" }, { "name": "Justin Rainbow", "email": "justin.rainbow@gmail.com" }, { "name": "Igor Wiedler", "email": "igor@wiedler.ch" }, { "name": "Robert Schönthal", "email": "seroscho@googlemail.com" } ], "description": "A library to validate a json schema.", "homepage": "https://github.com/justinrainbow/json-schema", "keywords": [ "json", "schema" ], "time": "2016-01-06 14:37:04" }, { "name": "seld/cli-prompt", "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/Seldaek/cli-prompt.git", "reference": "b27db1514f7d7bb7a366ad95d4eb2b17140a0691" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/Seldaek/cli-prompt/zipball/b27db1514f7d7bb7a366ad95d4eb2b17140a0691", "reference": "b27db1514f7d7bb7a366ad95d4eb2b17140a0691", "shasum": "" }, "require": { "php": ">=5.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { "Seld\\CliPrompt\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be" } ], "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type", "keywords": [ "cli", "console", "hidden", "input", "prompt" ], "time": "2016-01-09 17:55:27" }, { "name": "seld/jsonlint", "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/Seldaek/jsonlint.git", "reference": "66834d3e3566bb5798db7294619388786ae99394" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/66834d3e3566bb5798db7294619388786ae99394", "reference": "66834d3e3566bb5798db7294619388786ae99394", "shasum": "" }, "require": { "php": "^5.3 || ^7.0" }, "bin": [ "bin/jsonlint" ], "type": "library", "autoload": { "psr-4": { "Seld\\JsonLint\\": "src/Seld/JsonLint/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", "homepage": "http://seld.be" } ], "description": "JSON Linter", "keywords": [ "json", "linter", "parser", "validator" ], "time": "2015-11-21 02:21:41" }, { "name": "seld/phar-utils", "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/Seldaek/phar-utils.git", "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a", "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a", "shasum": "" }, "require": { "php": ">=5.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { "Seld\\PharUtils\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be" } ], "description": "PHAR file format utilities, for when PHP phars you up", "keywords": [ "phra" ], "time": "2015-10-13 18:44:15" }, { "name": "symfony/console", "version": "v2.8.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", "reference": "d0239fb42f98dd02e7d342f793c5d2cdee0c478d" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/console/zipball/d0239fb42f98dd02e7d342f793c5d2cdee0c478d", "reference": "d0239fb42f98dd02e7d342f793c5d2cdee0c478d", "shasum": "" }, "require": { "php": ">=5.3.9", "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { "psr/log": "~1.0", "symfony/event-dispatcher": "~2.1|~3.0.0", "symfony/process": "~2.1|~3.0.0" }, "suggest": { "psr/log": "For using the console logger", "symfony/event-dispatcher": "", "symfony/process": "" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.8-dev" } }, "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": "Symfony Console Component", "homepage": "https://symfony.com", "time": "2016-01-14 08:33:16" }, { "name": "symfony/filesystem", "version": "v2.8.2", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", "reference": "637b64d0ee10f44ae98dbad651b1ecdf35a11e8c" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/filesystem/zipball/637b64d0ee10f44ae98dbad651b1ecdf35a11e8c", "reference": "637b64d0ee10f44ae98dbad651b1ecdf35a11e8c", "shasum": "" }, "require": { "php": ">=5.3.9" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.8-dev" } }, "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": "Symfony Filesystem Component", "homepage": "https://symfony.com", "time": "2016-01-13 10:28:07" }, { "name": "symfony/finder", "version": "v2.8.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", "reference": "c90fabdd97e431ee19b6383999cf35334dff27da" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/finder/zipball/c90fabdd97e431ee19b6383999cf35334dff27da", "reference": "c90fabdd97e431ee19b6383999cf35334dff27da", "shasum": "" }, "require": { "php": ">=5.3.9" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.8-dev" } }, "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": "Symfony Finder Component", "homepage": "https://symfony.com", "time": "2016-01-14 08:26:52" }, { "name": "symfony/polyfill-mbstring", "version": "v1.1.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", "reference": "1289d16209491b584839022f29257ad859b8532d" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/1289d16209491b584839022f29257ad859b8532d", "reference": "1289d16209491b584839022f29257ad859b8532d", "shasum": "" }, "require": { "php": ">=5.3.3" }, "suggest": { "ext-mbstring": "For best performance" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.1-dev" } }, "autoload": { "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" }, "files": [ "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for the Mbstring extension", "homepage": "https://symfony.com", "keywords": [ "compatibility", "mbstring", "polyfill", "portable", "shim" ], "time": "2016-01-20 09:13:37" }, { "name": "symfony/process", "version": "v2.8.2", "source": { "type": "git", "url": "https://github.com/symfony/process.git", "reference": "6f1979c3b0f4c22c77a8a8971afaa7dd07f082ac" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/process/zipball/6f1979c3b0f4c22c77a8a8971afaa7dd07f082ac", "reference": "6f1979c3b0f4c22c77a8a8971afaa7dd07f082ac", "shasum": "" }, "require": { "php": ">=5.3.9" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.8-dev" } }, "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": "Symfony Process Component", "homepage": "https://symfony.com", "time": "2016-01-06 09:59:23" } ], "packages-dev": [ { "name": "doctrine/instantiator", "version": "1.0.5", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", "shasum": "" }, "require": { "php": ">=5.3,<8.0-DEV" }, "require-dev": { "athletic/athletic": "~0.1.8", "ext-pdo": "*", "ext-phar": "*", "phpunit/phpunit": "~4.0", "squizlabs/php_codesniffer": "~2.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", "homepage": "http://ocramius.github.com/" } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", "homepage": "https://github.com/doctrine/instantiator", "keywords": [ "constructor", "instantiate" ], "time": "2015-06-14 21:17:01" }, { "name": "phpdocumentor/reflection-docblock", "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { "phpunit/phpunit": "~4.0" }, "suggest": { "dflydev/markdown": "~1.0", "erusev/parsedown": "~1.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } }, "autoload": { "psr-0": { "phpDocumentor": [ "src/" ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Mike van Riel", "email": "mike.vanriel@naenius.com" } ], "time": "2015-02-03 12:10:50" }, { "name": "phpspec/prophecy", "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", "reference": "3c91bdf81797d725b14cb62906f9a4ce44235972" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phpspec/prophecy/zipball/3c91bdf81797d725b14cb62906f9a4ce44235972", "reference": "3c91bdf81797d725b14cb62906f9a4ce44235972", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", "phpdocumentor/reflection-docblock": "~2.0", "sebastian/comparator": "~1.1", "sebastian/recursion-context": "~1.0" }, "require-dev": { "phpspec/phpspec": "~2.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.5.x-dev" } }, "autoload": { "psr-0": { "Prophecy\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Konstantin Kudryashov", "email": "ever.zet@gmail.com", "homepage": "http://everzet.com" }, { "name": "Marcello Duarte", "email": "marcello.duarte@gmail.com" } ], "description": "Highly opinionated mocking framework for PHP 5.3+", "homepage": "https://github.com/phpspec/prophecy", "keywords": [ "Double", "Dummy", "fake", "mock", "spy", "stub" ], "time": "2016-02-15 07:46:21" }, { "name": "phpunit/php-code-coverage", "version": "2.2.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", "shasum": "" }, "require": { "php": ">=5.3.3", "phpunit/php-file-iterator": "~1.3", "phpunit/php-text-template": "~1.2", "phpunit/php-token-stream": "~1.3", "sebastian/environment": "^1.3.2", "sebastian/version": "~1.0" }, "require-dev": { "ext-xdebug": ">=2.1.4", "phpunit/phpunit": "~4" }, "suggest": { "ext-dom": "*", "ext-xdebug": ">=2.2.1", "ext-xmlwriter": "*" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.2.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sb@sebastian-bergmann.de", "role": "lead" } ], "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "keywords": [ "coverage", "testing", "xunit" ], "time": "2015-10-06 15:47:00" }, { "name": "phpunit/php-file-iterator", "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", "shasum": "" }, "require": { "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.4.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sb@sebastian-bergmann.de", "role": "lead" } ], "description": "FilterIterator implementation that filters files based on a list of suffixes.", "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", "keywords": [ "filesystem", "iterator" ], "time": "2015-06-21 13:08:43" }, { "name": "phpunit/php-text-template", "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, "require": { "php": ">=5.3.3" }, "type": "library", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Simple template engine.", "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ "template" ], "time": "2015-06-21 13:50:34" }, { "name": "phpunit/php-timer", "version": "1.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b", "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b", "shasum": "" }, "require": { "php": ">=5.3.3" }, "type": "library", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sb@sebastian-bergmann.de", "role": "lead" } ], "description": "Utility class for timing", "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ "timer" ], "time": "2015-06-21 08:01:12" }, { "name": "phpunit/php-token-stream", "version": "1.4.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", "shasum": "" }, "require": { "ext-tokenizer": "*", "php": ">=5.3.3" }, "require-dev": { "phpunit/phpunit": "~4.2" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.4-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Wrapper around PHP's tokenizer extension.", "homepage": "https://github.com/sebastianbergmann/php-token-stream/", "keywords": [ "tokenizer" ], "time": "2015-09-15 10:49:45" }, { "name": "phpunit/phpunit", "version": "4.8.23", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", "reference": "6e351261f9cd33daf205a131a1ba61c6d33bd483" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6e351261f9cd33daf205a131a1ba61c6d33bd483", "reference": "6e351261f9cd33daf205a131a1ba61c6d33bd483", "shasum": "" }, "require": { "ext-dom": "*", "ext-json": "*", "ext-pcre": "*", "ext-reflection": "*", "ext-spl": "*", "php": ">=5.3.3", "phpspec/prophecy": "^1.3.1", "phpunit/php-code-coverage": "~2.1", "phpunit/php-file-iterator": "~1.4", "phpunit/php-text-template": "~1.2", "phpunit/php-timer": ">=1.0.6", "phpunit/phpunit-mock-objects": "~2.3", "sebastian/comparator": "~1.1", "sebastian/diff": "~1.2", "sebastian/environment": "~1.3", "sebastian/exporter": "~1.2", "sebastian/global-state": "~1.0", "sebastian/version": "~1.0", "symfony/yaml": "~2.1|~3.0" }, "suggest": { "phpunit/php-invoker": "~1.1" }, "bin": [ "phpunit" ], "type": "library", "extra": { "branch-alias": { "dev-master": "4.8.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "The PHP Unit Testing framework.", "homepage": "https://phpunit.de/", "keywords": [ "phpunit", "testing", "xunit" ], "time": "2016-02-11 14:56:33" }, { "name": "phpunit/phpunit-mock-objects", "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", "reference": "c63d2367247365f688544f0d500af90a11a44c65" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/c63d2367247365f688544f0d500af90a11a44c65", "reference": "c63d2367247365f688544f0d500af90a11a44c65", "shasum": "" }, "require": { "doctrine/instantiator": "~1.0,>=1.0.1", "php": ">=5.3.3", "phpunit/php-text-template": "~1.2" }, "require-dev": { "phpunit/phpunit": "~4.3" }, "suggest": { "ext-soap": "*" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.3.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sb@sebastian-bergmann.de", "role": "lead" } ], "description": "Mock Object library for PHPUnit", "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", "keywords": [ "mock", "xunit" ], "time": "2014-10-03 05:12:11" }, { "name": "sebastian/comparator", "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", "shasum": "" }, "require": { "php": ">=5.3.3", "sebastian/diff": "~1.2", "sebastian/exporter": "~1.2" }, "require-dev": { "phpunit/phpunit": "~4.4" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.2.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Volker Dusch", "email": "github@wallbash.com" }, { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Provides the functionality to compare PHP values for equality", "homepage": "http://www.github.com/sebastianbergmann/comparator", "keywords": [ "comparator", "compare", "equality" ], "time": "2015-07-26 15:48:44" }, { "name": "sebastian/diff", "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { "phpunit/phpunit": "~4.8" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.4-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Kore Nordmann", "email": "mail@kore-nordmann.de" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ "diff" ], "time": "2015-12-08 07:14:41" }, { "name": "sebastian/environment", "version": "1.3.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", "reference": "6e7133793a8e5a5714a551a8324337374be209df" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6e7133793a8e5a5714a551a8324337374be209df", "reference": "6e7133793a8e5a5714a551a8324337374be209df", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { "phpunit/phpunit": "~4.4" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.3.x-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": "http://www.github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", "hhvm" ], "time": "2015-12-02 08:37:27" }, { "name": "sebastian/exporter", "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", "reference": "7ae5513327cb536431847bcc0c10edba2701064e" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e", "reference": "7ae5513327cb536431847bcc0c10edba2701064e", "shasum": "" }, "require": { "php": ">=5.3.3", "sebastian/recursion-context": "~1.0" }, "require-dev": { "phpunit/phpunit": "~4.4" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.2.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Volker Dusch", "email": "github@wallbash.com" }, { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Adam Harvey", "email": "aharvey@php.net" } ], "description": "Provides the functionality to export PHP variables for visualization", "homepage": "http://www.github.com/sebastianbergmann/exporter", "keywords": [ "export", "exporter" ], "time": "2015-06-21 07:55:53" }, { "name": "sebastian/global-state", "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { "phpunit/phpunit": "~4.2" }, "suggest": { "ext-uopz": "*" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.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": "http://www.github.com/sebastianbergmann/global-state", "keywords": [ "global state" ], "time": "2015-10-12 03:26:01" }, { "name": "sebastian/recursion-context", "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", "reference": "913401df809e99e4f47b27cdd781f4a258d58791" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", "reference": "913401df809e99e4f47b27cdd781f4a258d58791", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { "phpunit/phpunit": "~4.4" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Adam Harvey", "email": "aharvey@php.net" } ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", "time": "2015-11-11 19:50:13" }, { "name": "sebastian/version", "version": "1.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", "shasum": "" }, "type": "library", "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", "time": "2015-06-21 13:59:46" }, { "name": "symfony/yaml", "version": "v2.8.2", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", "reference": "34c8a4b51e751e7ea869b8262f883d008a2b81b8" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/yaml/zipball/34c8a4b51e751e7ea869b8262f883d008a2b81b8", "reference": "34c8a4b51e751e7ea869b8262f883d008a2b81b8", "shasum": "" }, "require": { "php": ">=5.3.9" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.8-dev" } }, "autoload": { "psr-4": { "Symfony\\Component\\Yaml\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", "time": "2016-01-13 10:28:07" } ], "aliases": [], "minimum-stability": "stable", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": { "php": "^5.3.2 || ^7.0" }, "platform-dev": [], "platform-overrides": { "php": "5.3.9" } } composer-1.0.0-beta2/doc/000077500000000000000000000000001267577262200151175ustar00rootroot00000000000000composer-1.0.0-beta2/doc/00-intro.md000066400000000000000000000127341267577262200170200ustar00rootroot00000000000000# Introduction Composer is a tool for dependency management in PHP. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you. ## Dependency management Composer is **not** a package manager in the same sense as Yum or Apt are. Yes, it deals with "packages" or libraries, but it manages them on a per-project basis, installing them in a directory (e.g. `vendor`) inside your project. By default it does not install anything globally. Thus, it is a dependency manager. It does however support a "global" project for convenience via the [global](03-cli.md#global) command. This idea is not new and Composer is strongly inspired by node's [npm](https://npmjs.org/) and ruby's [bundler](http://bundler.io/). Suppose: a) You have a project that depends on a number of libraries. b) Some of those libraries depend on other libraries. Composer: c) Enables you to declare the libraries you depend on. d) Finds out which versions of which packages can and need to be installed, and installs them (meaning it downloads them into your project). See the [Basic usage](01-basic-usage.md) chapter for more details on declaring dependencies. ## System Requirements Composer requires PHP 5.3.2+ to run. A few sensitive php settings and compile flags are also required, but when using the installer you will be warned about any incompatibilities. To install packages from sources instead of simple zip archives, you will need git, svn or hg depending on how the package is version-controlled. Composer is multi-platform and we strive to make it run equally well on Windows, Linux and OSX. ## Installation - Linux / Unix / OSX ### Downloading the Composer Executable Composer offers a convenient installer that you can execute directly from the commandline. Feel free to [download this file](https://getcomposer.org/installer) or review it on [GitHub](https://github.com/composer/getcomposer.org/blob/master/web/installer) if you wish to know more about the inner workings of the installer. The source is plain PHP. There are in short, two ways to install Composer. Locally as part of your project, or globally as a system wide executable. #### Locally Installing Composer locally is a matter of just running the installer in your project directory. See [the Download page](https://getcomposer.org/download/) for instructions. The installer will just check a few PHP settings and then download `composer.phar` to your working directory. This file is the Composer binary. It is a PHAR (PHP archive), which is an archive format for PHP which can be run on the command line, amongst other things. Now just run `php composer.phar` in order to run Composer. You can install Composer to a specific directory by using the `--install-dir` option and additionally (re)name it as well using the `--filename` option. When running the installer when following [the Download page instructions](https://getcomposer.org/download/) add the following parameters: ```sh php composer-setup.php --install-dir=bin --filename=composer ``` Now just run `php bin/composer` in order to run Composer. #### Globally You can place the Composer PHAR anywhere you wish. If you put it in a directory that is part of your `PATH`, you can access it globally. On unixy systems you can even make it executable and invoke it without directly using the `php` interpreter. After running the installer following [the Download page instructions](https://getcomposer.org/download/) you can run this to move composer.phar to a directory that is in your path: ```sh mv composer.phar /usr/local/bin/composer ``` > **Note:** If the above fails due to permissions, you may need to run it again > with sudo. > **Note:** On some versions of OSX the `/usr` directory does not exist by > default. If you receive the error "/usr/local/bin/composer: No such file or > directory" then you must create the directory manually before proceeding: > `mkdir -p /usr/local/bin`. > **Note:** For information on changing your PATH, please read the > [Wikipedia article](https://en.wikipedia.org/wiki/PATH_(variable)) and/or use Google. Now just run `composer` in order to run Composer instead of `php composer.phar`. ## Installation - Windows ### Using the Installer This is the easiest way to get Composer set up on your machine. Download and run [Composer-Setup.exe](https://getcomposer.org/Composer-Setup.exe). It will install the latest Composer version and set up your PATH so that you can just call `composer` from any directory in your command line. > **Note:** Close your current terminal. Test usage with a new terminal: This is > important since the PATH only gets loaded when the terminal starts. ### Manual Installation Change to a directory on your `PATH` and run the installer following [the Download page instructions](https://getcomposer.org/download/) to download `composer.phar`. Create a new `composer.bat` file alongside `composer.phar`: ```sh C:\bin>echo @php "%~dp0composer.phar" %*>composer.bat ``` Add the directory to your PATH environment variable if it isn't already. For information on changing your PATH variable, please see [this article](http://www.computerhope.com/issues/ch000549.htm) and/or use Google. Close your current terminal. Test usage with a new terminal: ```sh C:\Users\username>composer -V Composer version 1.0.0 2016-01-10 20:34:53 ``` ## Using Composer Now that you've installed Composer, you are ready to use it! Head on over to the next chapter for a short and simple demonstration. [Basic usage](01-basic-usage.md) → composer-1.0.0-beta2/doc/01-basic-usage.md000066400000000000000000000174321267577262200200510ustar00rootroot00000000000000# Basic usage ## Introduction For our basic usage introduction, we will be installing `monolog/monolog`, a logging library. If you have not yet installed Composer, refer to the [Intro](00-intro.md) chapter. > **Note:** for the sake of simplicity, this introduction will assume you > have performed a [local](00-intro.md#locally) install of Composer. ## `composer.json`: Project Setup To start using Composer in your project, all you need is a `composer.json` file. This file describes the dependencies of your project and may contain other metadata as well. ### The `require` Key The first (and often only) thing you specify in `composer.json` is the [`require`](04-schema.md#require) key. You're simply telling Composer which packages your project depends on. ```json { "require": { "monolog/monolog": "1.0.*" } } ``` As you can see, [`require`](04-schema.md#require) takes an object that maps **package names** (e.g. `monolog/monolog`) to **version constraints** (e.g. `1.0.*`). ### Package Names The package name consists of a vendor name and the project's name. Often these will be identical - the vendor name just exists to prevent naming clashes. It allows two different people to create a library named `json`, which would then just be named `igorw/json` and `seldaek/json`. Here we are requiring `monolog/monolog`, so the vendor name is the same as the project's name. For projects with a unique name this is recommended. It also allows adding more related projects under the same namespace later on. If you are maintaining a library, this would make it really easy to split it up into smaller decoupled parts. ### Package Versions In the previous example we were requiring version [`1.0.*`](http://semver.mwl.be/#?package=monolog%2Fmonolog&version=1.0.*) of Monolog. This means any version in the `1.0` development branch. It is the equivalent of saying versions that match `>=1.0 <1.1`. Version constraints can be specified in several ways, read [versions](articles/versions.md) for more in-depth information on this topic. ### Stability By default only stable releases are taken into consideration. If you would like to also get RC, beta, alpha or dev versions of your dependencies you can do so using [stability flags](04-schema.md#package-links). To change that for all packages instead of doing per dependency you can also use the [minimum-stability](04-schema.md#minimum-stability) setting. ## Installing Dependencies To install the defined dependencies for your project, just run the [`install`](03-cli.md#install) command. ```sh php composer.phar install ``` This will find the latest version of `monolog/monolog` that matches the supplied version constraint and download it into the `vendor` directory. It's a convention to put third party code into a directory named `vendor`. In case of Monolog it will put it into `vendor/monolog/monolog`. > **Tip:** If you are using git for your project, you probably want to add > `vendor` in your `.gitignore`. You really don't want to add all of that > code to your repository. You will notice the [`install`](03-cli.md#install) command also created a `composer.lock` file. ## `composer.lock` - The Lock File After installing the dependencies, Composer writes the list of the exact versions it installed into a `composer.lock` file. This locks the project to those specific versions. **Commit your application's `composer.lock` (along with `composer.json`) into version control.** This is important because the [`install`](03-cli.md#install) command checks if a lock file is present, and if it is, it downloads the versions specified there (regardless of what `composer.json` says). This means that anyone who sets up the project will download the exact same version of the dependencies. Your CI server, production machines, other developers in your team, everything and everyone runs on the same dependencies, which mitigates the potential for bugs affecting only some parts of the deployments. Even if you develop alone, in six months when reinstalling the project you can feel confident the dependencies installed are still working even if your dependencies released many new versions since then. If no `composer.lock` file exists, Composer will read the dependencies and versions from `composer.json` and create the lock file after executing the [`update`](03-cli.md#update) or the [`install`](03-cli.md#install) command. This means that if any of the dependencies get a new version, you won't get the updates automatically. To update to the new version, use the [`update`](03-cli.md#update) command. This will fetch the latest matching versions (according to your `composer.json` file) and also update the lock file with the new version. ```sh php composer.phar update ``` > **Note:** Composer will display a Warning when executing an `install` command > if `composer.lock` and `composer.json` are not synchronized. If you only want to install or update one dependency, you can whitelist them: ```sh php composer.phar update monolog/monolog [...] ``` > **Note:** For libraries it is not necessary to commit the lock > file, see also: [Libraries - Lock file](02-libraries.md#lock-file). ## Packagist [Packagist](https://packagist.org/) is the main Composer repository. A Composer repository is basically a package source: a place where you can get packages from. Packagist aims to be the central repository that everybody uses. This means that you can automatically `require` any package that is available there. If you go to the [Packagist website](https://packagist.org/) (packagist.org), you can browse and search for packages. Any open source project using Composer is recommended to publish their packages on Packagist. A library doesn't need to be on Packagist to be used by Composer, but it enables discovery and adoption by other developers more quickly. ## Autoloading For libraries that specify autoload information, Composer generates a `vendor/autoload.php` file. You can simply include this file and you will get autoloading for free. ```php require __DIR__ . '/vendor/autoload.php'; ``` This makes it really easy to use third party code. For example: If your project depends on Monolog, you can just start using classes from it, and they will be autoloaded. ```php $log = new Monolog\Logger('name'); $log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING)); $log->addWarning('Foo'); ``` You can even add your own code to the autoloader by adding an [`autoload`](04-schema.md#autoload) field to `composer.json`. ```json { "autoload": { "psr-4": {"Acme\\": "src/"} } } ``` Composer will register a [PSR-4](http://www.php-fig.org/psr/psr-4/) autoloader for the `Acme` namespace. You define a mapping from namespaces to directories. The `src` directory would be in your project root, on the same level as `vendor` directory is. An example filename would be `src/Foo.php` containing an `Acme\Foo` class. After adding the [`autoload`](04-schema.md#autoload) field, you have to re-run [`dump-autoload`](03-cli.md#dump-autoload) to re-generate the `vendor/autoload.php` file. Including that file will also return the autoloader instance, so you can store the return value of the include call in a variable and add more namespaces. This can be useful for autoloading classes in a test suite, for example. ```php $loader = require __DIR__ . '/vendor/autoload.php'; $loader->add('Acme\\Test\\', __DIR__); ``` In addition to PSR-4 autoloading, Composer also supports PSR-0, classmap and files autoloading. See the [`autoload`](04-schema.md#autoload) reference for more information. > **Note:** Composer provides its own autoloader. If you don't want to use that > one, you can just include `vendor/composer/autoload_*.php` files, which return > associative arrays allowing you to configure your own autoloader. ← [Intro](00-intro.md) | [Libraries](02-libraries.md) → composer-1.0.0-beta2/doc/02-libraries.md000066400000000000000000000167331267577262200176460ustar00rootroot00000000000000# Libraries This chapter will tell you how to make your library installable through Composer. ## Every project is a package As soon as you have a `composer.json` in a directory, that directory is a package. When you add a [`require`](04-schema.md#require) to a project, you are making a package that depends on other packages. The only difference between your project and libraries is that your project is a package without a name. In order to make that package installable you need to give it a name. You do this by adding the [`name`](04-schema.md#name) property in `composer.json`: ```json { "name": "acme/hello-world", "require": { "monolog/monolog": "1.0.*" } } ``` In this case the project name is `acme/hello-world`, where `acme` is the vendor name. Supplying a vendor name is mandatory. > **Note:** If you don't know what to use as a vendor name, your GitHub > username is usually a good bet. While package names are case insensitive, the > convention is all lowercase and dashes for word separation. ## Platform packages Composer has platform packages, which are virtual packages for things that are installed on the system but are not actually installable by Composer. This includes PHP itself, PHP extensions and some system libraries. * `php` represents the PHP version of the user, allowing you to apply constraints, e.g. `>=5.4.0`. To require a 64bit version of php, you can require the `php-64bit` package. * `hhvm` represents the version of the HHVM runtime (aka HipHop Virtual Machine) and allows you to apply a constraint, e.g., '>=2.3.3'. * `ext-` allows you to require PHP extensions (includes core extensions). Versioning can be quite inconsistent here, so it's often a good idea to just set the constraint to `*`. An example of an extension package name is `ext-gd`. * `lib-` allows constraints to be made on versions of libraries used by PHP. The following are available: `curl`, `iconv`, `icu`, `libxml`, `openssl`, `pcre`, `uuid`, `xsl`. You can use [`show --platform`](03-cli.md#show) to get a list of your locally available platform packages. ## Specifying the version When you publish your package on Packagist, it is able to infer the version from the VCS (git, svn, hg) information. This means you don't have to explicitly declare it. Read [tags](#tags) and [branches](#branches) to see how version numbers are extracted from these. If you are creating packages by hand and really have to specify it explicitly, you can just add a `version` field: ```json { "version": "1.0.0" } ``` > **Note:** You should avoid specifying the version field explicitly, because > for tags the value must match the tag name. ### Tags For every tag that looks like a version, a package version of that tag will be created. It should match 'X.Y.Z' or 'vX.Y.Z', with an optional suffix of `-patch` (`-p`), `-alpha` (`-a`), `-beta` (`-b`) or `-RC`. The suffix can also be followed by a number. Here are a few examples of valid tag names: - 1.0.0 - v1.0.0 - 1.10.5-RC1 - v4.4.4-beta2 - v2.0.0-alpha - v2.0.4-p1 > **Note:** Even if your tag is prefixed with `v`, a > [version constraint](01-basic-usage.md#package-versions) in a `require` > statement has to be specified without prefix (e.g. tag `v1.0.0` will result > in version `1.0.0`). ### Branches For every branch, a package development version will be created. If the branch name looks like a version, the version will be `{branchname}-dev`. For example, the branch `2.0` will get the `2.0.x-dev` version (the `.x` is added for technical reasons, to make sure it is recognized as a branch). The `2.0.x` branch would also be valid and be turned into `2.0.x-dev` as well. If the branch does not look like a version, it will be `dev-{branchname}`. `master` results in a `dev-master` version. Here are some examples of version branch names: - 1.x - 1.0 (equals 1.0.x) - 1.1.x > **Note:** When you install a development version, it will be automatically > pulled from its `source`. See the [`install`](03-cli.md#install) command > for more details. ### Aliases It is possible to alias branch names to versions. For example, you could alias `dev-master` to `1.0.x-dev`, which would allow you to require `1.0.x-dev` in all the packages. See [Aliases](articles/aliases.md) for more information. ## Lock file For your library you may commit the `composer.lock` file if you want to. This can help your team to always test against the same dependency versions. However, this lock file will not have any effect on other projects that depend on it. It only has an effect on the main project. If you do not want to commit the lock file and you are using git, add it to the `.gitignore`. ## Publishing to a VCS Once you have a VCS repository (version control system, e.g. git) containing a `composer.json` file, your library is already composer-installable. In this example we will publish the `acme/hello-world` library on GitHub under `github.com/username/hello-world`. Now, to test installing the `acme/hello-world` package, we create a new project locally. We will call it `acme/blog`. This blog will depend on `acme/hello-world`, which in turn depends on `monolog/monolog`. We can accomplish this by creating a new `blog` directory somewhere, containing a `composer.json`: ```json { "name": "acme/blog", "require": { "acme/hello-world": "dev-master" } } ``` The name is not needed in this case, since we don't want to publish the blog as a library. It is added here to clarify which `composer.json` is being described. Now we need to tell the blog app where to find the `hello-world` dependency. We do this by adding a package repository specification to the blog's `composer.json`: ```json { "name": "acme/blog", "repositories": [ { "type": "vcs", "url": "https://github.com/username/hello-world" } ], "require": { "acme/hello-world": "dev-master" } } ``` For more details on how package repositories work and what other types are available, see [Repositories](05-repositories.md). That's all. You can now install the dependencies by running Composer's [`install`](03-cli.md#install) command! **Recap:** Any git/svn/hg repository containing a `composer.json` can be added to your project by specifying the package repository and declaring the dependency in the [`require`](04-schema.md#require) field. ## Publishing to packagist Alright, so now you can publish packages. But specifying the VCS repository every time is cumbersome. You don't want to force all your users to do that. The other thing that you may have noticed is that we did not specify a package repository for `monolog/monolog`. How did that work? The answer is Packagist. [Packagist](https://packagist.org/) is the main package repository for Composer, and it is enabled by default. Anything that is published on Packagist is available automatically through Composer. Since [Monolog is on Packagist](https://packagist.org/packages/monolog/monolog), we can depend on it without having to specify any additional repositories. If we wanted to share `hello-world` with the world, we would publish it on Packagist as well. Doing so is really easy. You simply visit [Packagist](https://packagist.org) and hit the "Submit". This will prompt you to sign up if you haven't already, and then allows you to submit the URL to your VCS repository, at which point Packagist will start crawling it. Once it is done, your package will be available to anyone! ← [Basic usage](01-basic-usage.md) | [Command-line interface](03-cli.md) → composer-1.0.0-beta2/doc/03-cli.md000066400000000000000000000710371267577262200164400ustar00rootroot00000000000000# Command-line interface / Commands You've already learned how to use the command-line interface to do some things. This chapter documents all the available commands. To get help from the command-line, simply call `composer` or `composer list` to see the complete list of commands, then `--help` combined with any of those can give you more information. ## Global Options The following options are available with every command: * **--verbose (-v):** Increase verbosity of messages. * **--help (-h):** Display help information. * **--quiet (-q):** Do not output any message. * **--no-interaction (-n):** Do not ask any interactive question. * **--working-dir (-d):** If specified, use the given directory as working directory. * **--profile:** Display timing and memory usage information * **--ansi:** Force ANSI output. * **--no-ansi:** Disable ANSI output. * **--version (-V):** Display this application version. ## Process Exit Codes * **0:** OK * **1:** Generic/unknown error code * **2:** Dependency solving error code ## init In the [Libraries](02-libraries.md) chapter we looked at how to create a `composer.json` by hand. There is also an `init` command available that makes it a bit easier to do this. When you run the command it will interactively ask you to fill in the fields, while using some smart defaults. ```sh php composer.phar init ``` ### Options * **--name:** Name of the package. * **--description:** Description of the package. * **--author:** Author name of the package. * **--homepage:** Homepage of the package. * **--require:** Package to require with a version constraint. Should be in format `foo/bar:1.0.0`. * **--require-dev:** Development requirements, see **--require**. * **--stability (-s):** Value for the `minimum-stability` field. * **--repository:** Provide one (or more) custom repositories. They will be stored in the generated composer.json, and used for auto-completion when prompting for the list of requires. Every repository can be either an HTTP URL pointing to a `composer` repository or a JSON string which similar to what the [repositories](04-schema.md#repositories) key accepts. ## install The `install` command reads the `composer.json` file from the current directory, resolves the dependencies, and installs them into `vendor`. ```sh php composer.phar install ``` If there is a `composer.lock` file in the current directory, it will use the exact versions from there instead of resolving them. This ensures that everyone using the library will get the same versions of the dependencies. If there is no `composer.lock` file, Composer will create one after dependency resolution. ### Options * **--prefer-source:** There are two ways of downloading a package: `source` and `dist`. For stable versions Composer will use the `dist` by default. The `source` is a version control repository. If `--prefer-source` is enabled, Composer will install from `source` if there is one. This is useful if you want to make a bugfix to a project and get a local git clone of the dependency directly. * **--prefer-dist:** Reverse of `--prefer-source`, Composer will install from `dist` if possible. This can speed up installs substantially on build servers and other use cases where you typically do not run updates of the vendors. It is also a way to circumvent problems with git if you do not have a proper setup. * **--ignore-platform-reqs:** ignore `php`, `hhvm`, `lib-*` and `ext-*` requirements and force the installation even if the local machine does not fulfill these. See also the [`platform`](06-config.md#platform) config option. * **--dry-run:** If you want to run through an installation without actually installing a package, you can use `--dry-run`. This will simulate the installation and show you what would happen. * **--dev:** Install packages listed in `require-dev` (this is the default behavior). * **--no-dev:** Skip installing packages listed in `require-dev`. The autoloader generation skips the `autoload-dev` rules. * **--no-autoloader:** Skips autoloader generation. * **--no-scripts:** Skips execution of scripts defined in `composer.json`. * **--no-plugins:** Disables plugins. * **--no-progress:** Removes the progress display that can mess with some terminals or scripts which don't handle backspace characters. * **--optimize-autoloader (-o):** Convert PSR-0/4 autoloading to classmap to get a faster autoloader. This is recommended especially for production, but can take a bit of time to run so it is currently not done by default. * **--classmap-authoritative (-a):** Autoload classes from the classmap only. Implicitly enables `--optimize-autoloader`. ## update In order to get the latest versions of the dependencies and to update the `composer.lock` file, you should use the `update` command. ```sh php composer.phar update ``` This will resolve all dependencies of the project and write the exact versions into `composer.lock`. If you just want to update a few packages and not all, you can list them as such: ```sh php composer.phar update vendor/package vendor/package2 ``` You can also use wildcards to update a bunch of packages at once: ```sh php composer.phar update vendor/* ``` ### Options * **--prefer-source:** Install packages from `source` when available. * **--prefer-dist:** Install packages from `dist` when available. * **--ignore-platform-reqs:** ignore `php`, `hhvm`, `lib-*` and `ext-*` requirements and force the installation even if the local machine does not fulfill these. See also the [`platform`](06-config.md#platform) config option. * **--dry-run:** Simulate the command without actually doing anything. * **--dev:** Install packages listed in `require-dev` (this is the default behavior). * **--no-dev:** Skip installing packages listed in `require-dev`. The autoloader generation skips the `autoload-dev` rules. * **--no-autoloader:** Skips autoloader generation. * **--no-scripts:** Skips execution of scripts defined in `composer.json`. * **--no-plugins:** Disables plugins. * **--no-progress:** Removes the progress display that can mess with some terminals or scripts which don't handle backspace characters. * **--optimize-autoloader (-o):** Convert PSR-0/4 autoloading to classmap to get a faster autoloader. This is recommended especially for production, but can take a bit of time to run so it is currently not done by default. * **--classmap-authoritative (-a):** Autoload classes from the classmap only. Implicitly enables `--optimize-autoloader`. * **--lock:** Only updates the lock file hash to suppress warning about the lock file being out of date. * **--with-dependencies:** Add also all dependencies of whitelisted packages to the whitelist. * **--root-reqs:** Restricts the update to your first degree dependencies. * **--prefer-stable:** Prefer stable versions of dependencies. * **--prefer-lowest:** Prefer lowest versions of dependencies. Useful for testing minimal versions of requirements, generally used with `--prefer-stable`. ## require The `require` command adds new packages to the `composer.json` file from the current directory. If no file exists one will be created on the fly. ```sh php composer.phar require ``` After adding/changing the requirements, the modified requirements will be installed or updated. If you do not want to choose requirements interactively, you can just pass them to the command. ```sh php composer.phar require vendor/package:2.* vendor/package2:dev-master ``` ### Options * **--prefer-source:** Install packages from `source` when available. * **--prefer-dist:** Install packages from `dist` when available. * **--ignore-platform-reqs:** ignore `php`, `hhvm`, `lib-*` and `ext-*` requirements and force the installation even if the local machine does not fulfill these. See also the [`platform`](06-config.md#platform) config option. * **--dev:** Add packages to `require-dev`. * **--no-update:** Disables the automatic update of the dependencies. * **--no-progress:** Removes the progress display that can mess with some terminals or scripts which don't handle backspace characters. * **--update-no-dev:** Run the dependency update with the `--no-dev` option. * **--update-with-dependencies:** Also update dependencies of the newly required packages. * **--sort-packages:** Keep packages sorted in `composer.json`. * **--optimize-autoloader (-o):** Convert PSR-0/4 autoloading to classmap to get a faster autoloader. This is recommended especially for production, but can take a bit of time to run so it is currently not done by default. * **--classmap-authoritative (-a):** Autoload classes from the classmap only. Implicitly enables `--optimize-autoloader`. ## remove The `remove` command removes packages from the `composer.json` file from the current directory. ```sh php composer.phar remove vendor/package vendor/package2 ``` After removing the requirements, the modified requirements will be uninstalled. ### Options * **--ignore-platform-reqs:** ignore `php`, `hhvm`, `lib-*` and `ext-*` requirements and force the installation even if the local machine does not fulfill these. See also the [`platform`](06-config.md#platform) config option. * **--dev:** Remove packages from `require-dev`. * **--no-update:** Disables the automatic update of the dependencies. * **--no-progress:** Removes the progress display that can mess with some terminals or scripts which don't handle backspace characters. * **--update-no-dev:** Run the dependency update with the --no-dev option. * **--update-with-dependencies:** Also update dependencies of the removed packages. * **--optimize-autoloader (-o):** Convert PSR-0/4 autoloading to classmap to get a faster autoloader. This is recommended especially for production, but can take a bit of time to run so it is currently not done by default. * **--classmap-authoritative (-a):** Autoload classes from the classmap only. Implicitly enables `--optimize-autoloader`. ## global The global command allows you to run other commands like `install`, `require` or `update` as if you were running them from the [COMPOSER_HOME](#composer-home) directory. This is merely a helper to manage a project stored in a central location that can hold CLI tools or Composer plugins that you want to have available everywhere. This can be used to install CLI utilities globally and if you add `$COMPOSER_HOME/vendor/bin` to your `$PATH` environment variable. Here is an example: ```sh php composer.phar global require fabpot/php-cs-fixer:dev-master ``` Now the `php-cs-fixer` binary is available globally (assuming you adjusted your PATH). If you wish to update the binary later on you can just run a global update: ```sh php composer.phar global update ``` ## search The search command allows you to search through the current project's package repositories. Usually this will be just packagist. You simply pass it the terms you want to search for. ```sh php composer.phar search monolog ``` You can also search for more than one term by passing multiple arguments. ### Options * **--only-name (-N):** Search only in name. ## show To list all of the available packages, you can use the `show` command. ```sh php composer.phar show ``` If you want to see the details of a certain package, you can pass the package name. ```sh php composer.phar show monolog/monolog name : monolog/monolog versions : master-dev, 1.0.2, 1.0.1, 1.0.0, 1.0.0-RC1 type : library names : monolog/monolog source : [git] https://github.com/Seldaek/monolog.git 3d4e60d0cbc4b888fe5ad223d77964428b1978da dist : [zip] https://github.com/Seldaek/monolog/zipball/3d4e60d0cbc4b888fe5ad223d77964428b1978da 3d4e60d0cbc4b888fe5ad223d77964428b1978da license : MIT autoload psr-0 Monolog : src/ requires php >=5.3.0 ``` You can even pass the package version, which will tell you the details of that specific version. ```sh php composer.phar show monolog/monolog 1.0.2 ``` ### Options * **--installed (-i):** List the packages that are installed. * **--platform (-p):** List only platform packages (php & extensions). * **--self (-s):** List the root package info. * **--tree (-t):** List the dependencies as a tree. Only usable when giving a single package name or combined with `-i`. ## browse / home The `browse` (aliased to `home`) opens a package's repository URL or homepage in your browser. ### Options * **--homepage (-H):** Open the homepage instead of the repository URL. ## suggests Lists all packages suggested by currently installed set of packages. You can optionally pass one or multiple package names in the format of `vendor/package` to limit output to suggestions made by those packages only. Use the `--by-package` or `--by-suggestion` flags to group the output by the package offering the suggestions or the suggested packages respectively. ### Options * **--by-package:** Groups output by suggesting package. * **--by-suggestion:** Groups output by suggested package. * **--no-dev:** Excludes suggestions from `require-dev` packages. * **--verbose (-v):** Increased verbosity adds suggesting package name and reason for suggestion. ## depends The `depends` command tells you which other packages depend on a certain package. As with installation `require-dev` relationships are only considered for the root package. ```sh php composer.phar depends doctrine/lexer doctrine/annotations v1.2.7 requires doctrine/lexer (1.*) doctrine/common v2.6.1 requires doctrine/lexer (1.*) ``` You can optionally specify a version constraint after the package to limit the search. Add the `--tree` or `-t` flag to show a recursive tree of why the package is depended upon, for example: ```sh php composer.phar depends psr/log -t psr/log 1.0.0 Common interface for logging libraries |- aboutyou/app-sdk 2.6.11 (requires psr/log 1.0.*) | `- __root__ (requires aboutyou/app-sdk ^2.6) |- monolog/monolog 1.17.2 (requires psr/log ~1.0) | `- laravel/framework v5.2.16 (requires monolog/monolog ~1.11) | `- __root__ (requires laravel/framework ^5.2) `- symfony/symfony v3.0.2 (requires psr/log ~1.0) `- __root__ (requires symfony/symfony ^3.0) ``` ### Options * **--recursive (-r):** Recursively resolves up to the root package. * **--tree (-t):** Prints the results as a nested tree, implies -r. ## prohibits The `prohibits` command tells you which packages are blocking a given package from being installed. Specify a version constraint to verify whether upgrades can be performed in your project, and if not why not. See the following example: ```sh php composer.phar prohibits symfony/symfony 3.1 laravel/framework v5.2.16 requires symfony/var-dumper (2.8.*|3.0.*) ``` Note that you can also specify platform requirements, for example to check whether you can upgrade your server to PHP 8.0: ```sh php composer.phar prohibits php:8 doctrine/cache v1.6.0 requires php (~5.5|~7.0) doctrine/common v2.6.1 requires php (~5.5|~7.0) doctrine/instantiator 1.0.5 requires php (>=5.3,<8.0-DEV) ``` As with `depends` you can request a recursive lookup, which will list all packages depending on the packages that cause the conflict. ### Options * **--recursive (-r):** Recursively resolves up to the root package. * **--tree (-t):** Prints the results as a nested tree, implies -r. ## validate You should always run the `validate` command before you commit your `composer.json` file, and before you tag a release. It will check if your `composer.json` is valid. ```sh php composer.phar validate ``` ### Options * **--no-check-all:** Do not emit a warning if requirements in `composer.json` use unbound version constraints. * **--no-check-lock:** Do not emit an error if `composer.lock` exists and is not up to date. * **--no-check-publish:** Do not emit an error if `composer.json` is unsuitable for publishing as a package on Packagist but is otherwise valid. ## status If you often need to modify the code of your dependencies and they are installed from source, the `status` command allows you to check if you have local changes in any of them. ```sh php composer.phar status ``` With the `--verbose` option you get some more information about what was changed: ```sh php composer.phar status -v You have changes in the following dependencies: vendor/seld/jsonlint: M README.mdown ``` ## self-update To update Composer itself to the latest version, just run the `self-update` command. It will replace your `composer.phar` with the latest version. ```sh php composer.phar self-update ``` If you would like to instead update to a specific release simply specify it: ```sh php composer.phar self-update 1.0.0-alpha7 ``` If you have installed Composer for your entire system (see [global installation](00-intro.md#globally)), you may have to run the command with `root` privileges ```sh sudo -H composer self-update ``` ### Options * **--rollback (-r):** Rollback to the last version you had installed. * **--clean-backups:** Delete old backups during an update. This makes the current version of Composer the only backup available after the update. ## config The `config` command allows you to edit some basic Composer settings in either the local `composer.json` file or the global `config.json` file. ```sh php composer.phar config --list ``` ### Usage `config [options] [setting-key] [setting-value1] ... [setting-valueN]` `setting-key` is a configuration option name and `setting-value1` is a configuration value. For settings that can take an array of values (like `github-protocols`), more than one setting-value arguments are allowed. See the [Config](06-config.md) chapter for valid configuration options. ### Options * **--global (-g):** Operate on the global config file located at `$COMPOSER_HOME/config.json` by default. Without this option, this command affects the local composer.json file or a file specified by `--file`. * **--editor (-e):** Open the local composer.json file using in a text editor as defined by the `EDITOR` env variable. With the `--global` option, this opens the global config file. * **--unset:** Remove the configuration element named by `setting-key`. * **--list (-l):** Show the list of current config variables. With the `--global` option this lists the global configuration only. * **--file="..." (-f):** Operate on a specific file instead of composer.json. Note that this cannot be used in conjunction with the `--global` option. * **--absolute:** Returns absolute paths when fetching *-dir config values instead of relative. ### Modifying Repositories In addition to modifying the config section, the `config` command also supports making changes to the repositories section by using it the following way: ```sh php composer.phar config repositories.foo vcs https://github.com/foo/bar ``` If your repository requires more configuration options, you can instead pass its JSON representation : ```sh php composer.phar config repositories.foo '{"type": "vcs", "url": "http://svn.example.org/my-project/", "trunk-path": "master"}' ``` ## create-project You can use Composer to create new projects from an existing package. This is the equivalent of doing a git clone/svn checkout followed by a "composer install" of the vendors. There are several applications for this: 1. You can deploy application packages. 2. You can check out any package and start developing on patches for example. 3. Projects with multiple developers can use this feature to bootstrap the initial application for development. To create a new project using Composer you can use the "create-project" command. Pass it a package name, and the directory to create the project in. You can also provide a version as third argument, otherwise the latest version is used. If the directory does not currently exist, it will be created during installation. ```sh php composer.phar create-project doctrine/orm path 2.2.* ``` It is also possible to run the command without params in a directory with an existing `composer.json` file to bootstrap a project. By default the command checks for the packages on packagist.org. ### Options * **--repository:** Provide a custom repository to search for the package, which will be used instead of packagist. Can be either an HTTP URL pointing to a `composer` repository, a path to a local `packages.json` file, or a JSON string which similar to what the [repositories](04-schema.md#repositories) key accepts. * **--stability (-s):** Minimum stability of package. Defaults to `stable`. * **--prefer-source:** Install packages from `source` when available. * **--prefer-dist:** Install packages from `dist` when available. * **--dev:** Install packages listed in `require-dev`. * **--no-install:** Disables installation of the vendors. * **--no-plugins:** Disables plugins. * **--no-scripts:** Disables the execution of the scripts defined in the root package. * **--no-progress:** Removes the progress display that can mess with some terminals or scripts which don't handle backspace characters. * **--keep-vcs:** Skip the deletion of the VCS metadata for the created project. This is mostly useful if you run the command in non-interactive mode. * **--ignore-platform-reqs:** ignore `php`, `hhvm`, `lib-*` and `ext-*` requirements and force the installation even if the local machine does not fulfill these. ## dump-autoload If you need to update the autoloader because of new classes in a classmap package for example, you can use "dump-autoload" to do that without having to go through an install or update. Additionally, it can dump an optimized autoloader that converts PSR-0/4 packages into classmap ones for performance reasons. In large applications with many classes, the autoloader can take up a substantial portion of every request's time. Using classmaps for everything is less convenient in development, but using this option you can still use PSR-0/4 for convenience and classmaps for performance. ### Options * **--optimize (-o):** Convert PSR-0/4 autoloading to classmap to get a faster autoloader. This is recommended especially for production, but can take a bit of time to run so it is currently not done by default. * **--classmap-authoritative (-a):** Autoload classes from the classmap only. Implicitly enables `--optimize`. * **--no-dev:** Disables autoload-dev rules. ## clear-cache Deletes all content from Composer's cache directories. ## licenses Lists the name, version and license of every package installed. Use `--format=json` to get machine readable output. ### Options * **--no-dev:** Remove dev dependencies from the output * **--format:** Format of the output: text or json (default: "text") ## run-script ### Options * **--timeout:** Set the script timeout in seconds, or 0 for no timeout. * **--no-dev:** Disable dev mode * **--list:** List user defined scripts To run [scripts](articles/scripts.md) manually you can use this command, just give it the script name and optionally any required arguments. ## exec Executes a vendored binary/script. You can execute any command and this will ensure that the Composer bin-dir is pushed on your PATH before the command runs. ### Options * **--list:** List the available composer binaries ## diagnose If you think you found a bug, or something is behaving strangely, you might want to run the `diagnose` command to perform automated checks for many common problems. ```sh php composer.phar diagnose ``` ## archive This command is used to generate a zip/tar archive for a given package in a given version. It can also be used to archive your entire project without excluded/ignored files. ```sh php composer.phar archive vendor/package 2.0.21 --format=zip ``` ### Options * **--format (-f):** Format of the resulting archive: tar or zip (default: "tar") * **--dir:** Write the archive to this directory (default: ".") ## help To get more information about a certain command, just use `help`. ```sh php composer.phar help install ``` ## Command-line completion Command-line completion can be enabled by following instructions [on this page](https://github.com/bamarni/symfony-console-autocomplete). ## Environment variables You can set a number of environment variables that override certain settings. Whenever possible it is recommended to specify these settings in the `config` section of `composer.json` instead. It is worth noting that the env vars will always take precedence over the values specified in `composer.json`. ### COMPOSER By setting the `COMPOSER` env variable it is possible to set the filename of `composer.json` to something else. For example: ```sh COMPOSER=composer-other.json php composer.phar install ``` The generated lock file will use the same name: `composer-other.lock` in this example. ### COMPOSER_ROOT_VERSION By setting this var you can specify the version of the root package, if it can not be guessed from VCS info and is not present in `composer.json`. ### COMPOSER_VENDOR_DIR By setting this var you can make Composer install the dependencies into a directory other than `vendor`. ### COMPOSER_BIN_DIR By setting this option you can change the `bin` ([Vendor Binaries](articles/vendor-binaries.md)) directory to something other than `vendor/bin`. ### http_proxy or HTTP_PROXY If you are using Composer from behind an HTTP proxy, you can use the standard `http_proxy` or `HTTP_PROXY` env vars. Simply set it to the URL of your proxy. Many operating systems already set this variable for you. Using `http_proxy` (lowercased) or even defining both might be preferable since some tools like git or curl will only use the lower-cased `http_proxy` version. Alternatively you can also define the git proxy using `git config --global http.proxy `. ### no_proxy If you are behind a proxy and would like to disable it for certain domains, you can use the `no_proxy` env var. Simply set it to a comma separated list of domains the proxy should *not* be used for. The env var accepts domains, IP addresses, and IP address blocks in CIDR notation. You can restrict the filter to a particular port (e.g. `:80`). You can also set it to `*` to ignore the proxy for all HTTP requests. ### HTTP_PROXY_REQUEST_FULLURI If you use a proxy but it does not support the request_fulluri flag, then you should set this env var to `false` or `0` to prevent Composer from setting the request_fulluri option. ### HTTPS_PROXY_REQUEST_FULLURI If you use a proxy but it does not support the request_fulluri flag for HTTPS requests, then you should set this env var to `false` or `0` to prevent Composer from setting the request_fulluri option. ### COMPOSER_HOME The `COMPOSER_HOME` var allows you to change the Composer home directory. This is a hidden, global (per-user on the machine) directory that is shared between all projects. By default it points to `C:\Users\\AppData\Roaming\Composer` on Windows and `/Users//.composer` on OSX. On *nix systems that follow the [XDG Base Directory Specifications](http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html), it points to `$XDG_CONFIG_HOME/composer`. On other *nix systems, it points to `/home//.composer`. #### COMPOSER_HOME/config.json You may put a `config.json` file into the location which `COMPOSER_HOME` points to. Composer will merge this configuration with your project's `composer.json` when you run the `install` and `update` commands. This file allows you to set [repositories](05-repositories.md) and [configuration](06-config.md) for the user's projects. In case global configuration matches _local_ configuration, the _local_ configuration in the project's `composer.json` always wins. ### COMPOSER_CACHE_DIR The `COMPOSER_CACHE_DIR` var allows you to change the Composer cache directory, which is also configurable via the [`cache-dir`](06-config.md#cache-dir) option. By default it points to $COMPOSER_HOME/cache on \*nix and OSX, and `C:\Users\\AppData\Local\Composer` (or `%LOCALAPPDATA%/Composer`) on Windows. ### COMPOSER_PROCESS_TIMEOUT This env var controls the time Composer waits for commands (such as git commands) to finish executing. The default value is 300 seconds (5 minutes). ### COMPOSER_CAFILE By setting this environmental value, you can set a path to a certificate bundle file to be used during SSL/TLS peer verification. ### COMPOSER_AUTH The `COMPOSER_AUTH` var allows you to set up authentication as an environment variable. The contents of the variable should be a JSON formatted object containing http-basic, github-oauth, ... objects as needed, and following the [spec from the config](06-config.md#gitlab-oauth). ### COMPOSER_DISCARD_CHANGES This env var controls the [`discard-changes`](06-config.md#discard-changes) config option. ### COMPOSER_NO_INTERACTION If set to 1, this env var will make Composer behave as if you passed the `--no-interaction` flag to every command. This can be set on build boxes/CI. ### COMPOSER_DISABLE_XDEBUG_WARN If set to 1, this env disables the warning about having xdebug enabled. ← [Libraries](02-libraries.md) | [Schema](04-schema.md) → composer-1.0.0-beta2/doc/04-schema.md000066400000000000000000000617151267577262200171340ustar00rootroot00000000000000# The composer.json Schema This chapter will explain all of the fields available in `composer.json`. ## JSON schema We have a [JSON schema](http://json-schema.org) that documents the format and can also be used to validate your `composer.json`. In fact, it is used by the `validate` command. You can find it at: [`res/composer-schema.json`](https://github.com/composer/composer/blob/master/res/composer-schema.json). ## Root Package The root package is the package defined by the `composer.json` at the root of your project. It is the main `composer.json` that defines your project requirements. Certain fields only apply when in the root package context. One example of this is the `config` field. Only the root package can define configuration. The config of dependencies is ignored. This makes the `config` field `root-only`. > **Note:** A package can be the root package or not, depending on the context. > For example, if your project depends on the `monolog` library, your project > is the root package. However, if you clone `monolog` from GitHub in order to > fix a bug in it, then `monolog` is the root package. ## Properties ### name The name of the package. It consists of vendor name and project name, separated by `/`. Examples: * monolog/monolog * igorw/event-source Required for published packages (libraries). ### description A short description of the package. Usually this is just one line long. Required for published packages (libraries). ### version The version of the package. In most cases this is not required and should be omitted (see below). This must follow the format of `X.Y.Z` or `vX.Y.Z` with an optional suffix of `-dev`, `-patch` (`-p`), `-alpha` (`-a`), `-beta` (`-b`) or `-RC`. The patch, alpha, beta and RC suffixes can also be followed by a number. Examples: - 1.0.0 - 1.0.2 - 1.1.0 - 0.2.5 - 1.0.0-dev - 1.0.0-alpha3 - 1.0.0-beta2 - 1.0.0-RC5 - v2.0.4-p1 Optional if the package repository can infer the version from somewhere, such as the VCS tag name in the VCS repository. In that case it is also recommended to omit it. > **Note:** Packagist uses VCS repositories, so the statement above is very > much true for Packagist as well. Specifying the version yourself will > most likely end up creating problems at some point due to human error. ### type The type of the package. It defaults to `library`. Package types are used for custom installation logic. If you have a package that needs some special logic, you can define a custom type. This could be a `symfony-bundle`, a `wordpress-plugin` or a `typo3-module`. These types will all be specific to certain projects, and they will need to provide an installer capable of installing packages of that type. Out of the box, Composer supports four types: - **library:** This is the default. It will simply copy the files to `vendor`. - **project:** This denotes a project rather than a library. For example application shells like the [Symfony standard edition](https://github.com/symfony/symfony-standard), CMSs like the [SilverStripe installer](https://github.com/silverstripe/silverstripe-installer) or full fledged applications distributed as packages. This can for example be used by IDEs to provide listings of projects to initialize when creating a new workspace. - **metapackage:** An empty package that contains requirements and will trigger their installation, but contains no files and will not write anything to the filesystem. As such, it does not require a dist or source key to be installable. - **composer-plugin:** A package of type `composer-plugin` may provide an installer for other packages that have a custom type. Read more in the [dedicated article](articles/custom-installers.md). Only use a custom type if you need custom logic during installation. It is recommended to omit this field and have it just default to `library`. ### keywords An array of keywords that the package is related to. These can be used for searching and filtering. Examples: - logging - events - database - redis - templating Optional. ### homepage An URL to the website of the project. Optional. ### time Release date of the version. Must be in `YYYY-MM-DD` or `YYYY-MM-DD HH:MM:SS` format. Optional. ### license The license of the package. This can be either a string or an array of strings. The recommended notation for the most common licenses is (alphabetical): - Apache-2.0 - BSD-2-Clause - BSD-3-Clause - BSD-4-Clause - GPL-2.0 - GPL-2.0+ - GPL-3.0 - GPL-3.0+ - LGPL-2.1 - LGPL-2.1+ - LGPL-3.0 - LGPL-3.0+ - MIT Optional, but it is highly recommended to supply this. More identifiers are listed at the [SPDX Open Source License Registry](https://www.spdx.org/licenses/). For closed-source software, you may use `"proprietary"` as the license identifier. An Example: ```json { "license": "MIT" } ``` For a package, when there is a choice between licenses ("disjunctive license"), multiple can be specified as array. An Example for disjunctive licenses: ```json { "license": [ "LGPL-2.1", "GPL-3.0+" ] } ``` Alternatively they can be separated with "or" and enclosed in parenthesis; ```json { "license": "(LGPL-2.1 or GPL-3.0+)" } ``` Similarly when multiple licenses need to be applied ("conjunctive license"), they should be separated with "and" and enclosed in parenthesis. ### authors The authors of the package. This is an array of objects. Each author object can have following properties: * **name:** The author's name. Usually their real name. * **email:** The author's email address. * **homepage:** An URL to the author's website. * **role:** The author's role in the project (e.g. developer or translator) An example: ```json { "authors": [ { "name": "Nils Adermann", "email": "naderman@naderman.de", "homepage": "http://www.naderman.de", "role": "Developer" }, { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", "homepage": "http://seld.be", "role": "Developer" } ] } ``` Optional, but highly recommended. ### support Various information to get support about the project. Support information includes the following: * **email:** Email address for support. * **issues:** URL to the issue tracker. * **forum:** URL to the forum. * **wiki:** URL to the wiki. * **irc:** IRC channel for support, as irc://server/channel. * **source:** URL to browse or download the sources. * **docs:** URL to the documentation. An example: ```json { "support": { "email": "support@example.org", "irc": "irc://irc.freenode.org/composer" } } ``` Optional. ### Package links All of the following take an object which maps package names to [version constraints](01-basic-usage.md#package-versions). Example: ```json { "require": { "monolog/monolog": "1.0.*" } } ``` All links are optional fields. `require` and `require-dev` additionally support stability flags ([root-only](04-schema.md#root-package)). These allow you to further restrict or expand the stability of a package beyond the scope of the [minimum-stability](#minimum-stability) setting. You can apply them to a constraint, or just apply them to an empty constraint if you want to allow unstable packages of a dependency for example. Example: ```json { "require": { "monolog/monolog": "1.0.*@beta", "acme/foo": "@dev" } } ``` If one of your dependencies has a dependency on an unstable package you need to explicitly require it as well, along with its sufficient stability flag. Example: ```json { "require": { "doctrine/doctrine-fixtures-bundle": "dev-master", "doctrine/data-fixtures": "@dev" } } ``` `require` and `require-dev` additionally support explicit references (i.e. commit) for dev versions to make sure they are locked to a given state, even when you run update. These only work if you explicitly require a dev version and append the reference with `#`. Example: ```json { "require": { "monolog/monolog": "dev-master#2eb0c0978d290a1c45346a1955188929cb4e5db7", "acme/foo": "1.0.x-dev#abc123" } } ``` > **Note:** While this is convenient at times, it should not be how you use > packages in the long term because it comes with a technical limitation. The > composer.json metadata will still be read from the branch name you specify > before the hash. Because of that in some cases it will not be a practical > workaround, and you should always try to switch to tagged releases as soon > as you can. It is also possible to inline-alias a package constraint so that it matches a constraint that it otherwise would not. For more information [see the aliases article](articles/aliases.md). `require` and `require-dev` also support references to specific PHP versions and PHP extensions your project needs to run successfully. Example: ```json { "require" : { "php" : "^5.5 || ^7.0", "ext-mbstring": "*" } } ``` #### require Lists packages required by this package. The package will not be installed unless those requirements can be met. #### require-dev ([root-only](04-schema.md#root-package)) Lists packages required for developing this package, or running tests, etc. The dev requirements of the root package are installed by default. Both `install` or `update` support the `--no-dev` option that prevents dev dependencies from being installed. #### conflict Lists packages that conflict with this version of this package. They will not be allowed to be installed together with your package. Note that when specifying ranges like `<1.0 >=1.1` in a `conflict` link, this will state a conflict with all versions that are less than 1.0 *and* equal or newer than 1.1 at the same time, which is probably not what you want. You probably want to go for `<1.0 || >=1.1` in this case. #### replace Lists packages that are replaced by this package. This allows you to fork a package, publish it under a different name with its own version numbers, while packages requiring the original package continue to work with your fork because it replaces the original package. This is also useful for packages that contain sub-packages, for example the main symfony/symfony package contains all the Symfony Components which are also available as individual packages. If you require the main package it will automatically fulfill any requirement of one of the individual components, since it replaces them. Caution is advised when using replace for the sub-package purpose explained above. You should then typically only replace using `self.version` as a version constraint, to make sure the main package only replaces the sub-packages of that exact version, and not any other version, which would be incorrect. #### provide List of other packages that are provided by this package. This is mostly useful for common interfaces. A package could depend on some virtual `logger` package, any library that implements this logger interface would simply list it in `provide`. #### suggest Suggested packages that can enhance or work well with this package. These are just informational and are displayed after the package is installed, to give your users a hint that they could add more packages, even though they are not strictly required. The format is like package links above, except that the values are free text and not version constraints. Example: ```json { "suggest": { "monolog/monolog": "Allows more advanced logging of the application flow" } } ``` ### autoload Autoload mapping for a PHP autoloader. Currently [`PSR-0`](http://www.php-fig.org/psr/psr-0/) autoloading, [`PSR-4`](http://www.php-fig.org/psr/psr-4/) autoloading, `classmap` generation and `files` includes are supported. PSR-4 is the recommended way though since it offers greater ease of use (no need to regenerate the autoloader when you add classes). #### PSR-4 Under the `psr-4` key you define a mapping from namespaces to paths, relative to the package root. When autoloading a class like `Foo\\Bar\\Baz` a namespace prefix `Foo\\` pointing to a directory `src/` means that the autoloader will look for a file named `src/Bar/Baz.php` and include it if present. Note that as opposed to the older PSR-0 style, the prefix (`Foo\\`) is **not** present in the file path. Namespace prefixes must end in `\\` to avoid conflicts between similar prefixes. For example `Foo` would match classes in the `FooBar` namespace so the trailing backslashes solve the problem: `Foo\\` and `FooBar\\` are distinct. The PSR-4 references are all combined, during install/update, into a single key => value array which may be found in the generated file `vendor/composer/autoload_psr4.php`. Example: ```json { "autoload": { "psr-4": { "Monolog\\": "src/", "Vendor\\Namespace\\": "" } } } ``` If you need to search for a same prefix in multiple directories, you can specify them as an array as such: ```json { "autoload": { "psr-4": { "Monolog\\": ["src/", "lib/"] } } } ``` If you want to have a fallback directory where any namespace will be looked for, you can use an empty prefix like: ```json { "autoload": { "psr-4": { "": "src/" } } } ``` #### PSR-0 Under the `psr-0` key you define a mapping from namespaces to paths, relative to the package root. Note that this also supports the PEAR-style non-namespaced convention. Please note namespace declarations should end in `\\` to make sure the autoloader responds exactly. For example `Foo` would match in `FooBar` so the trailing backslashes solve the problem: `Foo\\` and `FooBar\\` are distinct. The PSR-0 references are all combined, during install/update, into a single key => value array which may be found in the generated file `vendor/composer/autoload_namespaces.php`. Example: ```json { "autoload": { "psr-0": { "Monolog\\": "src/", "Vendor\\Namespace\\": "src/", "Vendor_Namespace_": "src/" } } } ``` If you need to search for a same prefix in multiple directories, you can specify them as an array as such: ```json { "autoload": { "psr-0": { "Monolog\\": ["src/", "lib/"] } } } ``` The PSR-0 style is not limited to namespace declarations only but may be specified right down to the class level. This can be useful for libraries with only one class in the global namespace. If the php source file is also located in the root of the package, for example, it may be declared like this: ```json { "autoload": { "psr-0": { "UniqueGlobalClass": "" } } } ``` If you want to have a fallback directory where any namespace can be, you can use an empty prefix like: ```json { "autoload": { "psr-0": { "": "src/" } } } ``` #### Classmap The `classmap` references are all combined, during install/update, into a single key => value array which may be found in the generated file `vendor/composer/autoload_classmap.php`. This map is built by scanning for classes in all `.php` and `.inc` files in the given directories/files. You can use the classmap generation support to define autoloading for all libraries that do not follow PSR-0/4. To configure this you specify all directories or files to search for classes. Example: ```json { "autoload": { "classmap": ["src/", "lib/", "Something.php"] } } ``` #### Files If you want to require certain files explicitly on every request then you can use the 'files' autoloading mechanism. This is useful if your package includes PHP functions that cannot be autoloaded by PHP. Example: ```json { "autoload": { "files": ["src/MyLibrary/functions.php"] } } ``` #### Exclude files from classmaps If you want to exclude some files or folders from the classmap you can use the 'exclude-from-classmap' property. This might be useful to exclude test classes in your live environment, for example, as those will be skipped from the classmap even when building an optimized autoloader. The classmap generator will ignore all files in the paths configured here. The paths are absolute from the package root directory (i.e. composer.json location), and support `*` to match anything but a slash, and `**` to match anything. `**` is implicitly added to the end of the paths. Example: ```json { "autoload": { "exclude-from-classmap": ["/Tests/", "/test/", "/tests/"] } } ``` ### autoload-dev ([root-only](04-schema.md#root-package)) This section allows to define autoload rules for development purposes. Classes needed to run the test suite should not be included in the main autoload rules to avoid polluting the autoloader in production and when other people use your package as a dependency. Therefore, it is a good idea to rely on a dedicated path for your unit tests and to add it within the autoload-dev section. Example: ```json { "autoload": { "psr-4": { "MyLibrary\\": "src/" } }, "autoload-dev": { "psr-4": { "MyLibrary\\Tests\\": "tests/" } } } ``` ### include-path > **DEPRECATED**: This is only present to support legacy projects, and all new code > should preferably use autoloading. As such it is a deprecated practice, but the > feature itself will not likely disappear from Composer. A list of paths which should get appended to PHP's `include_path`. Example: ```json { "include-path": ["lib/"] } ``` Optional. ### target-dir > **DEPRECATED**: This is only present to support legacy PSR-0 style autoloading, > and all new code should preferably use PSR-4 without target-dir and projects > using PSR-0 with PHP namespaces are encouraged to migrate to PSR-4 instead. Defines the installation target. In case the package root is below the namespace declaration you cannot autoload properly. `target-dir` solves this problem. An example is Symfony. There are individual packages for the components. The Yaml component is under `Symfony\Component\Yaml`. The package root is that `Yaml` directory. To make autoloading possible, we need to make sure that it is not installed into `vendor/symfony/yaml`, but instead into `vendor/symfony/yaml/Symfony/Component/Yaml`, so that the autoloader can load it from `vendor/symfony/yaml`. To do that, `autoload` and `target-dir` are defined as follows: ```json { "autoload": { "psr-0": { "Symfony\\Component\\Yaml\\": "" } }, "target-dir": "Symfony/Component/Yaml" } ``` Optional. ### minimum-stability ([root-only](04-schema.md#root-package)) This defines the default behavior for filtering packages by stability. This defaults to `stable`, so if you rely on a `dev` package, you should specify it in your file to avoid surprises. All versions of each package are checked for stability, and those that are less stable than the `minimum-stability` setting will be ignored when resolving your project dependencies. Specific changes to the stability requirements of a given package can be done in `require` or `require-dev` (see [package links](#package-links)). Available options (in order of stability) are `dev`, `alpha`, `beta`, `RC`, and `stable`. ### prefer-stable ([root-only](04-schema.md#root-package)) When this is enabled, Composer will prefer more stable packages over unstable ones when finding compatible stable packages is possible. If you require a dev version or only alphas are available for a package, those will still be selected granted that the minimum-stability allows for it. Use `"prefer-stable": true` to enable. ### repositories ([root-only](04-schema.md#root-package)) Custom package repositories to use. By default Composer just uses the packagist repository. By specifying repositories you can get packages from elsewhere. Repositories are not resolved recursively. You can only add them to your main `composer.json`. Repository declarations of dependencies' `composer.json`s are ignored. The following repository types are supported: * **composer:** A Composer repository is simply a `packages.json` file served via the network (HTTP, FTP, SSH), that contains a list of `composer.json` objects with additional `dist` and/or `source` information. The `packages.json` file is loaded using a PHP stream. You can set extra options on that stream using the `options` parameter. * **vcs:** The version control system repository can fetch packages from git, svn and hg repositories. * **pear:** With this you can import any pear repository into your Composer project. * **package:** If you depend on a project that does not have any support for composer whatsoever you can define the package inline using a `package` repository. You basically just inline the `composer.json` object. For more information on any of these, see [Repositories](05-repositories.md). Example: ```json { "repositories": [ { "type": "composer", "url": "http://packages.example.com" }, { "type": "composer", "url": "https://packages.example.com", "options": { "ssl": { "verify_peer": "true" } } }, { "type": "vcs", "url": "https://github.com/Seldaek/monolog" }, { "type": "pear", "url": "https://pear2.php.net" }, { "type": "package", "package": { "name": "smarty/smarty", "version": "3.1.7", "dist": { "url": "http://www.smarty.net/files/Smarty-3.1.7.zip", "type": "zip" }, "source": { "url": "https://smarty-php.googlecode.com/svn/", "type": "svn", "reference": "tags/Smarty_3_1_7/distribution/" } } } ] } ``` > **Note:** Order is significant here. When looking for a package, Composer will look from the first to the last repository, and pick the first match. By default Packagist is added last which means that custom repositories can override packages from it. ### config ([root-only](04-schema.md#root-package)) A set of configuration options. It is only used for projects. See [Config](06-config.md) for a description of each individual option. ### scripts ([root-only](04-schema.md#root-package)) Composer allows you to hook into various parts of the installation process through the use of scripts. See [Scripts](articles/scripts.md) for events details and examples. ### extra Arbitrary extra data for consumption by `scripts`. This can be virtually anything. To access it from within a script event handler, you can do: ```php $extra = $event->getComposer()->getPackage()->getExtra(); ``` Optional. ### bin A set of files that should be treated as binaries and symlinked into the `bin-dir` (from config). See [Vendor Binaries](articles/vendor-binaries.md) for more details. Optional. ### archive A set of options for creating package archives. The following options are supported: * **exclude:** Allows configuring a list of patterns for excluded paths. The pattern syntax matches .gitignore files. A leading exclamation mark (!) will result in any matching files to be included even if a previous pattern excluded them. A leading slash will only match at the beginning of the project relative path. An asterisk will not expand to a directory separator. Example: ```json { "archive": { "exclude": ["/foo/bar", "baz", "/*.test", "!/foo/bar/baz"] } } ``` The example will include `/dir/foo/bar/file`, `/foo/bar/baz`, `/file.php`, `/foo/my.test` but it will exclude `/foo/bar/any`, `/foo/baz`, and `/my.test`. Optional. ### non-feature-branches A list of regex patterns of branch names that are non-numeric (e.g. "latest" or something), that will NOT be handled as feature branches. This is an array of strings. If you have non-numeric branch names, for example like "latest", "current", "latest-stable" or something, that do not look like a version number, then Composer handles such branches as feature branches. This means it searches for parent branches, that look like a version or ends at special branches (like master) and the root package version number becomes the version of the parent branch or at least master or something. To handle non-numeric named branches as versions instead of searching for a parent branch with a valid version or special branch name like master, you can set patterns for branch names, that should be handled as dev version branches. This is really helpful when you have dependencies using "self.version", so that not dev-master, but the same branch is installed (in the example: latest-testing). An example: If you have a testing branch, that is heavily maintained during a testing phase and is deployed to your staging environment, normally "composer show -s" will give you `versions : * dev-master`. If you configure `latest-.*` as a pattern for non-feature-branches like this: ```json { "non-feature-branches": ["latest-.*"] } ``` Then "composer show -s" will give you `versions : * dev-latest-testing`. Optional. ← [Command-line interface](03-cli.md) | [Repositories](05-repositories.md) → composer-1.0.0-beta2/doc/05-repositories.md000066400000000000000000000534361267577262200204250ustar00rootroot00000000000000# Repositories This chapter will explain the concept of packages and repositories, what kinds of repositories are available, and how they work. ## Concepts Before we look at the different types of repositories that exist, we need to understand some of the basic concepts that Composer is built on. ### Package Composer is a dependency manager. It installs packages locally. A package is essentially just a directory containing something. In this case it is PHP code, but in theory it could be anything. And it contains a package description which has a name and a version. The name and the version are used to identify the package. In fact, internally Composer sees every version as a separate package. While this distinction does not matter when you are using Composer, it's quite important when you want to change it. In addition to the name and the version, there is useful metadata. The information most relevant for installation is the source definition, which describes where to get the package contents. The package data points to the contents of the package. And there are two options here: dist and source. **Dist:** The dist is a packaged version of the package data. Usually a released version, usually a stable release. **Source:** The source is used for development. This will usually originate from a source code repository, such as git. You can fetch this when you want to modify the downloaded package. Packages can supply either of these, or even both. Depending on certain factors, such as user-supplied options and stability of the package, one will be preferred. ### Repository A repository is a package source. It's a list of packages/versions. Composer will look in all your repositories to find the packages your project requires. By default only the Packagist repository is registered in Composer. You can add more repositories to your project by declaring them in `composer.json`. Repositories are only available to the root package and the repositories defined in your dependencies will not be loaded. Read the [FAQ entry](faqs/why-can't-composer-load-repositories-recursively.md) if you want to learn why. ## Types ### Composer The main repository type is the `composer` repository. It uses a single `packages.json` file that contains all of the package metadata. This is also the repository type that packagist uses. To reference a `composer` repository, just supply the path before the `packages.json` file. In case of packagist, that file is located at `/packages.json`, so the URL of the repository would be `packagist.org`. For `example.org/packages.json` the repository URL would be `example.org`. #### packages The only required field is `packages`. The JSON structure is as follows: ```json { "packages": { "vendor/package-name": { "dev-master": { @composer.json }, "1.0.x-dev": { @composer.json }, "0.0.1": { @composer.json }, "1.0.0": { @composer.json } } } } ``` The `@composer.json` marker would be the contents of the `composer.json` from that package version including as a minimum: * name * version * dist or source Here is a minimal package definition: ```json { "name": "smarty/smarty", "version": "3.1.7", "dist": { "url": "http://www.smarty.net/files/Smarty-3.1.7.zip", "type": "zip" } } ``` It may include any of the other fields specified in the [schema](04-schema.md). #### notify-batch The `notify-batch` field allows you to specify a URL that will be called every time a user installs a package. The URL can be either an absolute path (that will use the same domain as the repository) or a fully qualified URL. An example value: ```json { "notify-batch": "/downloads/" } ``` For `example.org/packages.json` containing a `monolog/monolog` package, this would send a `POST` request to `example.org/downloads/` with following JSON request body: ```json { "downloads": [ {"name": "monolog/monolog", "version": "1.2.1.0"} ] } ``` The version field will contain the normalized representation of the version number. This field is optional. #### includes For larger repositories it is possible to split the `packages.json` into multiple files. The `includes` field allows you to reference these additional files. An example: ```json { "includes": { "packages-2011.json": { "sha1": "525a85fb37edd1ad71040d429928c2c0edec9d17" }, "packages-2012-01.json": { "sha1": "897cde726f8a3918faf27c803b336da223d400dd" }, "packages-2012-02.json": { "sha1": "26f911ad717da26bbcac3f8f435280d13917efa5" } } } ``` The SHA-1 sum of the file allows it to be cached and only re-requested if the hash changed. This field is optional. You probably don't need it for your own custom repository. #### provider-includes and providers-url For very large repositories like packagist.org using the so-called provider files is the preferred method. The `provider-includes` field allows you to list a set of files that list package names provided by this repository. The hash should be a sha256 of the files in this case. The `providers-url` describes how provider files are found on the server. It is an absolute path from the repository root. An example: ```json { "provider-includes": { "providers-a.json": { "sha256": "f5b4bc0b354108ef08614e569c1ed01a2782e67641744864a74e788982886f4c" }, "providers-b.json": { "sha256": "b38372163fac0573053536f5b8ef11b86f804ea8b016d239e706191203f6efac" } }, "providers-url": "/p/%package%$%hash%.json" } ``` Those files contain lists of package names and hashes to verify the file integrity, for example: ```json { "providers": { "acme/foo": { "sha256": "38968de1305c2e17f4de33aea164515bc787c42c7e2d6e25948539a14268bb82" }, "acme/bar": { "sha256": "4dd24c930bd6e1103251306d6336ac813b563a220d9ca14f4743c032fb047233" } } } ``` The file above declares that acme/foo and acme/bar can be found in this repository, by loading the file referenced by `providers-url`, replacing `%package%` by the package name and `%hash%` by the sha256 field. Those files themselves just contain package definitions as described [above](#packages). This field is optional. You probably don't need it for your own custom repository. #### stream options The `packages.json` file is loaded using a PHP stream. You can set extra options on that stream using the `options` parameter. You can set any valid PHP stream context option. See [Context options and parameters](https://php.net/manual/en/context.php) for more information. ### VCS VCS stands for version control system. This includes versioning systems like git, svn or hg. Composer has a repository type for installing packages from these systems. #### Loading a package from a VCS repository There are a few use cases for this. The most common one is maintaining your own fork of a third party library. If you are using a certain library for your project and you decide to change something in the library, you will want your project to use the patched version. If the library is on GitHub (this is the case most of the time), you can simply fork it there and push your changes to your fork. After that you update the project's `composer.json`. All you have to do is add your fork as a repository and update the version constraint to point to your custom branch. Your custom branch name must be prefixed with `"dev-"`. For version constraint naming conventions see [Libraries](02-libraries.md) for more information. Example assuming you patched monolog to fix a bug in the `bugfix` branch: ```json { "repositories": [ { "type": "vcs", "url": "https://github.com/igorw/monolog" } ], "require": { "monolog/monolog": "dev-bugfix" } } ``` When you run `php composer.phar update`, you should get your modified version of `monolog/monolog` instead of the one from packagist. Note that you should not rename the package unless you really intend to fork it in the long term, and completely move away from the original package. Composer will correctly pick your package over the original one since the custom repository has priority over packagist. If you want to rename the package, you should do so in the default (often master) branch and not in a feature branch, since the package name is taken from the default branch. Also note that the override will not work if you change the `name` property in your forked repository's `composer.json` file as this needs to match the original for the override to work. If other dependencies rely on the package you forked, it is possible to inline-alias it so that it matches a constraint that it otherwise would not. For more information [see the aliases article](articles/aliases.md). #### Using private repositories Exactly the same solution allows you to work with your private repositories at GitHub and BitBucket: ```json { "require": { "vendor/my-private-repo": "dev-master" }, "repositories": [ { "type": "vcs", "url": "git@bitbucket.org:vendor/my-private-repo.git" } ] } ``` The only requirement is the installation of SSH keys for a git client. #### Git alternatives Git is not the only version control system supported by the VCS repository. The following are supported: * **Git:** [git-scm.com](https://git-scm.com) * **Subversion:** [subversion.apache.org](https://subversion.apache.org) * **Mercurial:** [mercurial.selenic.com](http://mercurial.selenic.com) To get packages from these systems you need to have their respective clients installed. That can be inconvenient. And for this reason there is special support for GitHub and BitBucket that use the APIs provided by these sites, to fetch the packages without having to install the version control system. The VCS repository provides `dist`s for them that fetch the packages as zips. * **GitHub:** [github.com](https://github.com) (Git) * **BitBucket:** [bitbucket.org](https://bitbucket.org) (Git and Mercurial) The VCS driver to be used is detected automatically based on the URL. However, should you need to specify one for whatever reason, you can use `git`, `svn` or `hg` as the repository type instead of `vcs`. If you set the `no-api` key to `true` on a github repository it will clone the repository as it would with any other git repository instead of using the GitHub API. But unlike using the `git` driver directly, Composer will still attempt to use github's zip files. #### Subversion Options Since Subversion has no native concept of branches and tags, Composer assumes by default that code is located in `$url/trunk`, `$url/branches` and `$url/tags`. If your repository has a different layout you can change those values. For example if you used capitalized names you could configure the repository like this: ```json { "repositories": [ { "type": "vcs", "url": "http://svn.example.org/projectA/", "trunk-path": "Trunk", "branches-path": "Branches", "tags-path": "Tags" } ] } ``` If you have no branches or tags directory you can disable them entirely by setting the `branches-path` or `tags-path` to `false`. If the package is in a sub-directory, e.g. `/trunk/foo/bar/composer.json` and `/tags/1.0/foo/bar/composer.json`, then you can make Composer access it by setting the `"package-path"` option to the sub-directory, in this example it would be `"package-path": "foo/bar/"`. If you have a private Subversion repository you can save credentials in the http-basic section of your config (See [Schema](04-schema.md)): ```json { "http-basic": { "svn.example.org": { "username": "username", "password": "password" } } } ``` If your Subversion client is configured to store credentials by default these credentials will be saved for the current user and existing saved credentials for this server will be overwritten. To change this behavior by setting the `"svn-cache-credentials"` option in your repository configuration: ```json { "repositories": [ { "type": "vcs", "url": "http://svn.example.org/projectA/", "svn-cache-credentials": false } ] } ``` ### PEAR It is possible to install packages from any PEAR channel by using the `pear` repository. Composer will prefix all package names with `pear-{channelName}/` to avoid conflicts. All packages are also aliased with prefix `pear-{channelAlias}/` Example using `pear2.php.net`: ```json { "repositories": [ { "type": "pear", "url": "https://pear2.php.net" } ], "require": { "pear-pear2.php.net/PEAR2_Text_Markdown": "*", "pear-pear2/PEAR2_HTTP_Request": "*" } } ``` In this case the short name of the channel is `pear2`, so the `PEAR2_HTTP_Request` package name becomes `pear-pear2/PEAR2_HTTP_Request`. > **Note:** The `pear` repository requires doing quite a few requests per > package, so this may considerably slow down the installation process. #### Custom vendor alias It is possible to alias PEAR channel packages with a custom vendor name. Example: Suppose you have a private PEAR repository and wish to use Composer to incorporate dependencies from a VCS. Your PEAR repository contains the following packages: * `BasePackage` * `IntermediatePackage`, which depends on `BasePackage` * `TopLevelPackage1` and `TopLevelPackage2` which both depend on `IntermediatePackage` Without a vendor alias, Composer will use the PEAR channel name as the vendor portion of the package name: * `pear-pear.foobar.repo/BasePackage` * `pear-pear.foobar.repo/IntermediatePackage` * `pear-pear.foobar.repo/TopLevelPackage1` * `pear-pear.foobar.repo/TopLevelPackage2` Suppose at a later time you wish to migrate your PEAR packages to a Composer repository and naming scheme, and adopt the vendor name of `foobar`. Projects using your PEAR packages would not see the updated packages, since they have a different vendor name (`foobar/IntermediatePackage` vs `pear-pear.foobar.repo/IntermediatePackage`). By specifying `vendor-alias` for the PEAR repository from the start, you can avoid this scenario and future-proof your package names. To illustrate, the following example would get the `BasePackage`, `TopLevelPackage1`, and `TopLevelPackage2` packages from your PEAR repository and `IntermediatePackage` from a Github repository: ```json { "repositories": [ { "type": "git", "url": "https://github.com/foobar/intermediate.git" }, { "type": "pear", "url": "http://pear.foobar.repo", "vendor-alias": "foobar" } ], "require": { "foobar/TopLevelPackage1": "*", "foobar/TopLevelPackage2": "*" } } ``` ### Package If you want to use a project that does not support Composer through any of the means above, you still can define the package yourself by using a `package` repository. Basically, you define the same information that is included in the `composer` repository's `packages.json`, but only for a single package. Again, the minimum required fields are `name`, `version`, and either of `dist` or `source`. Here is an example for the smarty template engine: ```json { "repositories": [ { "type": "package", "package": { "name": "smarty/smarty", "version": "3.1.7", "dist": { "url": "http://www.smarty.net/files/Smarty-3.1.7.zip", "type": "zip" }, "source": { "url": "http://smarty-php.googlecode.com/svn/", "type": "svn", "reference": "tags/Smarty_3_1_7/distribution/" }, "autoload": { "classmap": ["libs/"] } } } ], "require": { "smarty/smarty": "3.1.*" } } ``` Typically you would leave the source part off, as you don't really need it. > **Note**: This repository type has a few limitations and should be avoided > whenever possible: > > - Composer will not update the package unless you change the `version` field. > - Composer will not update the commit references, so if you use `master` as > reference you will have to delete the package to force an update, and will > have to deal with an unstable lock file. ## Hosting your own While you will probably want to put your packages on packagist most of the time, there are some use cases for hosting your own repository. * **Private company packages:** If you are part of a company that uses Composer for their packages internally, you might want to keep those packages private. * **Separate ecosystem:** If you have a project which has its own ecosystem, and the packages aren't really reusable by the greater PHP community, you might want to keep them separate to packagist. An example of this would be wordpress plugins. For hosting your own packages, a native `composer` type of repository is recommended, which provides the best performance. There are a few tools that can help you create a `composer` repository. ### Packagist The underlying application used by packagist is open source. This means that you can technically install your own copy of packagist. However it is not a supported use case and changes will happen without caring for third parties using the code. Packagist is a Symfony2 application, and it is [available on GitHub](https://github.com/composer/packagist). It uses Composer internally and acts as a proxy between VCS repositories and the Composer users. It holds a list of all VCS packages, periodically re-crawls them, and exposes them as a Composer repository. ### Toran Proxy [Toran Proxy](https://toranproxy.com/) is a web app much like Packagist but providing private package hosting as well as mirroring/proxying of GitHub and packagist.org. Check its homepage and the [Satis/Toran Proxy article](articles/handling-private-packages-with-satis.md) for more information. ### Satis Satis is a static `composer` repository generator. It is a bit like an ultra- lightweight, static file-based version of packagist. You give it a `composer.json` containing repositories, typically VCS and package repository definitions. It will fetch all the packages that are `require`d and dump a `packages.json` that is your `composer` repository. Check [the satis GitHub repository](https://github.com/composer/satis) and the [Satis article](articles/handling-private-packages-with-satis.md) for more information. ### Artifact There are some cases, when there is no ability to have one of the previously mentioned repository types online, even the VCS one. Typical example could be cross-organisation library exchange through built artifacts. Of course, most of the times they are private. To simplify maintenance, one can simply use a repository of type `artifact` with a folder containing ZIP archives of those private packages: ```json { "repositories": [ { "type": "artifact", "url": "path/to/directory/with/zips/" } ], "require": { "private-vendor-one/core": "15.6.2", "private-vendor-two/connectivity": "*", "acme-corp/parser": "10.3.5" } } ``` Each zip artifact is just a ZIP archive with `composer.json` in root folder: ```sh unzip -l acme-corp-parser-10.3.5.zip composer.json ... ``` If there are two archives with different versions of a package, they are both imported. When an archive with a newer version is added in the artifact folder and you run `update`, that version will be imported as well and Composer will update to the latest version. ### Path In addition to the artifact repository, you can use the path one, which allows you to depend on a relative directory. This can be especially useful when dealing with monolith repositories. For instance, if you have the following directory structure in your repository: ``` - apps \_ my-app \_ composer.json - packages \_ my-package \_ composer.json ``` Then, to add the package `my/package` as a dependency, in your `apps/my-app/composer.json` file, you can use the following configuration: ```json { "repositories": [ { "type": "path", "url": "../../packages/my-package" } ], "require": { "my/package": "*" } } ``` If the package is a local VCS repository, the version may be inferred by the branch or tag that is currently checked out. Otherwise, the version should be explicitly defined in the package's `composer.json` file. If the version cannot be resolved by these means, it is assumed to be `dev-master`. The local package will be symlinked if possible, in which case the output in the console will read `Symlinked from ../../packages/my-package`. If symlinking is _not_ possible the package will be copied. In that case, the console will output `Mirrored from ../../packages/my-package`. Instead of default fallback strategy you can force to use symlink with `"symlink": true` or mirroring with `"symlink": false` option. Forcing mirroring can be useful when deploying or generating package from a monolithic repository. ```json { "repositories": [ { "type": "path", "url": "../../packages/my-package", "options": { "symlink": false } } ] } ``` Instead of using a relative path, an absolute path can also be used. > **Note:** Repository paths can also contain wildcards like ``*`` and ``?``. > For details, see the [PHP glob function](http://php.net/glob). ## Disabling Packagist You can disable the default Packagist repository by adding this to your `composer.json`: ```json { "repositories": [ { "packagist": false } ] } ``` ← [Schema](04-schema.md) | [Config](06-config.md) → composer-1.0.0-beta2/doc/06-config.md000066400000000000000000000213111267577262200171270ustar00rootroot00000000000000# Config This chapter will describe the `config` section of the `composer.json` [schema](04-schema.md). ## process-timeout Defaults to `300`. The duration processes like git clones can run before Composer assumes they died out. You may need to make this higher if you have a slow connection or huge vendors. ## use-include-path Defaults to `false`. If `true`, the Composer autoloader will also look for classes in the PHP include path. ## preferred-install Defaults to `auto` and can be any of `source`, `dist` or `auto`. This option allows you to set the install method Composer will prefer to use. Can optionally be a hash of patterns for more granular install preferences. ```json { "config": { "preferred-install": { "my-organization/stable-package": "dist", "my-organization/*": "source", "partner-organization/*": "auto", "*": "dist" } } } ``` > **Note:** Order matters. More specific patterns should be earlier than > more relaxed patterns. When mixing the string notation with the hash > configuration in global and package configurations the string notation > is translated to a `*` package pattern. ## store-auths What to do after prompting for authentication, one of: `true` (always store), `false` (do not store) and `"prompt"` (ask every time), defaults to `"prompt"`. ## github-protocols Defaults to `["https", "ssh", "git"]`. A list of protocols to use when cloning from github.com, in priority order. By default `git` is present but only if [secure-http](#secure-http) is disabled, as the git protocol is not encrypted. If you want your origin remote push URLs to be using https and not ssh (`git@github.com:...`), then set the protocol list to be only `["https"]` and Composer will stop overwriting the push URL to an ssh URL. ## github-oauth A list of domain names and oauth keys. For example using `{"github.com": "oauthtoken"}` as the value of this option will use `oauthtoken` to access private repositories on github and to circumvent the low IP-based rate limiting of their API. [Read more](articles/troubleshooting.md#api-rate-limit-and-oauth-tokens) on how to get an OAuth token for GitHub. ## gitlab-oauth A list of domain names and oauth keys. For example using `{"gitlab.com": "oauthtoken"}` as the value of this option will use `oauthtoken` to access private repositories on gitlab. ## disable-tls Defaults to `false`. If set to true all HTTPS URLs will be tried with HTTP instead and no network level encryption is performed. Enabling this is a security risk and is NOT recommended. The better way is to enable the php_openssl extension in php.ini. ## secure-http Defaults to `true`. If set to true only HTTPS URLs are allowed to be downloaded via Composer. If you really absolutely need HTTP access to something then you can disable it, but using [Let's Encrypt](https://letsencrypt.org/) to get a free SSL certificate is generally a better alternative. ## cafile Location of Certificate Authority file on local filesystem. In PHP 5.6+ you should rather set this via openssl.cafile in php.ini, although PHP 5.6+ should be able to detect your system CA file automatically. ## capath If cafile is not specified or if the certificate is not found there, the directory pointed to by capath is searched for a suitable certificate. capath must be a correctly hashed certificate directory. ## http-basic A list of domain names and username/passwords to authenticate against them. For example using `{"example.org": {"username": "alice", "password": "foo"}` as the value of this option will let Composer authenticate against example.org. > **Note:** Authentication-related config options like `http-basic` and > `github-oauth` can also be specified inside a `auth.json` file that goes > besides your `composer.json`. That way you can gitignore it and every > developer can place their own credentials in there. ## platform Lets you fake platform packages (PHP and extensions) so that you can emulate a production env or define your target platform in the config. Example: `{"php": "5.4", "ext-something": "4.0"}`. ## vendor-dir Defaults to `vendor`. You can install dependencies into a different directory if you want to. `$HOME` and `~` will be replaced by your home directory's path in vendor-dir and all `*-dir` options below. ## bin-dir Defaults to `vendor/bin`. If a project includes binaries, they will be symlinked into this directory. ## data-dir Defaults to `C:\Users\\AppData\Roaming\Composer` on Windows, `$XDG_DATA_HOME/composer` on unix systems that follow the XDG Base Directory Specifications, and `$home` on other unix systems. Right now it is only used for storing past composer.phar files to be able to rollback to older versions. See also [COMPOSER_HOME](03-cli.md#composer-home). ## cache-dir Defaults to `C:\Users\\AppData\Local\Composer` on Windows, `$XDG_CACHE_HOME/composer` on unix systems that follow the XDG Base Directory Specifications, and `$home/cache` on other unix systems. Stores all the caches used by Composer. See also [COMPOSER_HOME](03-cli.md#composer-home). ## cache-files-dir Defaults to `$cache-dir/files`. Stores the zip archives of packages. ## cache-repo-dir Defaults to `$cache-dir/repo`. Stores repository metadata for the `composer` type and the VCS repos of type `svn`, `github` and `bitbucket`. ## cache-vcs-dir Defaults to `$cache-dir/vcs`. Stores VCS clones for loading VCS repository metadata for the `git`/`hg` types and to speed up installs. ## cache-files-ttl Defaults to `15552000` (6 months). Composer caches all dist (zip, tar, ..) packages that it downloads. Those are purged after six months of being unused by default. This option allows you to tweak this duration (in seconds) or disable it completely by setting it to 0. ## cache-files-maxsize Defaults to `300MiB`. Composer caches all dist (zip, tar, ..) packages that it downloads. When the garbage collection is periodically ran, this is the maximum size the cache will be able to use. Older (less used) files will be removed first until the cache fits. ## bin-compat Defaults to `auto`. Determines the compatibility of the binaries to be installed. If it is `auto` then Composer only installs .bat proxy files when on Windows. If set to `full` then both .bat files for Windows and scripts for Unix-based operating systems will be installed for each binary. This is mainly useful if you run Composer inside a linux VM but still want the .bat proxies available for use in the Windows host OS. ## prepend-autoloader Defaults to `true`. If `false`, the Composer autoloader will not be prepended to existing autoloaders. This is sometimes required to fix interoperability issues with other autoloaders. ## autoloader-suffix Defaults to `null`. String to be used as a suffix for the generated Composer autoloader. When null a random one will be generated. ## optimize-autoloader Defaults to `false`. If `true`, always optimize when dumping the autoloader. ## sort-packages Defaults to `false`. If `true`, the `require` command keeps packages sorted by name in `composer.json` when adding a new package. ## classmap-authoritative Defaults to `false`. If `true`, the Composer autoloader will only load classes from the classmap. Implies `optimize-autoloader`. ## github-domains Defaults to `["github.com"]`. A list of domains to use in github mode. This is used for GitHub Enterprise setups. ## github-expose-hostname Defaults to `true`. If `false`, the OAuth tokens created to access the github API will have a date instead of the machine hostname. ## gitlab-domains Defaults to `["gitlab.com"]`. A list of domains of GitLab servers. This is used if you use the `gitlab` repository type. ## notify-on-install Defaults to `true`. Composer allows repositories to define a notification URL, so that they get notified whenever a package from that repository is installed. This option allows you to disable that behaviour. ## discard-changes Defaults to `false` and can be any of `true`, `false` or `"stash"`. This option allows you to set the default style of handling dirty updates when in non-interactive mode. `true` will always discard changes in vendors, while `"stash"` will try to stash and reapply. Use this for CI servers or deploy scripts if you tend to have modified vendors. ## archive-format Defaults to `tar`. Composer allows you to add a default archive format when the workflow needs to create a dedicated archiving format. ## archive-dir Defaults to `.`. Composer allows you to add a default archive directory when the workflow needs to create a dedicated archiving format. Or for easier development between modules. Example: ```json { "config": { "archive-dir": "/home/user/.composer/repo" } } ``` ← [Repositories](05-repositories.md) | [Community](07-community.md) → composer-1.0.0-beta2/doc/07-community.md000066400000000000000000000024431267577262200177140ustar00rootroot00000000000000# Community There are many people using Composer already, and quite a few of them are contributing. ## Contributing If you would like to contribute to Composer, please read the [README](https://github.com/composer/composer) and [CONTRIBUTING](https://github.com//composer/composer/blob/master/CONTRIBUTING.md) documents. The most important guidelines are described as follows: > All code contributions - including those of people having commit access - must > go through a pull request and approved by a core developer before being > merged. This is to ensure proper review of all the code. > > Fork the project, create a feature branch, and send us a pull request. > > To ensure a consistent code base, you should make sure the code follows > the [PSR-2 Coding Standards](http://www.php-fig.org/psr/psr-2/). ## IRC / mailing list Mailing lists for [user support](https://groups.google.com/group/composer-users) and [development](https://groups.google.com/group/composer-dev). IRC channels are on irc.freenode.org: [#composer](irc://irc.freenode.org/composer) for users and [#composer-dev](irc://irc.freenode.org/composer-dev) for development. Stack Overflow has a growing collection of [Composer related questions](https://stackoverflow.com/questions/tagged/composer-php). ← [Config](06-config.md) composer-1.0.0-beta2/doc/articles/000077500000000000000000000000001267577262200167255ustar00rootroot00000000000000composer-1.0.0-beta2/doc/articles/aliases.md000066400000000000000000000073771267577262200207060ustar00rootroot00000000000000 # Aliases ## Why aliases? When you are using a VCS repository, you will only get comparable versions for branches that look like versions, such as `2.0` or `2.0.x`. For your `master` branch, you will get a `dev-master` version. For your `bugfix` branch, you will get a `dev-bugfix` version. If your `master` branch is used to tag releases of the `1.0` development line, i.e. `1.0.1`, `1.0.2`, `1.0.3`, etc., any package depending on it will probably require version `1.0.*`. If anyone wants to require the latest `dev-master`, they have a problem: Other packages may require `1.0.*`, so requiring that dev version will lead to conflicts, since `dev-master` does not match the `1.0.*` constraint. Enter aliases. ## Branch alias The `dev-master` branch is one in your main VCS repo. It is rather common that someone will want the latest master dev version. Thus, Composer allows you to alias your `dev-master` branch to a `1.0.x-dev` version. It is done by specifying a `branch-alias` field under `extra` in `composer.json`: ```json { "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } } } ``` If you alias a non-comparable version (such as dev-develop) `dev-` must prefix the branch name. You may also alias a comparable version (i.e. start with numbers, and end with `.x-dev`), but only as a more specific version. For example, 1.x-dev could be aliased as 1.2.x-dev. The alias must be a comparable dev version, and the `branch-alias` must be present on the branch that it references. For `dev-master`, you need to commit it on the `master` branch. As a result, anyone can now require `1.0.*` and it will happily install `dev-master`. In order to use branch aliasing, you must own the repository of the package being aliased. If you want to alias a third party package without maintaining a fork of it, use inline aliases as described below. ## Require inline alias Branch aliases are great for aliasing main development lines. But in order to use them you need to have control over the source repository, and you need to commit changes to version control. This is not really fun when you just want to try a bugfix of some library that is a dependency of your local project. For this reason, you can alias packages in your `require` and `require-dev` fields. Let's say you found a bug in the `monolog/monolog` package. You cloned [Monolog](https://github.com/Seldaek/monolog) on GitHub and fixed the issue in a branch named `bugfix`. Now you want to install that version of monolog in your local project. You are using `symfony/monolog-bundle` which requires `monolog/monolog` version `1.*`. So you need your `dev-bugfix` to match that constraint. Just add this to your project's root `composer.json`: ```json { "repositories": [ { "type": "vcs", "url": "https://github.com/you/monolog" } ], "require": { "symfony/monolog-bundle": "2.0", "monolog/monolog": "dev-bugfix as 1.0.x-dev" } } ``` That will fetch the `dev-bugfix` version of `monolog/monolog` from your GitHub and alias it to `1.0.x-dev`. > **Note:** If a package with inline aliases is required, the alias (right of > the `as`) is used as the version constraint. The part left of the `as` is > discarded. As a consequence, if A requires B and B requires `monolog/monolog` > version `dev-bugfix as 1.0.x-dev`, installing A will make B require > `1.0.x-dev`, which may exist as a branch alias or an actual `1.0` branch. If > it does not, it must be re-inline-aliased in A's `composer.json`. > **Note:** Inline aliasing should be avoided, especially for published > packages. If you found a bug, try and get your fix merged upstream. This > helps to avoid issues for users of your package. composer-1.0.0-beta2/doc/articles/custom-installers.md000066400000000000000000000146471267577262200227530ustar00rootroot00000000000000 # Setting up and using custom installers ## Synopsis At times it may be necessary for a package to require additional actions during installation, such as installing packages outside of the default `vendor` library. In these cases you could consider creating a Custom Installer to handle your specific logic. ## Calling a Custom Installer Suppose that your project already has a Custom Installer for specific modules then invoking that installer is a matter of defining the correct [type][1] in your package file. > _See the next chapter for an instruction how to create Custom Installers._ Every Custom Installer defines which [type][1] string it will recognize. Once recognized it will completely override the default installer and only apply its own logic. An example use-case would be: > phpDocumentor features Templates that need to be installed outside of the > default /vendor folder structure. As such they have chosen to adopt the > `phpdocumentor-template` [type][1] and create a plugin providing the Custom > Installer to send these templates to the correct folder. An example composer.json of such a template package would be: ```json { "name": "phpdocumentor/template-responsive", "type": "phpdocumentor-template", "require": { "phpdocumentor/template-installer-plugin": "*" } } ``` > **IMPORTANT**: to make sure that the template installer is present at the > time the template package is installed, template packages should require > the plugin package. ## Creating an Installer A Custom Installer is defined as a class that implements the [`Composer\Installer\InstallerInterface`][4] and is usually distributed in a Composer Plugin. A basic Installer Plugin would thus compose of three files: 1. the package file: composer.json 2. The Plugin class, e.g.: `My\Project\Composer\Plugin.php`, containing a class that implements `Composer\Plugin\PluginInterface`. 3. The Installer class, e.g.: `My\Project\Composer\Installer.php`, containing a class that implements `Composer\Installer\InstallerInterface`. ### composer.json The package file is the same as any other package file but with the following requirements: 1. the [type][1] attribute must be `composer-plugin`. 2. the [extra][2] attribute must contain an element `class` defining the class name of the plugin (including namespace). If a package contains multiple plugins this can be array of class names. Example: ```json { "name": "phpdocumentor/template-installer-plugin", "type": "composer-plugin", "license": "MIT", "autoload": { "psr-0": {"phpDocumentor\\Composer": "src/"} }, "extra": { "class": "phpDocumentor\\Composer\\TemplateInstallerPlugin" }, "require": { "composer-plugin-api": "^1.0" } } ``` ### The Plugin class The class defining the Composer plugin must implement the [`Composer\Plugin\PluginInterface`][3]. It can then register the Custom Installer in its `activate()` method. The class may be placed in any location and have any name, as long as it is autoloadable and matches the `extra.class` element in the package definition. Example: ```php getInstallationManager()->addInstaller($installer); } } ``` ### The Custom Installer class The class that executes the custom installation should implement the [`Composer\Installer\InstallerInterface`][4] (or extend another installer that implements that interface). It defines the [type][1] string as it will be recognized by packages that will use this installer in the `supports()` method. > **NOTE**: _choose your [type][1] name carefully, it is recommended to follow > the format: `vendor-type`_. For example: `phpdocumentor-template`. The InstallerInterface class defines the following methods (please see the source for the exact signature): * **supports()**, here you test whether the passed [type][1] matches the name that you declared for this installer (see the example). * **isInstalled()**, determines whether a supported package is installed or not. * **install()**, here you can determine the actions that need to be executed upon installation. * **update()**, here you define the behavior that is required when Composer is invoked with the update argument. * **uninstall()**, here you can determine the actions that need to be executed when the package needs to be removed. * **getInstallPath()**, this method should return the location where the package is to be installed, _relative from the location of composer.json._ Example: ```php getPrettyName(), 0, 23); if ('phpdocumentor/template-' !== $prefix) { throw new \InvalidArgumentException( 'Unable to install template, phpdocumentor templates ' .'should always start their package name with ' .'"phpdocumentor/template-"' ); } return 'data/templates/'.substr($package->getPrettyName(), 23); } /** * {@inheritDoc} */ public function supports($packageType) { return 'phpdocumentor-template' === $packageType; } } ``` The example demonstrates that it is quite simple to extend the [`Composer\Installer\LibraryInstaller`][5] class to strip a prefix (`phpdocumentor/template-`) and use the remaining part to assemble a completely different installation path. > _Instead of being installed in `/vendor` any package installed using this > Installer will be put in the `/data/templates/` folder._ [1]: ../04-schema.md#type [2]: ../04-schema.md#extra [3]: https://github.com/composer/composer/blob/master/src/Composer/Plugin/PluginInterface.php [4]: https://github.com/composer/composer/blob/master/src/Composer/Installer/InstallerInterface.php [5]: https://github.com/composer/composer/blob/master/src/Composer/Installer/LibraryInstaller.php composer-1.0.0-beta2/doc/articles/handling-private-packages-with-satis.md000066400000000000000000000277611267577262200263660ustar00rootroot00000000000000 # Handling private packages with Satis or Toran Proxy # Toran Proxy [Toran Proxy](https://toranproxy.com/) is a commercial alternative to Satis offering professional support as well as a web UI to manage everything and a better integration with Composer. It also provides proxying/mirroring for git repos and package zip files which makes installs faster and independent from third party systems. Toran's revenue is also used to pay for Composer and Packagist development and hosting so using it is a good way to support open source financially. You can find more information about how to set it up and use it on the [Toran Proxy](https://toranproxy.com/) website. # Satis Satis on the other hand is open source but only a static `composer` repository generator. It is a bit like an ultra-lightweight, static file-based version of packagist and can be used to host the metadata of your company's private packages, or your own. You can get it from [GitHub](https://github.com/composer/satis) or install via CLI: `php composer.phar create-project composer/satis --stability=dev --keep-vcs`. ## Setup For example let's assume you have a few packages you want to reuse across your company but don't really want to open-source. You would first define a Satis configuration: a json file with an arbitrary name that lists your curated [repositories](../05-repositories.md). Here is an example configuration, you see that it holds a few VCS repositories, but those could be any types of [repositories](../05-repositories.md). Then it uses `"require-all": true` which selects all versions of all packages in the repositories you defined. The default file Satis looks for is `satis.json` in the root of the repository. ```json { "name": "My Repository", "homepage": "http://packages.example.org", "repositories": [ { "type": "vcs", "url": "https://github.com/mycompany/privaterepo" }, { "type": "vcs", "url": "http://svn.example.org/private/repo" }, { "type": "vcs", "url": "https://github.com/mycompany/privaterepo2" } ], "require-all": true } ``` If you want to cherry pick which packages you want, you can list all the packages you want to have in your satis repository inside the classic composer `require` key, using a `"*"` constraint to make sure all versions are selected, or another constraint if you want really specific versions. ```json { "repositories": [ { "type": "vcs", "url": "https://github.com/mycompany/privaterepo" }, { "type": "vcs", "url": "http://svn.example.org/private/repo" }, { "type": "vcs", "url": "https://github.com/mycompany/privaterepo2" } ], "require": { "company/package": "*", "company/package2": "*", "company/package3": "2.0.0" } } ``` Once you've done this, you just run `php bin/satis build `. For example `php bin/satis build satis.json web/` would read the `satis.json` file and build a static repository inside the `web/` directory. When you ironed out that process, what you would typically do is run this command as a cron job on a server. It would then update all your package info much like Packagist does. Note that if your private packages are hosted on GitHub, your server should have an ssh key that gives it access to those packages, and then you should add the `--no-interaction` (or `-n`) flag to the command to make sure it falls back to ssh key authentication instead of prompting for a password. This is also a good trick for continuous integration servers. Set up a virtual-host that points to that `web/` directory, let's say it is `packages.example.org`. Alternatively, with PHP >= 5.4.0, you can use the built-in CLI server `php -S localhost:port -t satis-output-dir/` for a temporary solution. ### Partial Updates You can tell Satis to selectively update only particular packages or process only a repository with a given URL. This cuts down the time it takes to rebuild the `package.json` file and is helpful if you use (custom) webhooks to trigger rebuilds whenever code is pushed into one of your repositories. To rebuild only particular packages, pass the package names on the command line like so: ``` php bin/satis build satis.json web/ this/package that/other-package ``` Note that this will still need to pull and scan all of your VCS repositories because any VCS repository might contain (on any branch) one of the selected packages. If you want to scan only a single repository and update all packages found in it, pass the VCS repository URL as an optional argument: ``` php bin/satis build --repository-url https://only.my/repo.git satis.json web/ ``` ## Usage In your projects all you need to add now is your own composer repository using the `packages.example.org` as URL, then you can require your private packages and everything should work smoothly. You don't need to copy all your repositories in every project anymore. Only that one unique repository that will update itself. ```json { "repositories": [ { "type": "composer", "url": "http://packages.example.org/" } ], "require": { "company/package": "1.2.0", "company/package2": "1.5.2", "company/package3": "dev-master" } } ``` ### Security To secure your private repository you can host it over SSH or SSL using a client certificate. In your project you can use the `options` parameter to specify the connection options for the server. Example using a custom repository using SSH (requires the SSH2 PECL extension): ```json { "repositories": [ { "type": "composer", "url": "ssh2.sftp://example.org", "options": { "ssh2": { "username": "composer", "pubkey_file": "/home/composer/.ssh/id_rsa.pub", "privkey_file": "/home/composer/.ssh/id_rsa" } } } ] } ``` > **Tip:** See [ssh2 context options](https://www.php.net/manual/en/wrappers.ssh2.php#refsect1-wrappers.ssh2-options) for more information. Example using HTTP over SSL using a client certificate: ```json { "repositories": [ { "type": "composer", "url": "https://example.org", "options": { "ssl": { "local_cert": "/home/composer/.ssl/composer.pem" } } } ] } ``` > **Tip:** See [ssl context options](https://www.php.net/manual/en/context.ssl.php) for more information. Example using a custom HTTP Header field for token authentication: ```json { "repositories": [ { "type": "composer", "url": "https://example.org", "options": { "http": { "header": [ "API-TOKEN: YOUR-API-TOKEN" ] } } } ] } ``` ### Authentication When your private repositories are password protected, you can store the authentication details permanently. The first time Composer needs to authenticate against some domain it will prompt you for a username/password and then you will be asked whether you want to store it. The storage can be done either globally in the `COMPOSER_HOME/auth.json` file (`COMPOSER_HOME` defaults to `~/.composer` or `%APPDATA%/Composer` on Windows) or also in the project directory directly sitting besides your composer.json. You can also configure these by hand using the config command if you need to configure a production machine to be able to run non-interactive installs. For example to enter credentials for example.org one could type: composer config http-basic.example.org username password That will store it in the current directory's auth.json, but if you want it available globally you can use the `--global` (`-g`) flag. ### Downloads When GitHub or BitBucket repositories are mirrored on your local satis, the build process will include the location of the downloads these platforms make available. This means that the repository and your setup depend on the availability of these services. At the same time, this implies that all code which is hosted somewhere else (on another service or for example in Subversion) will not have downloads available and thus installations usually take a lot longer. To enable your satis installation to create downloads for all (Git, Mercurial and Subversion) your packages, add the following to your `satis.json`: ```json { "archive": { "directory": "dist", "format": "tar", "prefix-url": "https://amazing.cdn.example.org", "skip-dev": true } } ``` #### Options explained * `directory`: required, the location of the dist files (inside the `output-dir`) * `format`: optional, `zip` (default) or `tar` * `prefix-url`: optional, location of the downloads, homepage (from `satis.json`) followed by `directory` by default * `skip-dev`: optional, `false` by default, when enabled (`true`) satis will not create downloads for branches * `absolute-directory`: optional, a _local_ directory where the dist files are dumped instead of `output-dir`/`directory` * `whitelist`: optional, if set as a list of package names, satis will only dump the dist files of these packages * `blacklist`: optional, if set as a list of package names, satis will not dump the dist files of these packages * `checksum`: optional, `true` by default, when disabled (`false`) satis will not provide the sha1 checksum for the dist files Once enabled, all downloads (include those from GitHub and BitBucket) will be replaced with a _local_ version. #### prefix-url Prefixing the URL with another host is especially helpful if the downloads end up in a private Amazon S3 bucket or on a CDN host. A CDN would drastically improve download times and therefore package installation. Example: A `prefix-url` of `https://my-bucket.s3.amazonaws.com` (and `directory` set to `dist`) creates download URLs which look like the following: `https://my-bucket.s3.amazonaws.com/dist/vendor-package-version-ref.zip`. ### Web outputs * `output-html`: optional, `true` by default, when disabled (`false`) satis will not generate the `output-dir`/index.html page. * `twig-template`: optional, a path to a personalized [Twig](http://twig.sensiolabs.org/) template for the `output-dir`/index.html page. ### Abandoned packages To enable your satis installation to indicate that some packages are abandoned, add the following to your `satis.json`: ```json { "abandoned": { "company/package": true, "company/package2": "company/newpackage" } } ``` The `true` value indicates that the package is truly abandoned while the `"company/newpackage"` value specifies that the package is replaced by the `company/newpackage` package. Note that all packages set as abandoned in their own `composer.json` file will be marked abandoned as well. ### Resolving dependencies It is possible to make satis automatically resolve and add all dependencies for your projects. This can be used with the Downloads functionality to have a complete local mirror of packages. Just add the following to your `satis.json`: ```json { "require-dependencies": true, "require-dev-dependencies": true } ``` When searching for packages, satis will attempt to resolve all the required packages from the listed repositories. Therefore, if you are requiring a package from Packagist, you will need to define it in your `satis.json`. Dev dependencies are packaged only if the `require-dev-dependencies` parameter is set to true. ### Other options * `output-dir`: optional, defines where to output the repository files if not provided as an argument when calling the `build` command. * `config`: optional, lets you define all config options from composer, except `archive-format` and `archive-dir` as the configuration is done through [archive](#downloads) instead. See (http://getcomposer.org/doc/04-schema.md#config) * `notify-batch`: optional, specify a URL that will be called every time a user installs a package. See (https://getcomposer.org/doc/05-repositories.md#notify-batch) composer-1.0.0-beta2/doc/articles/http-basic-authentication.md000066400000000000000000000035231267577262200243250ustar00rootroot00000000000000 # HTTP basic authentication Your [Satis or Toran Proxy](handling-private-packages-with-satis.md) server could be secured with http basic authentication. In order to allow your project to have access to these packages you will have to tell composer how to authenticate with your credentials. The simplest way to provide your credentials is providing your set of credentials inline with the repository specification such as: ```json { "repositories": [ { "type": "composer", "url": "https://extremely:secret@repo.example.org" } ] } ``` This will basically teach composer how to authenticate automatically when reading packages from the provided composer repository. This does not work for everybody especially when you don't want to hard code your credentials into your composer.json. There is a second way to provide these details and it is via interaction. If you don't provide the authentication credentials composer will prompt you upon connection to enter the username and password. The third way if you want to pre-configure it is via an `auth.json` file located in your `COMPOSER_HOME` or besides your `composer.json`. The file should contain a set of hostnames followed each with their own username/password pairs, for example: ```json { "http-basic": { "repo.example1.org": { "username": "my-username1", "password": "my-secret-password1" }, "repo.example2.org": { "username": "my-username2", "password": "my-secret-password2" } } } ``` The main advantage of the auth.json file is that it can be gitignored so that every developer in your team can place their own credentials in there, which makes revocation of credentials much easier than if you all share the same. composer-1.0.0-beta2/doc/articles/plugins.md000066400000000000000000000143561267577262200207410ustar00rootroot00000000000000 # Setting up and using plugins ## Synopsis You may wish to alter or expand Composer's functionality with your own. For example if your environment poses special requirements on the behaviour of Composer which do not apply to the majority of its users or if you wish to accomplish something with composer in a way that is not desired by most users. In these cases you could consider creating a plugin to handle your specific logic. ## Creating a Plugin A plugin is a regular Composer package which ships its code as part of the package and may also depend on further packages. ### Plugin Package The package file is the same as any other package file but with the following requirements: 1. The [type][1] attribute must be `composer-plugin`. 2. The [extra][2] attribute must contain an element `class` defining the class name of the plugin (including namespace). If a package contains multiple plugins, this can be array of class names. 3. You must require the special package called `composer-plugin-api` to define which Plugin API versions your plugin is compatible with. The required version of the `composer-plugin-api` follows the same [rules][7] as a normal package's. The current composer plugin API version is 1.0.0. An example of a valid plugin `composer.json` file (with the autoloading part omitted): ```json { "name": "my/plugin-package", "type": "composer-plugin", "require": { "composer-plugin-api": "^1.0" }, "extra": { "class": "My\\Plugin" } } ``` ### Plugin Class Every plugin has to supply a class which implements the [`Composer\Plugin\PluginInterface`][3]. The `activate()` method of the plugin is called after the plugin is loaded and receives an instance of [`Composer\Composer`][4] as well as an instance of [`Composer\IO\IOInterface`][5]. Using these two objects all configuration can be read and all internal objects and state can be manipulated as desired. Example: ```php getInstallationManager()->addInstaller($installer); } } ``` ## Event Handler Furthermore plugins may implement the [`Composer\EventDispatcher\EventSubscriberInterface`][6] in order to have its event handlers automatically registered with the `EventDispatcher` when the plugin is loaded. To register a method to an event, implement the method `getSubscribedEvents()` and have it return an array. The array key must be the [event name](https://getcomposer.org/doc/articles/scripts.md#event-names) and the value is the name of the method in this class to be called. ```php public static function getSubscribedEvents() { return array( 'post-autoload-dump' => 'methodToBeCalled', // ^ event name ^ ^ method name ^ ); } ``` By default, the priority of an event handler is set to 0. The priorty can be changed by attaching a tuple where the first value is the method name, as before, and the second value is an integer representing the priority. Higher integers represent higher priorities. Priortity 2 is called before priority 1, etc. ```php public static function getSubscribedEvents() { return array( // Will be called before events with priority 0 'post-autoload-dump' => array('methodToBeCalled', 1) ); } ``` If multiple methods should be called, then an array of tuples can be attached to each event. The tuples do not need to include the priority. If it is omitted, it will default to 0. ```php public static function getSubscribedEvents() { return array( 'post-autoload-dump' => array( array('methodToBeCalled' ), // Priority defaults to 0 array('someOtherMethodName', 1), // This fires first ) ); } ``` Here's a complete example: ```php composer = $composer; $this->io = $io; } public static function getSubscribedEvents() { return array( PluginEvents::PRE_FILE_DOWNLOAD => array( array('onPreFileDownload', 0) ), ); } public function onPreFileDownload(PreFileDownloadEvent $event) { $protocol = parse_url($event->getProcessedUrl(), PHP_URL_SCHEME); if ($protocol === 's3') { $awsClient = new AwsClient($this->io, $this->composer->getConfig()); $s3RemoteFilesystem = new S3RemoteFilesystem($this->io, $event->getRemoteFilesystem()->getOptions(), $awsClient); $event->setRemoteFilesystem($s3RemoteFilesystem); } } } ``` ## Using Plugins Plugin packages are automatically loaded as soon as they are installed and will be loaded when composer starts up if they are found in the current project's list of installed packages. Additionally all plugin packages installed in the `COMPOSER_HOME` directory using the composer global command are loaded before local project plugins are loaded. > You may pass the `--no-plugins` option to composer commands to disable all > installed plugins. This may be particularly helpful if any of the plugins > causes errors and you wish to update or uninstall it. [1]: ../04-schema.md#type [2]: ../04-schema.md#extra [3]: https://github.com/composer/composer/blob/master/src/Composer/Plugin/PluginInterface.php [4]: https://github.com/composer/composer/blob/master/src/Composer/Composer.php [5]: https://github.com/composer/composer/blob/master/src/Composer/IO/IOInterface.php [6]: https://github.com/composer/composer/blob/master/src/Composer/EventDispatcher/EventSubscriberInterface.php [7]: ../01-basic-usage.md#package-versions composer-1.0.0-beta2/doc/articles/scripts.md000066400000000000000000000177331267577262200207510ustar00rootroot00000000000000 # Scripts ## What is a script? A script, in Composer's terms, can either be a PHP callback (defined as a static method) or any command-line executable command. Scripts are useful for executing a package's custom code or package-specific commands during the Composer execution process. > **Note:** Only scripts defined in the root package's `composer.json` are > executed. If a dependency of the root package specifies its own scripts, > Composer does not execute those additional scripts. ## Event names Composer fires the following named events during its execution process: ### Command Events - **pre-install-cmd**: occurs before the `install` command is executed with a lock file present. - **post-install-cmd**: occurs after the `install` command has been executed with a lock file present. - **pre-update-cmd**: occurs before the `update` command is executed, or before the `install` command is executed without a lock file present. - **post-update-cmd**: occurs after the `update` command has been executed, or after the `install` command has been executed without a lock file present. - **post-status-cmd**: occurs after the `status` command has been executed. - **pre-archive-cmd**: occurs before the `archive` command is executed. - **post-archive-cmd**: occurs after the `archive` command has been executed. - **pre-autoload-dump**: occurs before the autoloader is dumped, either during `install`/`update`, or via the `dump-autoload` command. - **post-autoload-dump**: occurs after the autoloader has been dumped, either during `install`/`update`, or via the `dump-autoload` command. - **post-root-package-install**: occurs after the root package has been installed, during the `create-project` command. - **post-create-project-cmd**: occurs after the `create-project` command has been executed. ### Installer Events - **pre-dependencies-solving**: occurs before the dependencies are resolved. - **post-dependencies-solving**: occurs after the dependencies have been resolved. ### Package Events - **pre-package-install**: occurs before a package is installed. - **post-package-install**: occurs after a package has been installed. - **pre-package-update**: occurs before a package is updated. - **post-package-update**: occurs after a package has been updated. - **pre-package-uninstall**: occurs before a package is uninstalled. - **post-package-uninstall**: occurs after a package has been uninstalled. ### Plugin Events - **command**: occurs before any Composer Command is executed on the CLI. It provides you with access to the input and output objects of the program. - **pre-file-download**: occurs before files are downloaded and allows you to manipulate the `RemoteFilesystem` object prior to downloading files based on the URL to be downloaded. > **Note:** Composer makes no assumptions about the state of your dependencies > prior to `install` or `update`. Therefore, you should not specify scripts > that require Composer-managed dependencies in the `pre-update-cmd` or > `pre-install-cmd` event hooks. If you need to execute scripts prior to > `install` or `update` please make sure they are self-contained within your > root package. ## Defining scripts The root JSON object in `composer.json` should have a property called `"scripts"`, which contains pairs of named events and each event's corresponding scripts. An event's scripts can be defined as either as a string (only for a single script) or an array (for single or multiple scripts.) For any given event: - Scripts execute in the order defined when their corresponding event is fired. - An array of scripts wired to a single event can contain both PHP callbacks and command-line executable commands. - PHP classes containing defined callbacks must be autoloadable via Composer's autoload functionality. - Callbacks can only autoload classes from psr-0, psr-4 and classmap definitions. If a defined callback relies on functions defined outside of a class, the callback itself is responsible for loading the file containing these functions. Script definition example: ```json { "scripts": { "post-update-cmd": "MyVendor\\MyClass::postUpdate", "post-package-install": [ "MyVendor\\MyClass::postPackageInstall" ], "post-install-cmd": [ "MyVendor\\MyClass::warmCache", "phpunit -c app/" ], "post-autoload-dump": [ "MyVendor\\MyClass::postAutoloadDump" ], "post-create-project-cmd": [ "php -r \"copy('config/local-example.php', 'config/local.php');\"" ] } } ``` Using the previous definition example, here's the class `MyVendor\MyClass` that might be used to execute the PHP callbacks: ```php getComposer(); // do stuff } public static function postAutoloadDump(Event $event) { $vendorDir = $event->getComposer()->getConfig()->get('vendor-dir'); require $vendorDir . '/autoload.php'; some_function_from_an_autoloaded_file(); } public static function postPackageInstall(PackageEvent $event) { $installedPackage = $event->getOperation()->getPackage(); // do stuff } public static function warmCache(Event $event) { // make cache toasty } } ``` When an event is fired, your PHP callback receives as first argument an `Composer\EventDispatcher\Event` object. This object has a `getName()` method that lets you retrieve event name. Depending on the script types (see list above) you will get various event subclasses containing various getters with relevant data and associated objects: - Base class: [`Composer\EventDispatcher\Event`](https://getcomposer.org/apidoc/master/Composer/EventDispatcher/Event.html) - Command Events: [`Composer\Script\Event`](https://getcomposer.org/apidoc/master/Composer/Script/Event.html) - Installer Events: [`Composer\Installer\InstallerEvent`](https://getcomposer.org/apidoc/master/Composer/Installer/InstallerEvent.html) - Package Events: [`Composer\Installer\PackageEvent`](https://getcomposer.org/apidoc/master/Composer/Installer/PackageEvent.html) - Plugin Events: - command: [`Composer\Plugin\CommandEvent`](https://getcomposer.org/apidoc/master/Composer/Plugin/CommandEvent.html) - pre-file-download: [`Composer\Plugin\PreFileDownloadEvent`](https://getcomposer.org/apidoc/master/Composer/Plugin/PreFileDownloadEvent.html) ## Running scripts manually If you would like to run the scripts for an event manually, the syntax is: ```sh composer run-script [--dev] [--no-dev] script ``` For example `composer run-script post-install-cmd` will run any **post-install-cmd** scripts that have been defined. You can also give additional arguments to the script handler by appending `--` followed by the handler arguments. e.g. `composer run-script post-install-cmd -- --check` will pass`--check` along to the script handler. Those arguments are received as CLI arg by CLI handlers, and can be retrieved as an array via `$event->getArguments()` by PHP handlers. ## Writing custom commands If you add custom scripts that do not fit one of the predefined event name above, you can either run them with run-script or also run them as native Composer commands. For example the handler defined below is executable by simply running `composer test`: ```json { "scripts": { "test": "phpunit" } } ``` > **Note:** Composer's bin-dir is pushed on top of the PATH so that binaries > of dependencies are easily accessible as CLI commands when writing scripts. ## Referencing scripts To enable script re-use and avoid duplicates, you can call a script from another one by prefixing the command name with `@`: ```json { "scripts": { "test": [ "@clearCache", "phpunit" ], "clearCache": "rm -rf cache/*" } } ``` composer-1.0.0-beta2/doc/articles/troubleshooting.md000066400000000000000000000331701267577262200225020ustar00rootroot00000000000000 # Troubleshooting This is a list of common pitfalls on using Composer, and how to avoid them. ## General 1. Before asking anyone, run [`composer diagnose`](../03-cli.md#diagnose) to check for common problems. If it all checks out, proceed to the next steps. 2. When facing any kind of problems using Composer, be sure to **work with the latest version**. See [self-update](../03-cli.md#self-update) for details. 3. Make sure you have no problems with your setup by running the installer's checks via `curl -sS https://getcomposer.org/installer | php -- --check`. 4. Ensure you're **installing vendors straight from your `composer.json`** via `rm -rf vendor && composer update -v` when troubleshooting, excluding any possible interferences with existing vendor installations or `composer.lock` entries. 5. Try clearing Composer's cache by running `composer clear-cache`. ## Package not found 1. Double-check you **don't have typos** in your `composer.json` or repository branches and tag names. 2. Be sure to **set the right [minimum-stability](../04-schema.md#minimum-stability)**. To get started or be sure this is no issue, set `minimum-stability` to "dev". 3. Packages **not coming from [Packagist](https://packagist.org/)** should always be **defined in the root package** (the package depending on all vendors). 4. Use the **same vendor and package name** throughout all branches and tags of your repository, especially when maintaining a third party fork and using `replace`. 5. If you are updating to a recently published version of a package, be aware that Packagist has a delay of up to 1 minute before new packages are visible to Composer. 6. If you are updating a single package, it may depend on newer versions itself. In this case add the `--with-dependencies` argument **or** add all dependencies which need an update to the command. ## Package not found on travis-ci.org 1. Check the ["Package not found"](#package-not-found) item above. 2. If the package tested is a dependency of one of its dependencies (cyclic dependency), the problem might be that Composer is not able to detect the version of the package properly. If it is a git clone it is generally alright and Composer will detect the version of the current branch, but travis does shallow clones so that process can fail when testing pull requests and feature branches in general. The best solution is to define the version you are on via an environment variable called COMPOSER_ROOT_VERSION. You set it to `dev-master` for example to define the root package's version as `dev-master`. Use: `before_script: COMPOSER_ROOT_VERSION=dev-master composer install` to export the variable for the call to composer. ## Package not found in a Jenkins-build 1. Check the ["Package not found"](#package-not-found) item above. 2. Reason for failing is similar to the problem which can occur on travis-ci.org: The git-clone / checkout within Jenkins leaves the branch in a "detached HEAD"-state. As a result, Composer is not able to identify the version of the current checked out branch and may not be able to resolve a cyclic dependency. To solve this problem, you can use the "Additional Behaviours" -> "Check out to specific local branch" in your Git-settings for your Jenkins-job, where your "local branch" shall be the same branch as you are checking out. Using this, the checkout will not be in detached state any more and cyclic dependency is recognized correctly. ## I have a dependency which contains a "repositories" definition in its composer.json, but it seems to be ignored. The [`repositories`](../04-schema.md#repositories) configuration property is defined as [root-only] (../04-schema.md#root-package). It is not inherited. You can read more about the reasons behind this in the "[why can't composer load repositories recursively?](../faqs/why-can't-composer-load-repositories-recursively.md)" article. The simplest work-around to this limitation, is moving or duplicating the `repositories` definition into your root composer.json. ## I have locked a dependency to a specific commit but get unexpected results. While Composer supports locking dependencies to a specific commit using the `#commit-ref` syntax, there are certain caveats that one should take into account. The most important one is [documented](../04-schema.md#package-links), but frequently overlooked: > **Note:** While this is convenient at times, it should not be how you use > packages in the long term because it comes with a technical limitation. The > composer.json metadata will still be read from the branch name you specify > before the hash. Because of that in some cases it will not be a practical > workaround, and you should always try to switch to tagged releases as soon > as you can. There is no simple work-around to this limitation. It is therefore strongly recommended that you do not use it. ## Need to override a package version Let's say your project depends on package A, which in turn depends on a specific version of package B (say 0.1). But you need a different version of said package B (say 0.11). You can fix this by aliasing version 0.11 to 0.1: composer.json: ```json { "require": { "A": "0.2", "B": "0.11 as 0.1" } } ``` See [aliases](aliases.md) for more information. ## Memory limit errors If composer shows memory errors on some commands: `PHP Fatal error: Allowed memory size of XXXXXX bytes exhausted <...>` Check first that XDebug is not loaded in your `php.ini` by running `composer diagnose`. If XDebug is loaded, you should disable it by commenting the line `zend_extension=path/to/xdebug` in your `php.ini`. Don't forget to enable XDebug again after using Composer, if you need it. If composer still raises the error, the PHP `memory_limit` should be increased. > **Note:** Composer internally increases the `memory_limit` to `1G`. To get the current `memory_limit` value, run: ```sh php -r "echo ini_get('memory_limit').PHP_EOL;" ``` Try increasing the limit in your `php.ini` file (ex. `/etc/php5/cli/php.ini` for Debian-like systems): ```ini ; Use -1 for unlimited or define an explicit value like 2G memory_limit = -1 ``` Or, you can increase the limit with a command-line argument: ```sh php -d memory_limit=-1 composer.phar <...> ``` ## Xdebug impact on Composer Running Composer console commands while the php extension "xdebug" is loaded reduces speed considerably. This is even the case when all "xdebug" related features are disabled per php.ini flags, but the php extension itself is loaded into the PHP engine. Compared to a cli command run with "xdebug" enabled a speed improvement by a factor of up to 3 is not uncommon. > **Note:** This is a general issue when running PHP with "xdebug" enabled. You shouldn't > load the extension in production like environments per se. Disable "xdebug" in your `php.ini` (ex. `/etc/php5/cli/php.ini` for Debian-like systems) by locating the related `zend_extension` directive and prepending it with `;` (semicolon): ```sh ;zend_extension = "/path/to/my/xdebug.so" ``` If you disable this extension and still want it to be added on `php` cli command, you can deal with aliases on *nix systems: ```sh # Load xdebug Zend extension with php command alias php='php -dzend_extension=xdebug.so' # PHPUnit needs xdebug for coverage. In this case, just make an alias with php command prefix. alias phpunit='php $(which phpunit)' ``` With that, all php binaries called directly **will not** have xdebug enabled but you will still have it by prefixing them with php command. Example: ```sh # Will NOT have xdebug enabled composer update # Will have xdebug enabled by alias php /usr/local/bin/composer update ``` As a workaround in bash (and other shells) you can create a function which is named `composer`, which disables xdebug before it executes composer, and then enables it afterwards. Create a function in a file read by bash, like `~/.bashrc` or `~/.bash_aliases` depending on your setup. This also assumes that you have sudo privileges and the `php5enmod` and `php5dismod` commands available. It also assumes that you have `composer` in your path. ```sh echo 'function composer() { COMPOSER="$(which composer)" || { echo "Could not find composer in path" >&2 ; return 1 ; } && sudo php5dismod -s cli xdebug ; $COMPOSER "$@" ; STATUS=$? ; sudo php5enmod -s cli xdebug ; return $STATUS ; }' >> ~/.bash_aliases . ~/.bash_aliases ``` When executing `composer` you will run it with xdebug **disabled** (**as long as the command is executing**), and if you execute composer using explicit path (like `./composer` or `/usr/local/bin/composer`) xdebug will be **enabled**. If you do not want to disable it and want to get rid of the warning you can also define the [COMPOSER_DISABLE_XDEBUG_WARN](../03-cli.md#composer-disable-xdebug-warn) environment variable. ## "The system cannot find the path specified" (Windows) 1. Open regedit. 2. Search for an `AutoRun` key inside `HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor`, `HKEY_CURRENT_USER\Software\Microsoft\Command Processor` or `HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Command Processor`. 3. Check if it contains any path to non-existent file, if it's the case, just remove them. ## API rate limit and OAuth tokens Because of GitHub's rate limits on their API it can happen that Composer prompts for authentication asking your username and password so it can go ahead with its work. If you would prefer not to provide your GitHub credentials to Composer you can manually create a token using the following procedure: 1. [Create](https://github.com/settings/tokens) an OAuth token on GitHub. [Read more](https://github.com/blog/1509-personal-api-tokens) on this. 2. Add it to the configuration running `composer config -g github-oauth.github.com ` Now Composer should install/update without asking for authentication. ## proc_open(): fork failed errors If composer shows proc_open() fork failed on some commands: `PHP Fatal error: Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in phar` This could be happening because the VPS runs out of memory and has no Swap space enabled. ```sh free -m total used free shared buffers cached Mem: 2048 357 1690 0 0 237 -/+ buffers/cache: 119 1928 Swap: 0 0 0 ``` To enable the swap you can use for example: ```sh /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024 /sbin/mkswap /var/swap.1 /sbin/swapon /var/swap.1 ``` ## Degraded Mode Due to some intermittent issues on Travis and other systems, we introduced a degraded network mode which helps Composer finish successfully but disables a few optimizations. This is enabled automatically when an issue is first detected. If you see this issue sporadically you probably don't have to worry (a slow or overloaded network can also cause those time outs), but if it appears repeatedly you might want to look at the options below to identify and resolve it. If you have been pointed to this page, you want to check a few things: - If you are using ESET antivirus, go in "Advanced Settings" and disable "HTTP-scanner" under "web access protection" - If you are using IPv6, try disabling it. If that solves your issues, get in touch with your ISP or server host, the problem is not at the Packagist level but in the routing rules between you and Packagist (i.e. the internet at large). The best way to get these fixed is raise awareness to the network engineers that have the power to fix it. Take a look at the next section for IPv6 workarounds. - If none of the above helped, please report the error. ## Operation timed out (IPv6 issues) You may run into errors if IPv6 is not configured correctly. A common error is: ``` The "https://getcomposer.org/version" file could not be downloaded: failed to open stream: Operation timed out ``` We recommend you fix your IPv6 setup. If that is not possible, you can try the following workarounds: **Workaround Linux:** On linux, it seems that running this command helps to make ipv4 traffic have a higher prio than ipv6, which is a better alternative than disabling ipv6 entirely: ```Bash sudo sh -c "echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf" ``` **Workaround Windows:** On windows the only way is to disable ipv6 entirely I am afraid (either in windows or in your home router). **Workaround Mac OS X:** Get name of your network device: ``` networksetup -listallnetworkservices ``` Disable IPv6 on that device (in this case "Wi-Fi"): ``` networksetup -setv6off Wi-Fi ``` Run composer ... You can enable IPv6 again with: ``` networksetup -setv6automatic Wi-Fi ``` That said, if this fixes your problem, please talk to your ISP about it to try and resolve the routing errors. That's the best way to get things resolved for everyone. ## Composer hangs with SSH ControlMaster When you try to install packages from a Git repository and you use the `ControlMaster` setting for you SSH connection Composer might just hang endlessly and you see a `sh` process in the `defunct` state in your process list The reason for this is a SSH Bug: https://bugzilla.mindrot.org/show_bug.cgi?id=1988 As a workaround, open a SSH connection to your Git host before running Composer: ``` ssh -t git@mygitserver.tld composer update ``` See also https://github.com/composer/composer/issues/4180 for more information. ## Zip archives are not unpacked correctly. Composer can unpack zipballs using either a system-provided `unzip` utility or PHP's native `ZipArchiver` class. The `ZipArchiver` class is preferred on Windows. On other OSes where ZIP files can contain permissions and symlinks, the `unzip` utility is preferred. You're advised to install it if you need these features. composer-1.0.0-beta2/doc/articles/vendor-binaries.md000066400000000000000000000065221267577262200223430ustar00rootroot00000000000000 # Vendor binaries and the `vendor/bin` directory ## What is a vendor binary? Any command line script that a Composer package would like to pass along to a user who installs the package should be listed as a vendor binary. If a package contains other scripts that are not needed by the package users (like build or compile scripts) that code should not be listed as a vendor binary. ## How is it defined? It is defined by adding the `bin` key to a project's `composer.json`. It is specified as an array of files so multiple binaries can be added for any given project. ```json { "bin": ["bin/my-script", "bin/my-other-script"] } ``` ## What does defining a vendor binary in composer.json do? It instructs Composer to install the package's binaries to `vendor/bin` for any project that **depends** on that project. This is a convenient way to expose useful scripts that would otherwise be hidden deep in the `vendor/` directory. ## What happens when Composer is run on a composer.json that defines vendor binaries? For the binaries that a package defines directly, nothing happens. ## What happens when Composer is run on a composer.json that has dependencies with vendor binaries listed? Composer looks for the binaries defined in all of the dependencies. A symlink is created from each dependency's binaries to `vendor/bin`. Say package `my-vendor/project-a` has binaries setup like this: ```json { "name": "my-vendor/project-a", "bin": ["bin/project-a-bin"] } ``` Running `composer install` for this `composer.json` will not do anything with `bin/project-a-bin`. Say project `my-vendor/project-b` has requirements setup like this: ```json { "name": "my-vendor/project-b", "require": { "my-vendor/project-a": "*" } } ``` Running `composer install` for this `composer.json` will look at all of project-b's dependencies and install them to `vendor/bin`. In this case, Composer will make `vendor/my-vendor/project-a/bin/project-a-bin` available as `vendor/bin/project-a-bin`. On a Unix-like platform this is accomplished by creating a symlink. ## What about Windows and .bat files? Packages managed entirely by Composer do not *need* to contain any `.bat` files for Windows compatibility. Composer handles installation of binaries in a special way when run in a Windows environment: * A `.bat` file is generated automatically to reference the binary * A Unix-style proxy file with the same name as the binary is generated automatically (useful for Cygwin or Git Bash) Packages that need to support workflows that may not include Composer are welcome to maintain custom `.bat` files. In this case, the package should **not** list the `.bat` file as a binary as it is not needed. ## Can vendor binaries be installed somewhere other than vendor/bin? Yes, there are two ways an alternate vendor binary location can be specified: 1. Setting the `bin-dir` configuration setting in `composer.json` 1. Setting the environment variable `COMPOSER_BIN_DIR` An example of the former looks like this: ```json { "config": { "bin-dir": "scripts" } } ``` Running `composer install` for this `composer.json` will result in all of the vendor binaries being installed in `scripts/` instead of `vendor/bin/`. You can set `bin-dir` to `./` to put binaries in your project root. composer-1.0.0-beta2/doc/articles/versions.md000066400000000000000000000100211267577262200211110ustar00rootroot00000000000000 # Versions ## Basic Constraints ### Exact You can specify the exact version of a package. This will tell Composer to install this version and this version only. If other dependencies require a different version, the solver will ultimately fail and abort any install or update procedures. Example: `1.0.2` ### Range By using comparison operators you can specify ranges of valid versions. Valid operators are `>`, `>=`, `<`, `<=`, `!=`. You can define multiple ranges. Ranges separated by a space ( ) or comma (`,`) will be treated as a **logical AND**. A double pipe (`||`) will be treated as a **logical OR**. AND has higher precedence than OR. > **Note:** Be careful when using unbounded ranges as you might end up > unexpectedly installing versions that break backwards compatibility. > Consider using the [caret](#caret) operator instead for safety. Examples: * `>=1.0` * `>=1.0 <2.0` * `>=1.0 <1.1 || >=1.2` ### Range (Hyphen) Inclusive set of versions. Partial versions on the right include are completed with a wildcard. For example `1.0 - 2.0` is equivalent to `>=1.0.0 <2.1` as the `2.0` becomes `2.0.*`. On the other hand `1.0.0 - 2.1.0` is equivalent to `>=1.0.0 <=2.1.0`. Example: `1.0 - 2.0` ### Wildcard You can specify a pattern with a `*` wildcard. `1.0.*` is the equivalent of `>=1.0 <1.1`. Example: `1.0.*` ## Next Significant Release Operators ### Tilde The `~` operator is best explained by example: `~1.2` is equivalent to `>=1.2 <2.0.0`, while `~1.2.3` is equivalent to `>=1.2.3 <1.3.0`. As you can see it is mostly useful for projects respecting [semantic versioning](http://semver.org/). A common usage would be to mark the minimum minor version you depend on, like `~1.2` (which allows anything up to, but not including, 2.0). Since in theory there should be no backwards compatibility breaks until 2.0, that works well. Another way of looking at it is that using `~` specifies a minimum version, but allows the last digit specified to go up. Example: `~1.2` > **Note:** Though `2.0-beta.1` is strictly before `2.0`, a version constraint > like `~1.2` would not install it. As said above `~1.2` only means the `.2` > can change but the `1.` part is fixed. > **Note:** The `~` operator has an exception on its behavior for the major > release number. This means for example that `~1` is the same as `~1.0` as > it will not allow the major number to increase trying to keep backwards > compatibility. ### Caret The `^` operator behaves very similarly but it sticks closer to semantic versioning, and will always allow non-breaking updates. For example `^1.2.3` is equivalent to `>=1.2.3 <2.0.0` as none of the releases until 2.0 should break backwards compatibility. For pre-1.0 versions it also acts with safety in mind and treats `^0.3` as `>=0.3.0 <0.4.0`. This is the recommended operator for maximum interoperability when writing library code. Example: `^1.2.3` ## Stability If you are using a constraint that does not explicitly define a stability, Composer will default internally to `-dev` or `-stable`, depending on the operator(s) used. This happens transparently. If you wish to explicitly consider only the stable release in the comparison, add the suffix `-stable`. Examples: Constraint | Internally ------------------- | ------------------------ `1.2.3` | `=1.2.3.0-stable` `>1.2` | `>1.2.0.0-stable` `>=1.2` | `>=1.2.0.0-dev` `>=1.2-stable` | `>=1.2.0.0-stable` `<1.3` | `<1.3.0.0-dev` `<=1.3` | `<=1.3.0.0-stable` `1 - 2` | `>=1.0.0.0-dev <3.0.0.0-dev` `~1.3` | `>=1.3.0.0-dev <2.0.0.0-dev` `1.4.*` | `>=1.4.0.0-dev <1.5.0.0-dev` ## Test version constraints You can test version constraints using [semver.mwl.be](http://semver.mwl.be). Fill in a package name and it will autofill the default version constraint which Composer would add to your `composer.json` file. You can adjust the version constraint and the tool will highlight all releases that match. composer-1.0.0-beta2/doc/dev/000077500000000000000000000000001267577262200156755ustar00rootroot00000000000000composer-1.0.0-beta2/doc/dev/DefaultPolicy.md000066400000000000000000000024001267577262200207570ustar00rootroot00000000000000# Default Solver Policy A solver policy defines behaviour variables of the dependency solver. It decides which versions are considered newer than others, which packages should be preferred over others and whether operations like downgrades or uninstall are allowed. ## Selection of preferred Packages The following describe package pool situations with user requests and the resulting order in which the solver will try to install them. The rules are to be applied in the order of these descriptions. ### Repository priorities Packages Repo1.Av1, Repo2.Av1 * priority(Repo1) >= priority(Repo2) => (Repo1.Av1, Repo2.Av1) * priority(Repo1) < priority(Repo2) => (Repo2.Av1, Repo1.Av1) ### Package versions Packages: Av1, Av2, Av3 * Installed: Av2 Request: install A * (Av3) ### Virtual Packages (provides) Packages Av1, Bv1 * Av1 provides Xv1 * Bv1 provides Xv1 Request: install X * priority(Av1.repo) >= priority(Bv1.repo) => (Av1, Bv1) * priority(Av1.repo) < priority(Bv1.repo) => (Bv1, Av1) ### Package replacements Packages: Av1, Bv2 * Bv2 replaces Av1 Request: install A * priority(Av1.repo) >= priority(Bv2.repo) => (Av1, Bv2) * priority(Av1.repo) < priority(Bv2.repo) => (Bv2, Av1) Bv2 version is ignored, only the replacement version for A matters. composer-1.0.0-beta2/doc/faqs/000077500000000000000000000000001267577262200160515ustar00rootroot00000000000000composer-1.0.0-beta2/doc/faqs/how-do-i-install-a-package-to-a-custom-path-for-my-framework.md000066400000000000000000000034441267577262200316000ustar00rootroot00000000000000# How do I install a package to a custom path for my framework? Each framework may have one or many different required package installation paths. Composer can be configured to install packages to a folder other than the default `vendor` folder by using [composer/installers](https://github.com/composer/installers). If you are a **package author** and want your package installed to a custom directory, simply require `composer/installers` and set the appropriate `type`. This is common if your package is intended for a specific framework such as CakePHP, Drupal or WordPress. Here is an example composer.json file for a WordPress theme: ```json { "name": "you/themename", "type": "wordpress-theme", "require": { "composer/installers": "~1.0" } } ``` Now when your theme is installed with Composer it will be placed into `wp-content/themes/themename/` folder. Check the [current supported types](https://github.com/composer/installers#current-supported-types) for your package. As a **package consumer** you can set or override the install path for a package that requires composer/installers by configuring the `installer-paths` extra. A useful example would be for a Drupal multisite setup where the package should be installed into your sites subdirectory. Here we are overriding the install path for a module that uses composer/installers: ```json { "extra": { "installer-paths": { "sites/example.com/modules/{$name}": ["vendor/package"] } } } ``` Now the package would be installed to your folder location, rather than the default composer/installers determined location. > **Note:** You cannot use this to change the path of any package. This is only > applicable to packages that require `composer/installers` and use a custom type > that it handles. composer-1.0.0-beta2/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md000066400000000000000000000032501267577262200311330ustar00rootroot00000000000000# Should I commit the dependencies in my vendor directory? The general recommendation is **no**. The vendor directory (or wherever your dependencies are installed) should be added to `.gitignore`/`svn:ignore`/etc. The best practice is to then have all the developers use Composer to install the dependencies. Similarly, the build server, CI, deployment tools etc should be adapted to run Composer as part of their project bootstrapping. While it can be tempting to commit it in some environment, it leads to a few problems: - Large VCS repository size and diffs when you update code. - Duplication of the history of all your dependencies in your own VCS. - Adding dependencies installed via git to a git repo will show them as submodules. This is problematic because they are not real submodules, and you will run into issues. If you really feel like you must do this, you have a few options: 1. Limit yourself to installing tagged releases (no dev versions), so that you only get zipped installs, and avoid problems with the git "submodules". 2. Use --prefer-dist or set `preferred-install` to `dist` in your [config](../04-schema.md#config). 3. Remove the `.git` directory of every dependency after the installation, then you can add them to your git repo. You can do that with `rm -rf vendor/**/.git` in ZSH or `find vendor/ -type d -name ".git" -exec rm -rf {} \;` in Bash. but this means you will have to delete those dependencies from disk before running composer update. 4. Add a .gitignore rule (`/vendor/**/.git`) to ignore all the vendor `.git` folders. This approach does not require that you delete dependencies from disk prior to running a composer update. composer-1.0.0-beta2/doc/faqs/why-are-unbound-version-constraints-a-bad-idea.md000066400000000000000000000020761267577262200273160ustar00rootroot00000000000000# Why are unbound version constraints a bad idea? A version constraint without an upper bound such as `*`, `>=3.4` or `dev-master` will allow updates to any future version of the dependency. This includes major versions breaking backward compatibility. Once a release of your package is tagged, you cannot tweak its dependencies anymore in case a dependency breaks BC - you have to do a new release but the previous one stays broken. The only good alternative is to define an upper bound on your constraints, which you can increase in a new release after testing that your package is compatible with the new major version of your dependency. For example instead of using `>=3.4` you should use `~3.4` which allows all versions up to `3.999` but does not include `4.0` and above. The `~` operator works very well with libraries following [semantic versioning](http://semver.org). **Note:** As a package maintainer, you can make the life of your users easier by providing an [alias version](../articles/aliases.md) for your development branch to allow it to match bound constraints. why-are-version-constraints-combining-comparisons-and-wildcards-a-bad-idea.md000066400000000000000000000017461267577262200346020ustar00rootroot00000000000000composer-1.0.0-beta2/doc/faqs# Why are version constraints combining comparisons and wildcards a bad idea? This is a fairly common mistake people make, defining version constraints in their package requires like `>=2.*` or `>=1.1.*`. If you think about it and what it really means though, you will quickly realize that it does not make much sense. If we decompose `>=2.*`, you have two parts: - `>=2` which says the package should be in version 2.0.0 or above. - `2.*` which says the package should be between version 2.0.0 (inclusive) and 3.0.0 (exclusive). As you see, both rules agree on the fact that the package must be >=2.0.0, but it is not possible to determine if when you wrote that you were thinking of a package in version 3.0.0 or not. Should it match because you asked for `>=2` or should it not match because you asked for a `2.*`? For this reason, Composer just throws an error and says that this is invalid. The easy way to fix it is to think about what you really mean, and use only one of those rules.composer-1.0.0-beta2/doc/faqs/why-can't-composer-load-repositories-recursively.md000066400000000000000000000040331267577262200300350ustar00rootroot00000000000000# Why can't Composer load repositories recursively? You may run into problems when using custom repositories because Composer does not load the repositories of your requirements, so you have to redefine those repositories in all your `composer.json` files. Before going into details as to why this is like that, you have to understand that the main use of custom VCS & package repositories is to temporarily try some things, or use a fork of a project until your pull request is merged, etc. You should not use them to keep track of private packages. For that you should look into [setting up Satis](../articles/handling-private-packages-with-satis.md) or getting a [Toran Proxy](https://toranproxy.com) license for your company. There are three ways the dependency solver could work with custom repositories: - Fetch the repositories of root package, get all the packages from the defined repositories, resolve requirements. This is the current state and it works well except for the limitation of not loading repositories recursively. - Fetch the repositories of root package, while initializing packages from the defined repos, initialize recursively all repos found in those packages, and their package's packages, etc, then resolve requirements. It could work, but it slows down the initialization a lot since VCS repos can each take a few seconds, and it could end up in a completely broken state since many versions of a package could define the same packages inside a package repository, but with different dist/source. There are many many ways this could go wrong. - Fetch the repositories of root package, then fetch the repositories of the first level dependencies, then fetch the repositories of their dependencies, etc, then resolve requirements. This sounds more efficient, but it suffers from the same problems than the second solution, because loading the repositories of the dependencies is not as easy as it sounds. You need to load all the repos of all the potential matches for a requirement, which again might have conflicting package definitions. composer-1.0.0-beta2/doc/fixtures/000077500000000000000000000000001267577262200167705ustar00rootroot00000000000000composer-1.0.0-beta2/doc/fixtures/fixtures.md000066400000000000000000000017511267577262200211670ustar00rootroot00000000000000`Composer` type repository fixtures ======================= This directory contains some examples of what `composer` type repositories can look like. They serve as illustrating examples accompanying the docs, but can also be used as (initial) fixtures for tests. * `repo-composer-plain` is a simple, plain `packages.json` file * `repo-composer-with-includes` uses the `includes` mechanism * `repo-composer-with-providers` uses the `providers` mechanism Sample Packages used in these fixtures ------- All these repositories contain the following packages. * `foo/bar` versions 1.0.0, 1.0.1 and 1.1.0; dev-default and 1.0.x-dev branches. On dev-default and in 1.1.0, `bar/baz` ~1.0 is required. * `qux/quux` only has a dev-default branch. It `replace`s `gar/nix`. * `gar/nix` has a 1.0.0 version and a dev-default branch. It is being replaced by `qux/quux`. * `bar/baz` has a 1.0.0 version and 1.0.x-dev as well as dev-default branches. Additionally, 1.1.x-dev is a branch alias for dev-default. composer-1.0.0-beta2/doc/fixtures/repo-composer-plain/000077500000000000000000000000001267577262200226635ustar00rootroot00000000000000composer-1.0.0-beta2/doc/fixtures/repo-composer-plain/packages.json000066400000000000000000000125171267577262200253420ustar00rootroot00000000000000{ "packages": { "bar/baz": { "1.0.0": { "name": "bar/baz", "version": "1.0.0", "version_normalized": "1.0.0.0", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "35810817c14d" }, "time": "2014-10-13 12:04:55", "type": "library" }, "1.0.x-dev": { "name": "bar/baz", "version": "1.0.x-dev", "version_normalized": "1.0.9999999.9999999-dev", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "ffff9aae6ed5" }, "time": "2014-10-13 12:05:37", "type": "library" }, "dev-default": { "name": "bar/baz", "version": "dev-default", "version_normalized": "9999999-dev", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "f317e556f2e2" }, "time": "2014-10-13 12:06:45", "type": "library", "extra": { "branch-alias": { "dev-default": "1.1.x-dev" } } } }, "foo/bar": { "1.0.0": { "name": "foo/bar", "version": "1.0.0", "version_normalized": "1.0.0.0", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "249dec95a52a" }, "time": "2014-10-11 15:42:00", "type": "library" }, "1.0.1": { "name": "foo/bar", "version": "1.0.1", "version_normalized": "1.0.1.0", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "21e3328295d4" }, "time": "2014-10-11 15:45:56", "type": "library" }, "1.0.x-dev": { "name": "foo/bar", "version": "1.0.x-dev", "version_normalized": "1.0.9999999.9999999-dev", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "14dc17c8e860" }, "time": "2014-10-11 15:45:59", "type": "library" }, "1.1.0": { "name": "foo/bar", "version": "1.1.0", "version_normalized": "1.1.0.0", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "d2fa3e69ad5b" }, "require": { "bar/baz": "~1.0" }, "time": "2014-10-11 15:43:16", "type": "library" }, "dev-default": { "name": "foo/bar", "version": "dev-default", "version_normalized": "9999999-dev", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "8e5a5c224336" }, "require": { "bar/baz": "~1.0" }, "time": "2014-10-11 15:43:18", "type": "library" } }, "gar/nix": { "1.0.0": { "name": "gar/nix", "version": "1.0.0", "version_normalized": "1.0.0.0", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "44977145d64e" }, "time": "2014-10-13 12:03:33", "type": "library" }, "dev-default": { "name": "gar/nix", "version": "dev-default", "version_normalized": "9999999-dev", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "51cca95a31c2" }, "time": "2014-10-13 12:03:35", "type": "library" } }, "qux/quux": { "dev-default": { "name": "qux/quux", "version": "dev-default", "version_normalized": "9999999-dev", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "4a10a567baa5" }, "replace": { "gar/nix": "1.0.*" }, "time": "2014-10-11 15:48:15", "type": "library" } } } } composer-1.0.0-beta2/doc/fixtures/repo-composer-with-includes/000077500000000000000000000000001267577262200243375ustar00rootroot00000000000000composer-1.0.0-beta2/doc/fixtures/repo-composer-with-includes/include/000077500000000000000000000000001267577262200257625ustar00rootroot00000000000000all$5fa86b937f0502d92f776072cd49c002dca742b9.json000066400000000000000000000125171267577262200346470ustar00rootroot00000000000000composer-1.0.0-beta2/doc/fixtures/repo-composer-with-includes/include{ "packages": { "bar/baz": { "1.0.0": { "name": "bar/baz", "version": "1.0.0", "version_normalized": "1.0.0.0", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "35810817c14d" }, "time": "2014-10-13 12:04:55", "type": "library" }, "1.0.x-dev": { "name": "bar/baz", "version": "1.0.x-dev", "version_normalized": "1.0.9999999.9999999-dev", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "ffff9aae6ed5" }, "time": "2014-10-13 12:05:37", "type": "library" }, "dev-default": { "name": "bar/baz", "version": "dev-default", "version_normalized": "9999999-dev", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "f317e556f2e2" }, "time": "2014-10-13 12:06:45", "type": "library", "extra": { "branch-alias": { "dev-default": "1.1.x-dev" } } } }, "foo/bar": { "1.0.0": { "name": "foo/bar", "version": "1.0.0", "version_normalized": "1.0.0.0", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "249dec95a52a" }, "time": "2014-10-11 15:42:00", "type": "library" }, "1.0.1": { "name": "foo/bar", "version": "1.0.1", "version_normalized": "1.0.1.0", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "21e3328295d4" }, "time": "2014-10-11 15:45:56", "type": "library" }, "1.0.x-dev": { "name": "foo/bar", "version": "1.0.x-dev", "version_normalized": "1.0.9999999.9999999-dev", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "14dc17c8e860" }, "time": "2014-10-11 15:45:59", "type": "library" }, "1.1.0": { "name": "foo/bar", "version": "1.1.0", "version_normalized": "1.1.0.0", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "d2fa3e69ad5b" }, "require": { "bar/baz": "~1.0" }, "time": "2014-10-11 15:43:16", "type": "library" }, "dev-default": { "name": "foo/bar", "version": "dev-default", "version_normalized": "9999999-dev", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "8e5a5c224336" }, "require": { "bar/baz": "~1.0" }, "time": "2014-10-11 15:43:18", "type": "library" } }, "gar/nix": { "1.0.0": { "name": "gar/nix", "version": "1.0.0", "version_normalized": "1.0.0.0", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "44977145d64e" }, "time": "2014-10-13 12:03:33", "type": "library" }, "dev-default": { "name": "gar/nix", "version": "dev-default", "version_normalized": "9999999-dev", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "51cca95a31c2" }, "time": "2014-10-13 12:03:35", "type": "library" } }, "qux/quux": { "dev-default": { "name": "qux/quux", "version": "dev-default", "version_normalized": "9999999-dev", "source": { "type": "hg", "url": "http://some.where/over/the/rainbow/", "reference": "4a10a567baa5" }, "replace": { "gar/nix": "1.0.*" }, "time": "2014-10-11 15:48:15", "type": "library" } } } } composer-1.0.0-beta2/doc/fixtures/repo-composer-with-includes/packages.json000066400000000000000000000003061267577262200270070ustar00rootroot00000000000000{ "packages": [ ], "includes": { "include/all$5fa86b937f0502d92f776072cd49c002dca742b9.json": { "sha1": "5fa86b937f0502d92f776072cd49c002dca742b9" } } } composer-1.0.0-beta2/doc/fixtures/repo-composer-with-providers/000077500000000000000000000000001267577262200245465ustar00rootroot00000000000000composer-1.0.0-beta2/doc/fixtures/repo-composer-with-providers/p/000077500000000000000000000000001267577262200250055ustar00rootroot00000000000000composer-1.0.0-beta2/doc/fixtures/repo-composer-with-providers/p/bar/000077500000000000000000000000001267577262200255515ustar00rootroot00000000000000baz$923363b3c22e73abb2e3fd891c8156dd4d0821a97fd3e428bc910833e3e46dbe.json000066400000000000000000000031701267577262200400100ustar00rootroot00000000000000composer-1.0.0-beta2/doc/fixtures/repo-composer-with-providers/p/bar{ "packages": { "bar\/baz": { "1.0.0": { "name": "bar\/baz", "version": "1.0.0", "version_normalized": "1.0.0.0", "source": { "type": "hg", "url": "http:\/\/some.where\/over\/the\/rainbow\/", "reference": "35810817c14d" }, "time": "2014-10-13 12:04:55", "type": "library", "uid": 0 }, "1.0.x-dev": { "name": "bar\/baz", "version": "1.0.x-dev", "version_normalized": "1.0.9999999.9999999-dev", "source": { "type": "hg", "url": "http:\/\/some.where\/over\/the\/rainbow\/", "reference": "ffff9aae6ed5" }, "time": "2014-10-13 12:05:37", "type": "library", "uid": 1 }, "dev-default": { "name": "bar\/baz", "version": "dev-default", "version_normalized": "9999999-dev", "source": { "type": "hg", "url": "http:\/\/some.where\/over\/the\/rainbow\/", "reference": "f317e556f2e2" }, "time": "2014-10-13 12:06:45", "type": "library", "extra": { "branch-alias": { "dev-default": "1.1.x-dev" } }, "uid": 2 } } } }composer-1.0.0-beta2/doc/fixtures/repo-composer-with-providers/p/foo/000077500000000000000000000000001267577262200255705ustar00rootroot00000000000000bar$4baabb3303afa3e34a4d3af18fb138e5f3b79029c1f8d9ab5b477ea15776ba0a.json000066400000000000000000000050571267577262200403560ustar00rootroot00000000000000composer-1.0.0-beta2/doc/fixtures/repo-composer-with-providers/p/foo{ "packages": { "foo\/bar": { "1.0.0": { "name": "foo\/bar", "version": "1.0.0", "version_normalized": "1.0.0.0", "source": { "type": "hg", "url": "http:\/\/some.where\/over\/the\/rainbow\/", "reference": "249dec95a52a" }, "time": "2014-10-11 15:42:00", "type": "library", "uid": 3 }, "1.0.1": { "name": "foo\/bar", "version": "1.0.1", "version_normalized": "1.0.1.0", "source": { "type": "hg", "url": "http:\/\/some.where\/over\/the\/rainbow\/", "reference": "21e3328295d4" }, "time": "2014-10-11 15:45:56", "type": "library", "uid": 4 }, "1.0.x-dev": { "name": "foo\/bar", "version": "1.0.x-dev", "version_normalized": "1.0.9999999.9999999-dev", "source": { "type": "hg", "url": "http:\/\/some.where\/over\/the\/rainbow\/", "reference": "14dc17c8e860" }, "time": "2014-10-11 15:45:59", "type": "library", "uid": 5 }, "1.1.0": { "name": "foo\/bar", "version": "1.1.0", "version_normalized": "1.1.0.0", "source": { "type": "hg", "url": "http:\/\/some.where\/over\/the\/rainbow\/", "reference": "d2fa3e69ad5b" }, "require": { "bar\/baz": "~1.0" }, "time": "2014-10-11 15:43:16", "type": "library", "uid": 6 }, "dev-default": { "name": "foo\/bar", "version": "dev-default", "version_normalized": "9999999-dev", "source": { "type": "hg", "url": "http:\/\/some.where\/over\/the\/rainbow\/", "reference": "8e5a5c224336" }, "require": { "bar\/baz": "~1.0" }, "time": "2014-10-11 15:43:18", "type": "library", "uid": 7 } } } }composer-1.0.0-beta2/doc/fixtures/repo-composer-with-providers/p/gar/000077500000000000000000000000001267577262200255565ustar00rootroot00000000000000nix$5d210670cb46c8364c8e3fb449967b9bea558b971e5b082f330ae4f1d484c321.json000066400000000000000000000031161267577262200376270ustar00rootroot00000000000000composer-1.0.0-beta2/doc/fixtures/repo-composer-with-providers/p/gar{ "packages": { "qux\/quux": { "dev-default": { "name": "qux\/quux", "version": "dev-default", "version_normalized": "9999999-dev", "source": { "type": "hg", "url": "http:\/\/some.where\/over\/the\/rainbow\/", "reference": "4a10a567baa5" }, "replace": { "gar\/nix": "1.0.*" }, "time": "2014-10-11 15:48:15", "type": "library", "uid": 10 } }, "gar\/nix": { "1.0.0": { "name": "gar\/nix", "version": "1.0.0", "version_normalized": "1.0.0.0", "source": { "type": "hg", "url": "http:\/\/some.where\/over\/the\/rainbow\/", "reference": "44977145d64e" }, "time": "2014-10-13 12:03:33", "type": "library", "uid": 8 }, "dev-default": { "name": "gar\/nix", "version": "dev-default", "version_normalized": "9999999-dev", "source": { "type": "hg", "url": "http:\/\/some.where\/over\/the\/rainbow\/", "reference": "51cca95a31c2" }, "time": "2014-10-13 12:03:35", "type": "library", "uid": 9 } } } }provider-active$1893a061e579543822389ecd12d791c612db0c05e22d90e9286e233cacd86ed8.json000066400000000000000000000010041267577262200412770ustar00rootroot00000000000000composer-1.0.0-beta2/doc/fixtures/repo-composer-with-providers/p{ "providers": { "bar\/baz": { "sha256": "923363b3c22e73abb2e3fd891c8156dd4d0821a97fd3e428bc910833e3e46dbe" }, "foo\/bar": { "sha256": "4baabb3303afa3e34a4d3af18fb138e5f3b79029c1f8d9ab5b477ea15776ba0a" }, "gar\/nix": { "sha256": "5d210670cb46c8364c8e3fb449967b9bea558b971e5b082f330ae4f1d484c321" }, "qux\/quux": { "sha256": "c142d1a07ca354be46b613f59f1d601923a5a00ccc5fcce50a77ecdd461eb72d" } } }composer-1.0.0-beta2/doc/fixtures/repo-composer-with-providers/p/qux/000077500000000000000000000000001267577262200256225ustar00rootroot00000000000000quux$c142d1a07ca354be46b613f59f1d601923a5a00ccc5fcce50a77ecdd461eb72d.json000066400000000000000000000011701267577262200405440ustar00rootroot00000000000000composer-1.0.0-beta2/doc/fixtures/repo-composer-with-providers/p/qux{ "packages": { "qux\/quux": { "dev-default": { "name": "qux\/quux", "version": "dev-default", "version_normalized": "9999999-dev", "source": { "type": "hg", "url": "http:\/\/some.where\/over\/the\/rainbow\/", "reference": "4a10a567baa5" }, "replace": { "gar\/nix": "1.0.*" }, "time": "2014-10-11 15:48:15", "type": "library", "uid": 10 } } } }composer-1.0.0-beta2/doc/fixtures/repo-composer-with-providers/packages.json000066400000000000000000000004641267577262200272230ustar00rootroot00000000000000{ "packages": [], "providers-url": "\/p\/%package%$%hash%.json", "provider-includes": { "p\/provider-active$1893a061e579543822389ecd12d791c612db0c05e22d90e9286e233cacd86ed8.json": { "sha256": "1893a061e579543822389ecd12d791c612db0c05e22d90e9286e233cacd86ed8" } } }composer-1.0.0-beta2/phpunit.xml.dist000066400000000000000000000016441267577262200175320ustar00rootroot00000000000000 ./tests/Composer/ slow legacy ./src/Composer/ ./src/Composer/Autoload/ClassLoader.php composer-1.0.0-beta2/res/000077500000000000000000000000001267577262200151435ustar00rootroot00000000000000composer-1.0.0-beta2/res/cacert.pem000066400000000000000000007644251267577262200171310ustar00rootroot00000000000000## ## Bundle of CA Root Certificates ## ## Certificate data from Mozilla as of: Wed Oct 28 22:42:42 2015 ## ## This is a bundle of X.509 certificates of public Certificate Authorities ## (CA). These were automatically extracted from Mozilla's root certificates ## file (certdata.txt). This file can be found at ## https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt ## ## It contains the certificates in PEM format and therefore ## can be directly used with curl / libcurl / php_curl, or with ## an Apache+mod_ssl webserver for SSL client authentication. ## Just configure this file as the SSLCACertificateFile. ## ## Conversion done with mk-ca-bundle.pl version 1.25. ## SHA1: 6d7d2f0a4fae587e7431be191a081ac1257d300a ## Equifax Secure CA ================= -----BEGIN CERTIFICATE----- MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW 8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961 zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95 70+sB3c4 -----END CERTIFICATE----- GlobalSign Root CA ================== -----BEGIN CERTIFICATE----- MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== -----END CERTIFICATE----- GlobalSign Root CA - R2 ======================= -----BEGIN CERTIFICATE----- MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp 9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu 01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== -----END CERTIFICATE----- Verisign Class 3 Public Primary Certification Authority - G3 ============================================================ -----BEGIN CERTIFICATE----- MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1 EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj 055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0 xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== -----END CERTIFICATE----- Verisign Class 4 Public Primary Certification Authority - G3 ============================================================ -----BEGIN CERTIFICATE----- MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM 8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== -----END CERTIFICATE----- Entrust.net Premium 2048 Secure Server CA ========================================= -----BEGIN CERTIFICATE----- MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE= -----END CERTIFICATE----- Baltimore CyberTrust Root ========================= -----BEGIN CERTIFICATE----- MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp -----END CERTIFICATE----- AddTrust Low-Value Services Root ================================ -----BEGIN CERTIFICATE----- MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6 54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1 Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= -----END CERTIFICATE----- AddTrust External Root ====================== -----BEGIN CERTIFICATE----- MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821 +iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy 2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7 7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355 e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= -----END CERTIFICATE----- AddTrust Public Services Root ============================= -----BEGIN CERTIFICATE----- MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB /zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4 JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL +YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9 Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H EufOX1362KqxMy3ZdvJOOjMMK7MtkAY= -----END CERTIFICATE----- AddTrust Qualified Certificates Root ==================================== -----BEGIN CERTIFICATE----- MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx 64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3 KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/ BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE= -----END CERTIFICATE----- Entrust Root Certification Authority ==================================== -----BEGIN CERTIFICATE----- MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 -----END CERTIFICATE----- RSA Security 2048 v3 ==================== -----BEGIN CERTIFICATE----- MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7 Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP +Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/ MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj 0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395 nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA pKnXwiJPZ9d37CAFYd4= -----END CERTIFICATE----- GeoTrust Global CA ================== -----BEGIN CERTIFICATE----- MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet 8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4 d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2 mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm Mw== -----END CERTIFICATE----- GeoTrust Global CA 2 ==================== -----BEGIN CERTIFICATE----- MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/ NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7 srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF H4z1Ir+rzoPz4iIprn2DQKi6bA== -----END CERTIFICATE----- GeoTrust Universal CA ===================== -----BEGIN CERTIFICATE----- MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1 MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs 7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d 8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08 ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0 XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2 qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2 DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI P/rmMuGNG2+k5o7Y+SlIis5z/iw= -----END CERTIFICATE----- GeoTrust Universal CA 2 ======================= -----BEGIN CERTIFICATE----- MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0 MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0 DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17 j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2 WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP 20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG 8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2 +/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ 4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+ mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS -----END CERTIFICATE----- Visa eCommerce Root =================== -----BEGIN CERTIFICATE----- MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2 WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0 TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI /k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt 398znM/jra6O1I7mT1GvFpLgXPYHDw== -----END CERTIFICATE----- Certum Root CA ============== -----BEGIN CERTIFICATE----- MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ 89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+ GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/ 0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw== -----END CERTIFICATE----- Comodo AAA Services root ======================== -----BEGIN CERTIFICATE----- MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm 7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z 8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== -----END CERTIFICATE----- Comodo Secure Services root =========================== -----BEGIN CERTIFICATE----- MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP 9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm 4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H RR3B7Hzs/Sk= -----END CERTIFICATE----- Comodo Trusted Services root ============================ -----BEGIN CERTIFICATE----- MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7 3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y /9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6 juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB /zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O 9y5Xt5hwXsjEeLBi -----END CERTIFICATE----- QuoVadis Root CA ================ -----BEGIN CERTIFICATE----- MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7 MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6 tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi 5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi 5nrQNiOKSnQ2+Q== -----END CERTIFICATE----- QuoVadis Root CA 2 ================== -----BEGIN CERTIFICATE----- MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6 XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt 66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3 UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK +JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1 WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II 4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8 VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u -----END CERTIFICATE----- QuoVadis Root CA 3 ================== -----BEGIN CERTIFICATE----- MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8 nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4 ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2 Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp 8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto= -----END CERTIFICATE----- Security Communication Root CA ============================== -----BEGIN CERTIFICATE----- MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw 8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX 5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g 0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ 6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi FL39vmwLAw== -----END CERTIFICATE----- Sonera Class 2 Root CA ====================== -----BEGIN CERTIFICATE----- MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3 /Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt 0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH llpwrN9M -----END CERTIFICATE----- Staat der Nederlanden Root CA ============================= -----BEGIN CERTIFICATE----- MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6 22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== -----END CERTIFICATE----- UTN DATACorp SGC Root CA ======================== -----BEGIN CERTIFICATE----- MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA 9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv 33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9 BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3 DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0 I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI -----END CERTIFICATE----- UTN USERFirst Hardware Root CA ============================== -----BEGIN CERTIFICATE----- MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0 eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8 i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM //bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2 lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67 nfhmqA== -----END CERTIFICATE----- Camerfirma Chambers of Commerce Root ==================================== -----BEGIN CERTIFICATE----- MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1 erfutGWaIZDgqtCYvDi1czyL+Nw= -----END CERTIFICATE----- Camerfirma Global Chambersign Root ================================== -----BEGIN CERTIFICATE----- MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J 1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl 6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c 8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/ BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4 IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== -----END CERTIFICATE----- NetLock Notary (Class A) Root ============================= -----BEGIN CERTIFICATE----- MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC /tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7 tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6 4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0 ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5 ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM 8CgHrTwXZoi1/baI -----END CERTIFICATE----- XRamp Global CA Root ==================== -----BEGIN CERTIFICATE----- MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc /Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz 8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= -----END CERTIFICATE----- Go Daddy Class 2 CA =================== -----BEGIN CERTIFICATE----- MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv 2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b vZ8= -----END CERTIFICATE----- Starfield Class 2 CA ==================== -----BEGIN CERTIFICATE----- MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 QBFGmh95DmK/D5fs4C8fF5Q= -----END CERTIFICATE----- StartCom Certification Authority ================================ -----BEGIN CERTIFICATE----- MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT 37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0 Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5 LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh 3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3 fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl 1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/ lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro g14= -----END CERTIFICATE----- Taiwan GRCA =========== -----BEGIN CERTIFICATE----- MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5 BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O 1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7 Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8 lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2 09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2 Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk 7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy +fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS -----END CERTIFICATE----- Swisscom Root CA 1 ================== -----BEGIN CERTIFICATE----- MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4 MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn 7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5 haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9 MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3 1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW NY6E0F/6MBr1mmz0DlP5OlvRHA== -----END CERTIFICATE----- DigiCert Assured ID Root CA =========================== -----BEGIN CERTIFICATE----- MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO 9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW /lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF 66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i 8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== -----END CERTIFICATE----- DigiCert Global Root CA ======================= -----BEGIN CERTIFICATE----- MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H 4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y 7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm 8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= -----END CERTIFICATE----- DigiCert High Assurance EV Root CA ================================== -----BEGIN CERTIFICATE----- MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K -----END CERTIFICATE----- Certplus Class 2 Primary CA =========================== -----BEGIN CERTIFICATE----- MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR 5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+ 7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW //1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 l7+ijrRU -----END CERTIFICATE----- DST Root CA X3 ============== -----BEGIN CERTIFICATE----- MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ -----END CERTIFICATE----- DST ACES CA X6 ============== -----BEGIN CERTIFICATE----- MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2 5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3 oKfN5XozNmr6mis= -----END CERTIFICATE----- TURKTRUST Certificate Services Provider Root 2 ============================================== -----BEGIN CERTIFICATE----- MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr 5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4 Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+ hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P 9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5 UrbnBEI= -----END CERTIFICATE----- SwissSign Gold CA - G2 ====================== -----BEGIN CERTIFICATE----- MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR 7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64 OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm 5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr 44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ -----END CERTIFICATE----- SwissSign Silver CA - G2 ======================== -----BEGIN CERTIFICATE----- MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3 aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG 9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644 N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm +/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH 6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5 FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P 4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L 3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx /uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u -----END CERTIFICATE----- GeoTrust Primary Certification Authority ======================================== -----BEGIN CERTIFICATE----- MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9 nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG 1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= -----END CERTIFICATE----- thawte Primary Root CA ====================== -----BEGIN CERTIFICATE----- MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3 MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ 1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89 jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA== -----END CERTIFICATE----- VeriSign Class 3 Public Primary Certification Authority - G5 ============================================================ -----BEGIN CERTIFICATE----- MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/ Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/ BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+ X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq -----END CERTIFICATE----- SecureTrust CA ============== -----BEGIN CERTIFICATE----- MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b 01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR 3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= -----END CERTIFICATE----- Secure Global CA ================ -----BEGIN CERTIFICATE----- MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g 8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi 0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW -----END CERTIFICATE----- COMODO Certification Authority ============================== -----BEGIN CERTIFICATE----- MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH +7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV 4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA 1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN +8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== -----END CERTIFICATE----- Network Solutions Certificate Authority ======================================= -----BEGIN CERTIFICATE----- MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc /Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q 4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey -----END CERTIFICATE----- WellsSecure Public Root Certificate Authority ============================================= -----BEGIN CERTIFICATE----- MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1 iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13 i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8 bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0 bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ tylv2G0xffX8oRAHh84vWdw+WNs= -----END CERTIFICATE----- COMODO ECC Certification Authority ================================== -----BEGIN CERTIFICATE----- MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X 4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= -----END CERTIFICATE----- IGC/A ===== -----BEGIN CERTIFICATE----- MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2 TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF 0mBWWg== -----END CERTIFICATE----- Security Communication EV RootCA1 ================================= -----BEGIN CERTIFICATE----- MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO /VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4 bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK 9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 -----END CERTIFICATE----- OISTE WISeKey Global Root GA CA =============================== -----BEGIN CERTIFICATE----- MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5 IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9 Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ /yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4 +vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= -----END CERTIFICATE----- Microsec e-Szigno Root CA ========================= -----BEGIN CERTIFICATE----- MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0 MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3 LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA 4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6 Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a 86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU= -----END CERTIFICATE----- Certigna ======== -----BEGIN CERTIFICATE----- MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY 1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== -----END CERTIFICATE----- Deutsche Telekom Root CA 2 ========================== -----BEGIN CERTIFICATE----- MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5 MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5 bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8 rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU Cm26OWMohpLzGITY+9HPBVZkVw== -----END CERTIFICATE----- Cybertrust Global Root ====================== -----BEGIN CERTIFICATE----- MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA +Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW 0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin 89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT 8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi 5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW WL1WMRJOEcgh4LMRkWXbtKaIOM5V -----END CERTIFICATE----- ePKI Root Certification Authority ================================= -----BEGIN CERTIFICATE----- MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX 12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= -----END CERTIFICATE----- T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3 ============================================================================================================================= -----BEGIN CERTIFICATE----- MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4 MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1 xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR 6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4 N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI= -----END CERTIFICATE----- Buypass Class 2 CA 1 ==================== -----BEGIN CERTIFICATE----- MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2 MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83 0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4 0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV 1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt 7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2 fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho -----END CERTIFICATE----- EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 ========================================================================== -----BEGIN CERTIFICATE----- MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0 Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB /wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK 1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt 2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9 AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT -----END CERTIFICATE----- certSIGN ROOT CA ================ -----BEGIN CERTIFICATE----- MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD 0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD -----END CERTIFICATE----- CNNIC ROOT ========== -----BEGIN CERTIFICATE----- MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5 Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8 BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2 G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m mxE= -----END CERTIFICATE----- ApplicationCA - Japanese Government =================================== -----BEGIN CERTIFICATE----- MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4 fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g /DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL rosot4LKGAfmt1t06SAZf7IbiVQ= -----END CERTIFICATE----- GeoTrust Primary Certification Authority - G3 ============================================= -----BEGIN CERTIFICATE----- MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0 IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr 2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9 cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt -----END CERTIFICATE----- thawte Primary Root CA - G2 =========================== -----BEGIN CERTIFICATE----- MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5 8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== -----END CERTIFICATE----- thawte Primary Root CA - G3 =========================== -----BEGIN CERTIFICATE----- MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC +BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY 7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC 8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A= -----END CERTIFICATE----- GeoTrust Primary Certification Authority - G2 ============================================= -----BEGIN CERTIFICATE----- MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1 OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+ EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2 npaqBA+K -----END CERTIFICATE----- VeriSign Universal Root Certification Authority =============================================== -----BEGIN CERTIFICATE----- MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0 aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj 1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72 9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3 Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4 mJO37M2CYfE45k+XmCpajQ== -----END CERTIFICATE----- VeriSign Class 3 Public Primary Certification Authority - G4 ============================================================ -----BEGIN CERTIFICATE----- MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5 IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8 Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB /zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== -----END CERTIFICATE----- NetLock Arany (Class Gold) FÅ‘tanúsítvány ============================================ -----BEGIN CERTIFICATE----- MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu 0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw /HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= -----END CERTIFICATE----- Staat der Nederlanden Root CA - G2 ================================== -----BEGIN CERTIFICATE----- MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ 5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65 48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737 qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz +51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm 66+KAQ== -----END CERTIFICATE----- CA Disig ======== -----BEGIN CERTIFICATE----- MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3 mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/ CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA 4Z7CRneC9VkGjCFMhwnN5ag= -----END CERTIFICATE----- Juur-SK ======= -----BEGIN CERTIFICATE----- MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC +Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678 IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2 yyqcjg== -----END CERTIFICATE----- Hongkong Post Root CA 1 ======================= -----BEGIN CERTIFICATE----- MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== -----END CERTIFICATE----- SecureSign RootCA11 =================== -----BEGIN CERTIFICATE----- MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= -----END CERTIFICATE----- ACEDICOM Root ============= -----BEGIN CERTIFICATE----- MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4 MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2 3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9 2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz 4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU 9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1 ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA== -----END CERTIFICATE----- Microsec e-Szigno Root CA 2009 ============================== -----BEGIN CERTIFICATE----- MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG 0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm 1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi LXpUq3DDfSJlgnCW -----END CERTIFICATE----- GlobalSign Root CA - R3 ======================= -----BEGIN CERTIFICATE----- MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ 0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r kpeDMdmztcpHWD9f -----END CERTIFICATE----- Autoridad de Certificacion Firmaprofesional CIF A62634068 ========================================================= -----BEGIN CERTIFICATE----- MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY 7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx 51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi 6Et8Vcad+qMUu2WFbm5PEn4KPJ2V -----END CERTIFICATE----- Izenpe.com ========== -----BEGIN CERTIFICATE----- MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ 03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU +zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK 0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+ 0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+ SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5 aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5 nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== -----END CERTIFICATE----- Chambers of Commerce Root - 2008 ================================ -----BEGIN CERTIFICATE----- MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/ ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331 lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ 0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2 EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1 wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH 3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6 M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1 YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF 9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ -----END CERTIFICATE----- Global Chambersign Root - 2008 ============================== -----BEGIN CERTIFICATE----- MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0 ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB /gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp 1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0 dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG /5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6 ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg 9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z 09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B -----END CERTIFICATE----- Go Daddy Root Certificate Authority - G2 ======================================== -----BEGIN CERTIFICATE----- MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq 9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD +qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r 5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 -----END CERTIFICATE----- Starfield Root Certificate Authority - G2 ========================================= -----BEGIN CERTIFICATE----- MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx 4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 -----END CERTIFICATE----- Starfield Services Root Certificate Authority - G2 ================================================== -----BEGIN CERTIFICATE----- MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 -----END CERTIFICATE----- AffirmTrust Commercial ====================== -----BEGIN CERTIFICATE----- MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv 0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= -----END CERTIFICATE----- AffirmTrust Networking ====================== -----BEGIN CERTIFICATE----- MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 /PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 /ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= -----END CERTIFICATE----- AffirmTrust Premium =================== -----BEGIN CERTIFICATE----- MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV 5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs +7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 /bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo +Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC 6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK +4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== -----END CERTIFICATE----- AffirmTrust Premium ECC ======================= -----BEGIN CERTIFICATE----- MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X 57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM eQ== -----END CERTIFICATE----- Certum Trusted Network CA ========================= -----BEGIN CERTIFICATE----- MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI 03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= -----END CERTIFICATE----- Certinomis - Autorité Racine ============================= -----BEGIN CERTIFICATE----- MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw 2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g 530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna 4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40 nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/ vgt2Fl43N+bYdJeimUV5 -----END CERTIFICATE----- Root CA Generalitat Valenciana ============================== -----BEGIN CERTIFICATE----- MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290 IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3 WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2 F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0 dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63 NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt +GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM= -----END CERTIFICATE----- A-Trust-nQual-03 ================ -----BEGIN CERTIFICATE----- MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0 ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1 c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4 iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40 ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6 ahq97BvIxYSazQ== -----END CERTIFICATE----- TWCA Root Certification Authority ================================= -----BEGIN CERTIFICATE----- MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP 4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG 9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== -----END CERTIFICATE----- Security Communication RootCA2 ============================== -----BEGIN CERTIFICATE----- MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ +T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R 3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk 3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 -----END CERTIFICATE----- EC-ACC ====== -----BEGIN CERTIFICATE----- MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw 0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D 5EI= -----END CERTIFICATE----- Hellenic Academic and Research Institutions RootCA 2011 ======================================================= -----BEGIN CERTIFICATE----- MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI 1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa 71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u 8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH 3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD /md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N 7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 -----END CERTIFICATE----- Actalis Authentication Root CA ============================== -----BEGIN CERTIFICATE----- MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6 zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2 oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7 hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8 EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5 jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+ Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC 4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo 2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== -----END CERTIFICATE----- Trustis FPS Root CA =================== -----BEGIN CERTIFICATE----- MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290 IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P 8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl iB6XzCGcKQENZetX2fNXlrtIzYE= -----END CERTIFICATE----- StartCom Certification Authority ================================ -----BEGIN CERTIFICATE----- MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT 37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0 dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0 aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0 aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5 fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA 2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8= -----END CERTIFICATE----- StartCom Certification Authority G2 =================================== -----BEGIN CERTIFICATE----- MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG 4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K 2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+ JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG /+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm 7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm obp573PYtlNXLfbQ4ddI -----END CERTIFICATE----- Buypass Class 2 Root CA ======================= -----BEGIN CERTIFICATE----- MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn 9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b /+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN rJgWVqA= -----END CERTIFICATE----- Buypass Class 3 Root CA ======================= -----BEGIN CERTIFICATE----- MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR 5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh 7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH 2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV /afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz 6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi Cp/HuZc= -----END CERTIFICATE----- T-TeleSec GlobalRoot Class 3 ============================ -----BEGIN CERTIFICATE----- MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK 9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W 0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== -----END CERTIFICATE----- EE Certification Centre Root CA =============================== -----BEGIN CERTIFICATE----- MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2 rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw 93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU 3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM dcGWxZ0= -----END CERTIFICATE----- TURKTRUST Certificate Services Provider Root 2007 ================================================= -----BEGIN CERTIFICATE----- MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK poRq0Tl9 -----END CERTIFICATE----- D-TRUST Root Class 3 CA 2 2009 ============================== -----BEGIN CERTIFICATE----- MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ 4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm 2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I= -----END CERTIFICATE----- D-TRUST Root Class 3 CA 2 EV 2009 ================================= -----BEGIN CERTIFICATE----- MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T 7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60 sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35 11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+ PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv w9y4AyHqnxbxLFS1 -----END CERTIFICATE----- PSCProcert ========== -----BEGIN CERTIFICATE----- MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA 3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2 0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH 0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/ AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG 9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52 ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1 n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo 5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq 3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5 poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km -----END CERTIFICATE----- China Internet Network Information Center EV Certificates Root ============================================================== -----BEGIN CERTIFICATE----- MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV 98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23 KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC 7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5 0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM 7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0 5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8= -----END CERTIFICATE----- Swisscom Root CA 2 ================== -----BEGIN CERTIFICATE----- MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQG EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2 MjUwNzM4MTRaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIIC IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvErjw0DzpPM LgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r0rk0X2s682Q2zsKwzxNo ysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJ wDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVPACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpH Wrumnf2U5NGKpV+GY3aFy6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1a SgJA/MTAtukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL6yxS NLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0uPoTXGiTOmekl9Ab mbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrALacywlKinh/LTSlDcX3KwFnUey7QY Ypqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velhk6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3 qPyZ7iVNTA6z00yPhOgpD/0QVAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw HQYDVR0hBBYwFDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqhb97iEoHF8Twu MA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4RfbgZPnm3qKhyN2abGu2sEzsO v2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ 82YqZh6NM4OKb3xuqFp1mrjX2lhIREeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLz o9v/tdhZsnPdTSpxsrpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcs a0vvaGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciATwoCqISxx OQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99nBjx8Oto0QuFmtEYE3saW mA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5Wt6NlUe07qxS/TFED6F+KBZvuim6c779o +sjaC+NCydAXFJy3SuCvkychVSa1ZC+N8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TC rvJcwhbtkj6EPnNgiLx29CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX 5OfNeOI5wSsSnqaeG8XmDtkx2Q== -----END CERTIFICATE----- Swisscom Root EV CA 2 ===================== -----BEGIN CERTIFICATE----- MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAwZzELMAkGA1UE BhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdpdGFsIENlcnRpZmljYXRlIFNl cnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcN MzEwNjI1MDg0NTA4WjBnMQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsT HERpZ2l0YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYg Q0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7BxUglgRCgz o3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD1ycfMQ4jFrclyxy0uYAy Xhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPHoCE2G3pXKSinLr9xJZDzRINpUKTk4Rti GZQJo/PDvO/0vezbE53PnUgJUmfANykRHvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8Li qG12W0OfvrSdsyaGOx9/5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaH Za0zKcQvidm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHLOdAG alNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaCNYGu+HuB5ur+rPQa m3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f46Fq9mDU5zXNysRojddxyNMkM3Ox bPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCBUWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDi xzgHcgplwLa7JSnaFp6LNYth7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/ BAQDAgGGMB0GA1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWBbj2ITY1x0kbB bkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6xXCX5145v9Ydkn+0UjrgEjihL j6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98TPLr+flaYC/NUn81ETm484T4VvwYmneTwkLbU wp4wLh/vx3rEUMfqe9pQy3omywC0Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7 XwgiG/W9mR4U9s70WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH 59yLGn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm7JFe3VE/ 23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4Snr8PyQUQ3nqjsTzyP6Wq J3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VNvBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyA HmBR3NdUIR7KYndP+tiPsys6DXhyyWhBWkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/gi uMod89a2GQ+fYWVq6nTIfI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuW l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc= -----END CERTIFICATE----- CA Disig Root R1 ================ -----BEGIN CERTIFICATE----- MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNLMRMw EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy 3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8 u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3AfQ+lekLZWnDZv6fXARz2 m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk CiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTa YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6 vpmumwKjrckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjL LhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAX ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is XxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNV HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ 04IwDQYJKoZIhvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9B LxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb VSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85 YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKS ds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvkF7mGnjix lAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqFa3qdnom2piiZk4hA9z7N UaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJ a7+h89n07eLw4+1knj0vllJPgFOL -----END CERTIFICATE----- CA Disig Root R2 ================ -----BEGIN CERTIFICATE----- MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7 A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa 5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8 1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01 utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0 sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV 7+ZtsH8tZ/3zbBt1RqPlShfppNcL -----END CERTIFICATE----- ACCVRAIZ1 ========= -----BEGIN CERTIFICATE----- MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1 MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0 RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ 0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7 8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR 5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J 9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0 dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2 MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49 nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3 sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd 3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p EfbRD0tVNEYqi4Y7 -----END CERTIFICATE----- TWCA Global Root CA =================== -----BEGIN CERTIFICATE----- MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99 sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M 8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg /eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8 EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3 zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0= -----END CERTIFICATE----- TeliaSonera Root CA v1 ====================== -----BEGIN CERTIFICATE----- MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4 MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+ 6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA 3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3 F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7 gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx 0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2 qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6 Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= -----END CERTIFICATE----- E-Tugra Certification Authority =============================== -----BEGIN CERTIFICATE----- MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0 E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5 dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB /wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807 VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0 8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G C7TbO6Orb1wdtn7os4I07QZcJA== -----END CERTIFICATE----- T-TeleSec GlobalRoot Class 2 ============================ -----BEGIN CERTIFICATE----- MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970 2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4 r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR 3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN 9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg== -----END CERTIFICATE----- Atos TrustedRoot 2011 ===================== -----BEGIN CERTIFICATE----- MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4 MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr 54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+ DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320 HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9 61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G 3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed -----END CERTIFICATE----- QuoVadis Root CA 1 G3 ===================== -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6 Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV 7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX 9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3 GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP +V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh 3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6 O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0 FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV hMJKzRwuJIczYOXD -----END CERTIFICATE----- QuoVadis Root CA 2 G3 ===================== -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD 6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9 x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr O3jtZsSOeWmD3n+M -----END CERTIFICATE----- QuoVadis Root CA 3 G3 ===================== -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286 IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe 6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3 I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7 5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX 0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2 PpxxVJkES/1Y+Zj0 -----END CERTIFICATE----- DigiCert Assured ID Root G2 =========================== -----BEGIN CERTIFICATE----- MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH 35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv 0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo IhNzbM8m9Yop5w== -----END CERTIFICATE----- DigiCert Assured ID Root G3 =========================== -----BEGIN CERTIFICATE----- MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy 1vUhZscv6pZjamVFkpUBtA== -----END CERTIFICATE----- DigiCert Global Root G2 ======================= -----BEGIN CERTIFICATE----- MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO 3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu 5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/ iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl MrY= -----END CERTIFICATE----- DigiCert Global Root G3 ======================= -----BEGIN CERTIFICATE----- MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y 3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34 VOKa5Vt8sycX -----END CERTIFICATE----- DigiCert Trusted Root G4 ======================== -----BEGIN CERTIFICATE----- MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6 MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7 f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8 oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy 7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN 5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb /UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa 5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP 82Z+ -----END CERTIFICATE----- WoSign ====== -----BEGIN CERTIFICATE----- MIIFdjCCA16gAwIBAgIQXmjWEXGUY1BWAGjzPsnFkTANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQG EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxKjAoBgNVBAMTIUNlcnRpZmljYXRpb24g QXV0aG9yaXR5IG9mIFdvU2lnbjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMFUxCzAJ BgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEqMCgGA1UEAxMhQ2VydGlmaWNh dGlvbiBBdXRob3JpdHkgb2YgV29TaWduMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA vcqNrLiRFVaXe2tcesLea9mhsMMQI/qnobLMMfo+2aYpbxY94Gv4uEBf2zmoAHqLoE1UfcIiePyO CbiohdfMlZdLdNiefvAA5A6JrkkoRBoQmTIPJYhTpA2zDxIIFgsDcSccf+Hb0v1naMQFXQoOXXDX 2JegvFNBmpGN9J42Znp+VsGQX+axaCA2pIwkLCxHC1l2ZjC1vt7tj/id07sBMOby8w7gLJKA84X5 KIq0VC6a7fd2/BVoFutKbOsuEo/Uz/4Mx1wdC34FMr5esAkqQtXJTpCzWQ27en7N1QhatH/YHGkR +ScPewavVIMYe+HdVHpRaG53/Ma/UkpmRqGyZxq7o093oL5d//xWC0Nyd5DKnvnyOfUNqfTq1+ez EC8wQjchzDBwyYaYD8xYTYO7feUapTeNtqwylwA6Y3EkHp43xP901DfA4v6IRmAR3Qg/UDaruHqk lWJqbrDKaiFaafPz+x1wOZXzp26mgYmhiMU7ccqjUu6Du/2gd/Tkb+dC221KmYo0SLwX3OSACCK2 8jHAPwQ+658geda4BmRkAjHXqc1S+4RFaQkAKtxVi8QGRkvASh0JWzko/amrzgD5LkhLJuYwTKVY yrREgk/nkR4zw7CT/xH8gdLKH3Ep3XZPkiWvHYG3Dy+MwwbMLyejSuQOmbp8HkUff6oZRZb9/D0C AwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOFmzw7R 8bNLtwYgFP6HEtX2/vs+MA0GCSqGSIb3DQEBBQUAA4ICAQCoy3JAsnbBfnv8rWTjMnvMPLZdRtP1 LOJwXcgu2AZ9mNELIaCJWSQBnfmvCX0KI4I01fx8cpm5o9dU9OpScA7F9dY74ToJMuYhOZO9sxXq T2r09Ys/L3yNWC7F4TmgPsc9SnOeQHrAK2GpZ8nzJLmzbVUsWh2eJXLOC62qx1ViC777Y7NhRCOj y+EaDveaBk3e1CNOIZZbOVtXHS9dCF4Jef98l7VNg64N1uajeeAz0JmWAjCnPv/So0M/BVoG6kQC 2nz4SNAzqfkHx5Xh9T71XXG68pWpdIhhWeO/yloTunK0jF02h+mmxTwTv97QRCbut+wucPrXnbes 5cVAWubXbHssw1abR80LzvobtCHXt2a49CUwi1wNuepnsvRtrtWhnk/Yn+knArAdBtaP4/tIEp9/ EaEQPkxROpaw0RPxx9gmrjrKkcRpnd8BKWRRb2jaFOwIQZeQjdCygPLPwj2/kWjFgGcexGATVdVh mVd8upUPYUk6ynW8yQqTP2cOEvIo4jEbwFcW3wh8GcF+Dx+FHgo2fFt+J7x6v+Db9NpSvd4MVHAx kUOVyLzwPt0JfjBkUO1/AaQzZ01oT74V77D2AhGiGxMlOtzCWfHjXEa7ZywCRuoeSKbmW9m1vFGi kpbbqsY3Iqb+zCB0oy2pLmvLwIIRIbWTee5Ehr7XHuQe+w== -----END CERTIFICATE----- WoSign China ============ -----BEGIN CERTIFICATE----- MIIFWDCCA0CgAwIBAgIQUHBrzdgT/BtOOzNy0hFIjTANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQG EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMMEkNBIOayg+mAmuagueiv geS5pjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMEYxCzAJBgNVBAYTAkNOMRowGAYD VQQKExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAwwSQ0Eg5rKD6YCa5qC56K+B5LmmMIICIjAN BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EkhHiX8h8EqwqzbdoYGTufQdDTc7WU1/FDWiD+k 8H/rD195L4mx/bxjWDeTmzj4t1up+thxx7S8gJeNbEvxUNUqKaqoGXqW5pWOdO2XCld19AXbbQs5 uQF/qvbW2mzmBeCkTVL829B0txGMe41P/4eDrv8FAxNXUDf+jJZSEExfv5RxadmWPgxDT74wwJ85 dE8GRV2j1lY5aAfMh09Qd5Nx2UQIsYo06Yms25tO4dnkUkWMLhQfkWsZHWgpLFbE4h4TV2TwYeO5 Ed+w4VegG63XX9Gv2ystP9Bojg/qnw+LNVgbExz03jWhCl3W6t8Sb8D7aQdGctyB9gQjF+BNdeFy b7Ao65vh4YOhn0pdr8yb+gIgthhid5E7o9Vlrdx8kHccREGkSovrlXLp9glk3Kgtn3R46MGiCWOc 76DbT52VqyBPt7D3h1ymoOQ3OMdc4zUPLK2jgKLsLl3Az+2LBcLmc272idX10kaO6m1jGx6KyX2m +Jzr5dVjhU1zZmkR/sgO9MHHZklTfuQZa/HpelmjbX7FF+Ynxu8b22/8DU0GAbQOXDBGVWCvOGU6 yke6rCzMRh+yRpY/8+0mBe53oWprfi1tWFxK1I5nuPHa1UaKJ/kR8slC/k7e3x9cxKSGhxYzoacX GKUN5AXlK8IrC6KVkLn9YDxOiT7nnO4fuwECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud EwEB/wQFMAMBAf8wHQYDVR0OBBYEFOBNv9ybQV0T6GTwp+kVpOGBwboxMA0GCSqGSIb3DQEBCwUA A4ICAQBqinA4WbbaixjIvirTthnVZil6Xc1bL3McJk6jfW+rtylNpumlEYOnOXOvEESS5iVdT2H6 yAa+Tkvv/vMx/sZ8cApBWNromUuWyXi8mHwCKe0JgOYKOoICKuLJL8hWGSbueBwj/feTZU7n85iY r83d2Z5AiDEoOqsuC7CsDCT6eiaY8xJhEPRdF/d+4niXVOKM6Cm6jBAyvd0zaziGfjk9DgNyp115 j0WKWa5bIW4xRtVZjc8VX90xJc/bYNaBRHIpAlf2ltTW/+op2znFuCyKGo3Oy+dCMYYFaA6eFN0A kLppRQjbbpCBhqcqBT/mhDn4t/lXX0ykeVoQDF7Va/81XwVRHmyjdanPUIPTfPRm94KNPQx96N97 qA4bLJyuQHCH2u2nFoJavjVsIE4iYdm8UXrNemHcSxH5/mc0zy4EZmFcV5cjjPOGG0jfKq+nwf/Y jj4Du9gqsPoUJbJRa4ZDhS4HIxaAjUz7tGM7zMN07RujHv41D198HRaG9Q7DlfEvr10lO1Hm13ZB ONFLAzkopR6RctR9q5czxNM+4Gm2KHmgCY0c0f9BckgG/Jou5yD5m6Leie2uPAmvylezkolwQOQv T8Jwg0DXJCxr5wkf09XHwQj02w47HAcLQxGEIYbpgNR12KvxAmLBsX5VYc8T1yaw15zLKYs4SgsO kI26oQ== -----END CERTIFICATE----- COMODO RSA Certification Authority ================================== -----BEGIN CERTIFICATE----- MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCBhTELMAkGA1UE BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlv biBBdXRob3JpdHkwHhcNMTAwMTE5MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMC R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBB dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR6FSS0gpWsawNJN3Fz0Rn dJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8Xpz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZ FGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+ 5eNu/Nio5JIk2kNrYrhV/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pG x8cgoLEfZd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z+pUX 2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7wqP/0uK3pN/u6uPQL OvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZahSL0896+1DSJMwBGB7FY79tOi4lu3 sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVICu9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+C GCe01a60y1Dma/RMhnEw6abfFobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5 WdYgGq/yapiqcrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w DQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvlwFTPoCWOAvn9sKIN9SCYPBMt rFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+ nq6PK7o9mfjYcwlYRm6mnPTXJ9OV2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSg tZx8jb8uk2IntznaFxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwW sRqZCuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiKboHGhfKp pC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmckejkk9u+UJueBPSZI9FoJA zMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yLS0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHq ZJx64SIDqZxubw5lT2yHh17zbqD5daWbQOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk52 7RH89elWsn2/x20Kk4yl0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7I LaZRfyHBNVOFBkpdn627G190 -----END CERTIFICATE----- USERTrust RSA Certification Authority ===================================== -----BEGIN CERTIFICATE----- MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UE BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh dGlvbiBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UE BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCAEmUXNg7D2wiz 0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2j Y0K2dvKpOyuR+OJv0OwWIJAJPuLodMkYtJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFn RghRy4YUVD+8M/5+bJz/Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O +T23LLb2VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT79uq /nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6c0Plfg6lZrEpfDKE Y1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmTYo61Zs8liM2EuLE/pDkP2QKe6xJM lXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97lc6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8 yexDJtC/QV9AqURE9JnnV4eeUB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+ eLf8ZxXhyVeEHg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF MAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPFUp/L+M+ZBn8b2kMVn54CVVeW FPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KOVWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ 7l8wXEskEVX/JJpuXior7gtNn3/3ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQ Eg9zKC7F4iRO/Fjs8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM 8WcRiQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYzeSf7dNXGi FSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZXHlKYC6SQK5MNyosycdi yA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9c J2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRBVXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGw sAvgnEzDHNb842m1R0aBL6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gx Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9 -----END CERTIFICATE----- USERTrust ECC Certification Authority ===================================== -----BEGIN CERTIFICATE----- MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2 0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu 9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= -----END CERTIFICATE----- GlobalSign ECC Root CA - R4 =========================== -----BEGIN CERTIFICATE----- MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q= -----END CERTIFICATE----- GlobalSign ECC Root CA - R5 =========================== -----BEGIN CERTIFICATE----- MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6 SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7 yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3 -----END CERTIFICATE----- Staat der Nederlanden Root CA - G3 ================================== -----BEGIN CERTIFICATE----- MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g Um9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloXDTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMC TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4y olQPcPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WWIkYFsO2t x1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqXxz8ecAgwoNzFs21v0IJy EavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFyKJLZWyNtZrVtB0LrpjPOktvA9mxjeM3K Tj215VKb8b475lRgsGYeCasH/lSJEULR9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUur mkVLoR9BvUhTFXFkC4az5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU5 1nus6+N86U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7Ngzp 07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHPbMk7ccHViLVlvMDo FxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE 41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTtXUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMB AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleu yjWcLhL75LpdINyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwpLiniyMMB8jPq KqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8Ipf3YF3qKS9Ysr1YvY2WTxB1 v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixpgZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA 8KCWAg8zxXHzniN9lLf9OtMJgwYh/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b 8KKaa8MFSu1BYBQw0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0r mj1AfsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq4BZ+Extq 1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR1VmiiXTTn74eS9fGbbeI JG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/QFH1T/U67cjF68IeHRaVesd+QnGTbksV tzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM94B7IWcnMFk= -----END CERTIFICATE----- Staat der Nederlanden EV Root CA ================================ -----BEGIN CERTIFICATE----- MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r 0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8 Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr 08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV 0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd 74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq 5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi 5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4 WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg== -----END CERTIFICATE----- IdenTrust Commercial Root CA 1 ============================== -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/ mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi 1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl 3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH 6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe 2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R cGzM7vRX+Bi6hG6H -----END CERTIFICATE----- IdenTrust Public Sector Root CA 1 ================================= -----BEGIN CERTIFICATE----- MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6 Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL 4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4 Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ 3Wl9af0AVqW3rLatt8o+Ae+c -----END CERTIFICATE----- Entrust Root Certification Authority - G2 ========================================= -----BEGIN CERTIFICATE----- MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP /vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6 0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+ vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO e4pIb4tF9g== -----END CERTIFICATE----- Entrust Root Certification Authority - EC1 ========================================== -----BEGIN CERTIFICATE----- MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef 9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8 kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G -----END CERTIFICATE----- CFCA EV ROOT ============ -----BEGIN CERTIFICATE----- MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD 7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7 xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB /wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua 4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su -----END CERTIFICATE----- TÜRKTRUST Elektronik Sertifika Hizmet SaÄŸlayıcısı H5 ========================================================= -----BEGIN CERTIFICATE----- MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1Qg RWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAw ODA3MDFaFw0yMzA0MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0w SwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnE n2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRp ZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEApCUZ4WWe60ghUEoI5RHwWrom/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537 jVJp45wnEFPzpALFp/kRGml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1m ep5Fimh34khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z5UNP 9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0hO8EuPbJbKoCPrZV 4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QIDAQABo0IwQDAdBgNVHQ4EFgQUVpkH HtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI hvcNAQELBQADggEBAJ5FdnsXSDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPo BP5yCccLqh0lVX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nfpeYVhDfwwvJl lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8 B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU= -----END CERTIFICATE----- TÜRKTRUST Elektronik Sertifika Hizmet SaÄŸlayıcısı H6 ========================================================= -----BEGIN CERTIFICATE----- MIIEJjCCAw6gAwIBAgIGfaHyZeyKMA0GCSqGSIb3DQEBCwUAMIGxMQswCQYDVQQGEwJUUjEPMA0G A1UEBwwGQW5rYXJhMU0wSwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBF bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg2MB4XDTEzMTIxODA5 MDQxMFoXDTIzMTIxNjA5MDQxMFowgbExCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExTTBL BgNVBAoMRFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSf aSBIaXptZXRsZXJpIEEuxZ4uMUIwQAYDVQQDDDlUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2VydGlm aWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLEgSDYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQCdsGjW6L0UlqMACprx9MfMkU1xeHe59yEmFXNRFpQJRwXiM/VomjX/3EsvMsew7eKC5W/a 2uqsxgbPJQ1BgfbBOCK9+bGlprMBvD9QFyv26WZV1DOzXPhDIHiTVRZwGTLmiddk671IUP320EED wnS3/faAz1vFq6TWlRKb55cTMgPp1KtDWxbtMyJkKbbSk60vbNg9tvYdDjTu0n2pVQ8g9P0pu5Fb HH3GQjhtQiht1AH7zYiXSX6484P4tZgvsycLSF5W506jM7NE1qXyGJTtHB6plVxiSvgNZ1GpryHV +DKdeboaX+UEVU0TRv/yz3THGmNtwx8XEsMeED5gCLMxAgMBAAGjQjBAMB0GA1UdDgQWBBTdVRcT 9qzoSCHK77Wv0QAy7Z6MtTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG 9w0BAQsFAAOCAQEAb1gNl0OqFlQ+v6nfkkU/hQu7VtMMUszIv3ZnXuaqs6fvuay0EBQNdH49ba3R fdCaqaXKGDsCQC4qnFAUi/5XfldcEQlLNkVS9z2sFP1E34uXI9TDwe7UU5X+LEr+DXCqu4svLcsy o4LyVN/Y8t3XSHLuSqMplsNEzm61kod2pLv0kmzOLBQJZo6NrRa1xxsJYTvjIKIDgI6tflEATseW hvtDmHd9KMeP2Cpu54Rvl0EpABZeTeIT6lnAY2c6RPuY/ATTMHKm9ocJV612ph1jmv3XZch4gyt1 O6VbuA1df74jrlZVlFjvH4GMKrLN5ptjnhi85WsGtAuYSyher4hYyw== -----END CERTIFICATE----- Certinomis - Root CA ==================== -----BEGIN CERTIFICATE----- MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjETMBEGA1UEChMK Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAbBgNVBAMTFENlcnRpbm9taXMg LSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMzMTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIx EzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRD ZXJ0aW5vbWlzIC0gUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQos P5L2fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJflLieY6pOo d5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQVWZUKxkd8aRi5pwP5ynap z8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDFTKWrteoB4owuZH9kb/2jJZOLyKIOSY00 8B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09x RLWtwHkziOC/7aOgFLScCbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE 6OXWk6RiwsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJwx3t FvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SGm/lg0h9tkQPTYKbV PZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4F2iw4lNVYC2vPsKD2NkJK/DAZNuH i5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZngWVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGj YzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I 6tNxIqSSaHh02TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/0KGRHCwPT5iV WVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWwF6YSjNRieOpWauwK0kDDPAUw Pk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZSg081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAX lCOotQqSD7J6wWAsOMwaplv/8gzjqh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJ y29SWwNyhlCVCNSNh4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9 Iff/ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8Vbtaw5Bng DwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwjY/M50n92Uaf0yKHxDHYi I0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nM cyrDflOR1m749fPH0FFNjkulW+YZFzvWgQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVr hkIGuUE= -----END CERTIFICATE----- composer-1.0.0-beta2/res/composer-schema.json000066400000000000000000000605671267577262200211410ustar00rootroot00000000000000{ "$schema": "http://json-schema.org/draft-04/schema#", "name": "Package", "type": "object", "additionalProperties": false, "required": [ "name", "description" ], "properties": { "name": { "type": "string", "description": "Package name, including 'vendor-name/' prefix." }, "type": { "description": "Package type, either 'library' for common packages, 'composer-plugin' for plugins, 'metapackage' for empty packages, or a custom type ([a-z0-9-]+) defined by whatever project this package applies to.", "type": "string" }, "target-dir": { "description": "DEPRECATED: Forces the package to be installed into the given subdirectory path. This is used for autoloading PSR-0 packages that do not contain their full path. Use forward slashes for cross-platform compatibility.", "type": "string" }, "description": { "type": "string", "description": "Short package description." }, "keywords": { "type": "array", "items": { "type": "string", "description": "A tag/keyword that this package relates to." } }, "homepage": { "type": "string", "description": "Homepage URL for the project.", "format": "uri" }, "version": { "type": "string", "description": "Package version, see https://getcomposer.org/doc/04-schema.md#version for more info on valid schemes." }, "time": { "type": "string", "description": "Package release date, in 'YYYY-MM-DD', 'YYYY-MM-DD HH:MM:SS' or 'YYYY-MM-DDTHH:MM:SSZ' format." }, "license": { "type": ["string", "array"], "description": "License name. Or an array of license names." }, "authors": { "type": "array", "description": "List of authors that contributed to the package. This is typically the main maintainers, not the full list.", "items": { "type": "object", "additionalProperties": false, "required": [ "name"], "properties": { "name": { "type": "string", "description": "Full name of the author." }, "email": { "type": "string", "description": "Email address of the author.", "format": "email" }, "homepage": { "type": "string", "description": "Homepage URL for the author.", "format": "uri" }, "role": { "type": "string", "description": "Author's role in the project." } } } }, "require": { "type": "object", "description": "This is a hash of package name (keys) and version constraints (values) that are required to run this package.", "additionalProperties": true }, "replace": { "type": "object", "description": "This is a hash of package name (keys) and version constraints (values) that can be replaced by this package.", "additionalProperties": true }, "conflict": { "type": "object", "description": "This is a hash of package name (keys) and version constraints (values) that conflict with this package.", "additionalProperties": true }, "provide": { "type": "object", "description": "This is a hash of package name (keys) and version constraints (values) that this package provides in addition to this package's name.", "additionalProperties": true }, "require-dev": { "type": "object", "description": "This is a hash of package name (keys) and version constraints (values) that this package requires for developing it (testing tools and such).", "additionalProperties": true }, "suggest": { "type": "object", "description": "This is a hash of package name (keys) and descriptions (values) that this package suggests work well with it (this will be suggested to the user during installation).", "additionalProperties": true }, "config": { "type": "object", "description": "Composer options.", "properties": { "process-timeout": { "type": "integer", "description": "The timeout in seconds for process executions, defaults to 300 (5mins)." }, "use-include-path": { "type": "boolean", "description": "If true, the Composer autoloader will also look for classes in the PHP include path." }, "preferred-install": { "type": ["string", "object"], "description": "The install method Composer will prefer to use, defaults to auto and can be any of source, dist, auto, or a hash of {\"pattern\": \"preference\"}." }, "notify-on-install": { "type": "boolean", "description": "Composer allows repositories to define a notification URL, so that they get notified whenever a package from that repository is installed. This option allows you to disable that behaviour, defaults to true." }, "github-protocols": { "type": "array", "description": "A list of protocols to use for github.com clones, in priority order, defaults to [\"git\", \"https\", \"http\"].", "items": { "type": "string" } }, "github-oauth": { "type": "object", "description": "A hash of domain name => github API oauth tokens, typically {\"github.com\":\"\"}.", "additionalProperties": true }, "gitlab-oauth": { "type": "object", "description": "A hash of domain name => gitlab API oauth tokens, typically {\"gitlab.com\":\"\"}.", "additionalProperties": true }, "disable-tls": { "type": "boolean", "description": "Defaults to `false`. If set to true all HTTPS URLs will be tried with HTTP instead and no network level encryption is performed. Enabling this is a security risk and is NOT recommended. The better way is to enable the php_openssl extension in php.ini." }, "secure-http": { "type": "boolean", "description": "Defaults to `true`. If set to true only HTTPS URLs are allowed to be downloaded via Composer. If you really absolutely need HTTP access to something then you can disable it, but using \"Let's Encrypt\" to get a free SSL certificate is generally a better alternative." }, "cafile": { "type": "string", "description": "A way to set the path to the openssl CA file. In PHP 5.6+ you should rather set this via openssl.cafile in php.ini, although PHP 5.6+ should be able to detect your system CA file automatically." }, "capath": { "type": "string", "description": "If cafile is not specified or if the certificate is not found there, the directory pointed to by capath is searched for a suitable certificate. capath must be a correctly hashed certificate directory." }, "http-basic": { "type": "object", "description": "A hash of domain name => {\"username\": \"...\", \"password\": \"...\"}.", "additionalProperties": true }, "store-auths": { "type": ["string", "boolean"], "description": "What to do after prompting for authentication, one of: true (store), false (do not store) or \"prompt\" (ask every time), defaults to prompt." }, "platform": { "type": "object", "description": "This is a hash of package name (keys) and version (values) that will be used to mock the platform packages on this machine.", "additionalProperties": true }, "vendor-dir": { "type": "string", "description": "The location where all packages are installed, defaults to \"vendor\"." }, "bin-dir": { "type": "string", "description": "The location where all binaries are linked, defaults to \"vendor/bin\"." }, "data-dir": { "type": "string", "description": "The location where old phar files are stored, defaults to \"$home\" except on XDG Base Directory compliant unixes." }, "cache-dir": { "type": "string", "description": "The location where all caches are located, defaults to \"~/.composer/cache\" on *nix and \"%LOCALAPPDATA%\\Composer\" on windows." }, "cache-files-dir": { "type": "string", "description": "The location where files (zip downloads) are cached, defaults to \"{$cache-dir}/files\"." }, "cache-repo-dir": { "type": "string", "description": "The location where repo (git/hg repo clones) are cached, defaults to \"{$cache-dir}/repo\"." }, "cache-vcs-dir": { "type": "string", "description": "The location where vcs infos (git clones, github api calls, etc. when reading vcs repos) are cached, defaults to \"{$cache-dir}/vcs\"." }, "cache-ttl": { "type": "integer", "description": "The default cache time-to-live, defaults to 15552000 (6 months)." }, "cache-files-ttl": { "type": "integer", "description": "The cache time-to-live for files, defaults to the value of cache-ttl." }, "cache-files-maxsize": { "type": ["string", "integer"], "description": "The cache max size for the files cache, defaults to \"300MiB\"." }, "bin-compat": { "enum": ["auto", "full"], "description": "The compatibility of the binaries, defaults to \"auto\" (automatically guessed) and can be \"full\" (compatible with both Windows and Unix-based systems)." }, "discard-changes": { "type": ["string", "boolean"], "description": "The default style of handling dirty updates, defaults to false and can be any of true, false or \"stash\"." }, "autoloader-suffix": { "type": "string", "description": "Optional string to be used as a suffix for the generated Composer autoloader. When null a random one will be generated." }, "optimize-autoloader": { "type": "boolean", "description": "Always optimize when dumping the autoloader." }, "prepend-autoloader": { "type": "boolean", "description": "If false, the composer autoloader will not be prepended to existing autoloaders, defaults to true." }, "classmap-authoritative": { "type": "boolean", "description": "If true, the composer autoloader will not scan the filesystem for classes that are not found in the class map, defaults to false." }, "github-domains": { "type": "array", "description": "A list of domains to use in github mode. This is used for GitHub Enterprise setups, defaults to [\"github.com\"].", "items": { "type": "string" } }, "github-expose-hostname": { "type": "boolean", "description": "Defaults to true. If set to false, the OAuth tokens created to access the github API will have a date instead of the machine hostname." }, "gitlab-domains": { "type": "array", "description": "A list of domains to use in gitlab mode. This is used for custom GitLab setups, defaults to [\"gitlab.com\"].", "items": { "type": "string" } }, "archive-format": { "type": "string", "description": "The default archiving format when not provided on cli, defaults to \"tar\"." }, "archive-dir": { "type": "string", "description": "The default archive path when not provided on cli, defaults to \".\"." } } }, "extra": { "type": ["object", "array"], "description": "Arbitrary extra data that can be used by plugins, for example, package of type composer-plugin may have a 'class' key defining an installer class name.", "additionalProperties": true }, "autoload": { "type": "object", "description": "Description of how the package can be autoloaded.", "properties": { "psr-0": { "type": "object", "description": "This is a hash of namespaces (keys) and the directories they can be found into (values, can be arrays of paths) by the autoloader.", "additionalProperties": true }, "psr-4": { "type": "object", "description": "This is a hash of namespaces (keys) and the PSR-4 directories they can map to (values, can be arrays of paths) by the autoloader.", "additionalProperties": true }, "classmap": { "type": "array", "description": "This is an array of directories that contain classes to be included in the class-map generation process." }, "files": { "type": "array", "description": "This is an array of files that are always required on every request." }, "exclude-from-classmap": { "type": "array", "description": "This is an array of patterns to exclude from autoload classmap generation. (e.g. \"exclude-from-classmap\": [\"/test/\", \"/tests/\", \"/Tests/\"]" } } }, "autoload-dev": { "type": "object", "description": "Description of additional autoload rules for development purpose (eg. a test suite).", "properties": { "psr-0": { "type": "object", "description": "This is a hash of namespaces (keys) and the directories they can be found into (values, can be arrays of paths) by the autoloader.", "additionalProperties": true }, "psr-4": { "type": "object", "description": "This is a hash of namespaces (keys) and the PSR-4 directories they can map to (values, can be arrays of paths) by the autoloader.", "additionalProperties": true }, "classmap": { "type": "array", "description": "This is an array of directories that contain classes to be included in the class-map generation process." }, "files": { "type": "array", "description": "This is an array of files that are always required on every request." } } }, "archive": { "type": ["object"], "description": "Options for creating package archives for distribution.", "properties": { "exclude": { "type": "array", "description": "A list of patterns for paths to exclude or include if prefixed with an exclamation mark." } } }, "repositories": { "type": ["object", "array"], "description": "A set of additional repositories where packages can be found.", "additionalProperties": true }, "minimum-stability": { "type": ["string"], "description": "The minimum stability the packages must have to be install-able. Possible values are: dev, alpha, beta, RC, stable.", "pattern": "^dev|alpha|beta|rc|RC|stable$" }, "prefer-stable": { "type": ["boolean"], "description": "If set to true, stable packages will be preferred to dev packages when possible, even if the minimum-stability allows unstable packages." }, "bin": { "type": ["array"], "description": "A set of files that should be treated as binaries and symlinked into bin-dir (from config).", "items": { "type": "string" } }, "include-path": { "type": ["array"], "description": "DEPRECATED: A list of directories which should get added to PHP's include path. This is only present to support legacy projects, and all new code should preferably use autoloading.", "items": { "type": "string" } }, "scripts": { "type": ["object"], "description": "Scripts listeners that will be executed before/after some events.", "properties": { "pre-install-cmd": { "type": ["array", "string"], "description": "Occurs before the install command is executed, contains one or more Class::method callables or shell commands." }, "post-install-cmd": { "type": ["array", "string"], "description": "Occurs after the install command is executed, contains one or more Class::method callables or shell commands." }, "pre-update-cmd": { "type": ["array", "string"], "description": "Occurs before the update command is executed, contains one or more Class::method callables or shell commands." }, "post-update-cmd": { "type": ["array", "string"], "description": "Occurs after the update command is executed, contains one or more Class::method callables or shell commands." }, "pre-status-cmd": { "type": ["array", "string"], "description": "Occurs before the status command is executed, contains one or more Class::method callables or shell commands." }, "post-status-cmd": { "type": ["array", "string"], "description": "Occurs after the status command is executed, contains one or more Class::method callables or shell commands." }, "pre-package-install": { "type": ["array", "string"], "description": "Occurs before a package is installed, contains one or more Class::method callables or shell commands." }, "post-package-install": { "type": ["array", "string"], "description": "Occurs after a package is installed, contains one or more Class::method callables or shell commands." }, "pre-package-update": { "type": ["array", "string"], "description": "Occurs before a package is updated, contains one or more Class::method callables or shell commands." }, "post-package-update": { "type": ["array", "string"], "description": "Occurs after a package is updated, contains one or more Class::method callables or shell commands." }, "pre-package-uninstall": { "type": ["array", "string"], "description": "Occurs before a package has been uninstalled, contains one or more Class::method callables or shell commands." }, "post-package-uninstall": { "type": ["array", "string"], "description": "Occurs after a package has been uninstalled, contains one or more Class::method callables or shell commands." }, "pre-autoload-dump": { "type": ["array", "string"], "description": "Occurs before the autoloader is dumped, contains one or more Class::method callables or shell commands." }, "post-autoload-dump": { "type": ["array", "string"], "description": "Occurs after the autoloader is dumped, contains one or more Class::method callables or shell commands." }, "post-root-package-install": { "type": ["array", "string"], "description": "Occurs after the root-package is installed, contains one or more Class::method callables or shell commands." }, "post-create-project-cmd": { "type": ["array", "string"], "description": "Occurs after the create-project command is executed, contains one or more Class::method callables or shell commands." } } }, "support": { "type": "object", "properties": { "email": { "type": "string", "description": "Email address for support.", "format": "email" }, "issues": { "type": "string", "description": "URL to the issue tracker.", "format": "uri" }, "forum": { "type": "string", "description": "URL to the forum.", "format": "uri" }, "wiki": { "type": "string", "description": "URL to the wiki.", "format": "uri" }, "irc": { "type": "string", "description": "IRC channel for support, as irc://server/channel.", "format": "uri" }, "source": { "type": "string", "description": "URL to browse or download the sources.", "format": "uri" }, "docs": { "type": "string", "description": "URL to the documentation.", "format": "uri" } } }, "non-feature-branches": { "type": ["array"], "description": "A set of string or regex patterns for non-numeric branch names that will not be handled as feature branches.", "items": { "type": "string" } }, "abandoned": { "type": ["boolean", "string"], "description": "Indicates whether this package has been abandoned, it can be boolean or a package name/URL pointing to a recommended alternative. Defaults to false." } } } composer-1.0.0-beta2/src/000077500000000000000000000000001267577262200151415ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/000077500000000000000000000000001267577262200167305ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/Autoload/000077500000000000000000000000001267577262200205005ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/Autoload/AutoloadGenerator.php000066400000000000000000000712711267577262200246400ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Autoload; use Composer\Config; use Composer\EventDispatcher\EventDispatcher; use Composer\Installer\InstallationManager; use Composer\IO\IOInterface; use Composer\Package\AliasPackage; use Composer\Package\PackageInterface; use Composer\Repository\InstalledRepositoryInterface; use Composer\Util\Filesystem; use Composer\Script\ScriptEvents; /** * @author Igor Wiedler * @author Jordi Boggiano */ class AutoloadGenerator { /** * @var EventDispatcher */ private $eventDispatcher; /** * @var IOInterface */ private $io; /** * @var bool */ private $devMode = false; /** * @var bool */ private $classMapAuthoritative = false; /** * @var bool */ private $runScripts = false; public function __construct(EventDispatcher $eventDispatcher, IOInterface $io = null) { $this->eventDispatcher = $eventDispatcher; $this->io = $io; } public function setDevMode($devMode = true) { $this->devMode = (boolean) $devMode; } /** * Whether or not generated autoloader considers the class map * authoritative. * * @param bool $classMapAuthoritative */ public function setClassMapAuthoritative($classMapAuthoritative) { $this->classMapAuthoritative = (boolean) $classMapAuthoritative; } /** * Set whether to run scripts or not * * @param bool $runScripts */ public function setRunScripts($runScripts = true) { $this->runScripts = (boolean) $runScripts; } public function dump(Config $config, InstalledRepositoryInterface $localRepo, PackageInterface $mainPackage, InstallationManager $installationManager, $targetDir, $scanPsr0Packages = false, $suffix = '') { if ($this->classMapAuthoritative) { // Force scanPsr0Packages when classmap is authoritative $scanPsr0Packages = true; } if ($this->runScripts) { $this->eventDispatcher->dispatchScript(ScriptEvents::PRE_AUTOLOAD_DUMP, $this->devMode, array(), array( 'optimize' => (bool) $scanPsr0Packages, )); } $filesystem = new Filesystem(); $filesystem->ensureDirectoryExists($config->get('vendor-dir')); $basePath = $filesystem->normalizePath(realpath(getcwd())); $vendorPath = $filesystem->normalizePath(realpath($config->get('vendor-dir'))); $useGlobalIncludePath = (bool) $config->get('use-include-path'); $prependAutoloader = $config->get('prepend-autoloader') === false ? 'false' : 'true'; $targetDir = $vendorPath.'/'.$targetDir; $filesystem->ensureDirectoryExists($targetDir); $vendorPathCode = $filesystem->findShortestPathCode(realpath($targetDir), $vendorPath, true); $vendorPathCode52 = str_replace('__DIR__', 'dirname(__FILE__)', $vendorPathCode); $vendorPathToTargetDirCode = $filesystem->findShortestPathCode($vendorPath, realpath($targetDir), true); $appBaseDirCode = $filesystem->findShortestPathCode($vendorPath, $basePath, true); $appBaseDirCode = str_replace('__DIR__', '$vendorDir', $appBaseDirCode); $namespacesFile = <<buildPackageMap($installationManager, $mainPackage, $localRepo->getCanonicalPackages()); $autoloads = $this->parseAutoloads($packageMap, $mainPackage); // Process the 'psr-0' base directories. foreach ($autoloads['psr-0'] as $namespace => $paths) { $exportedPaths = array(); foreach ($paths as $path) { $exportedPaths[] = $this->getPathCode($filesystem, $basePath, $vendorPath, $path); } $exportedPrefix = var_export($namespace, true); $namespacesFile .= " $exportedPrefix => "; $namespacesFile .= "array(".implode(', ', $exportedPaths)."),\n"; } $namespacesFile .= ");\n"; // Process the 'psr-4' base directories. foreach ($autoloads['psr-4'] as $namespace => $paths) { $exportedPaths = array(); foreach ($paths as $path) { $exportedPaths[] = $this->getPathCode($filesystem, $basePath, $vendorPath, $path); } $exportedPrefix = var_export($namespace, true); $psr4File .= " $exportedPrefix => "; $psr4File .= "array(".implode(', ', $exportedPaths)."),\n"; } $psr4File .= ");\n"; $classmapFile = <<getAutoload(); if ($mainPackage->getTargetDir() && !empty($mainAutoload['psr-0'])) { $levels = count(explode('/', $filesystem->normalizePath($mainPackage->getTargetDir()))); $prefixes = implode(', ', array_map(function ($prefix) { return var_export($prefix, true); }, array_keys($mainAutoload['psr-0']))); $baseDirFromTargetDirCode = $filesystem->findShortestPathCode($targetDir, $basePath, true); $targetDirLoader = << $paths) { $namespacesToScan[$namespace][] = array('paths' => $paths, 'type' => $psrType); } } krsort($namespacesToScan); foreach ($namespacesToScan as $namespace => $groups) { foreach ($groups as $group) { $psrType = $group['type']; foreach ($group['paths'] as $dir) { $dir = $filesystem->normalizePath($filesystem->isAbsolutePath($dir) ? $dir : $basePath.'/'.$dir); if (!is_dir($dir)) { continue; } $namespaceFilter = $namespace === '' ? null : $namespace; $classMap = $this->addClassMapCode($filesystem, $basePath, $vendorPath, $dir, $blacklist, $namespaceFilter, $classMap); } } } } foreach ($autoloads['classmap'] as $dir) { $classMap = $this->addClassMapCode($filesystem, $basePath, $vendorPath, $dir, $blacklist, null, $classMap); } ksort($classMap); foreach ($classMap as $class => $code) { $classmapFile .= ' '.var_export($class, true).' => '.$code; } $classmapFile .= ");\n"; if (!$suffix) { if (!$config->get('autoloader-suffix') && is_readable($vendorPath.'/autoload.php')) { $content = file_get_contents($vendorPath.'/autoload.php'); if (preg_match('{ComposerAutoloaderInit([^:\s]+)::}', $content, $match)) { $suffix = $match[1]; } } if (!$suffix) { $suffix = $config->get('autoloader-suffix') ?: md5(uniqid('', true)); } } file_put_contents($targetDir.'/autoload_namespaces.php', $namespacesFile); file_put_contents($targetDir.'/autoload_psr4.php', $psr4File); file_put_contents($targetDir.'/autoload_classmap.php', $classmapFile); $includePathFilePath = $targetDir.'/include_paths.php'; if ($includePathFileContents = $this->getIncludePathsFile($packageMap, $filesystem, $basePath, $vendorPath, $vendorPathCode52, $appBaseDirCode)) { file_put_contents($includePathFilePath, $includePathFileContents); } elseif (file_exists($includePathFilePath)) { unlink($includePathFilePath); } $includeFilesFilePath = $targetDir.'/autoload_files.php'; if ($includeFilesFileContents = $this->getIncludeFilesFile($autoloads['files'], $filesystem, $basePath, $vendorPath, $vendorPathCode52, $appBaseDirCode)) { file_put_contents($includeFilesFilePath, $includeFilesFileContents); } elseif (file_exists($includeFilesFilePath)) { unlink($includeFilesFilePath); } file_put_contents($vendorPath.'/autoload.php', $this->getAutoloadFile($vendorPathToTargetDirCode, $suffix)); file_put_contents($targetDir.'/autoload_real.php', $this->getAutoloadRealFile(true, (bool) $includePathFileContents, $targetDirLoader, (bool) $includeFilesFileContents, $vendorPathCode, $appBaseDirCode, $suffix, $useGlobalIncludePath, $prependAutoloader)); $this->safeCopy(__DIR__.'/ClassLoader.php', $targetDir.'/ClassLoader.php'); $this->safeCopy(__DIR__.'/../../../LICENSE', $targetDir.'/LICENSE'); if ($this->runScripts) { $this->eventDispatcher->dispatchScript(ScriptEvents::POST_AUTOLOAD_DUMP, $this->devMode, array(), array( 'optimize' => (bool) $scanPsr0Packages, )); } } private function addClassMapCode($filesystem, $basePath, $vendorPath, $dir, $blacklist = null, $namespaceFilter = null, array $classMap = array()) { foreach ($this->generateClassMap($dir, $blacklist, $namespaceFilter) as $class => $path) { $pathCode = $this->getPathCode($filesystem, $basePath, $vendorPath, $path).",\n"; if (!isset($classMap[$class])) { $classMap[$class] = $pathCode; } elseif ($this->io && $classMap[$class] !== $pathCode && !preg_match('{/(test|fixture|example|stub)s?/}i', strtr($classMap[$class].' '.$path, '\\', '/'))) { $this->io->writeError( 'Warning: Ambiguous class resolution, "'.$class.'"'. ' was found in both "'.str_replace(array('$vendorDir . \'', "',\n"), array($vendorPath, ''), $classMap[$class]).'" and "'.$path.'", the first will be used.' ); } } return $classMap; } private function generateClassMap($dir, $blacklist = null, $namespaceFilter = null, $showAmbiguousWarning = true) { return ClassMapGenerator::createMap($dir, $blacklist, $showAmbiguousWarning ? $this->io : null, $namespaceFilter); } public function buildPackageMap(InstallationManager $installationManager, PackageInterface $mainPackage, array $packages) { // build package => install path map $packageMap = array(array($mainPackage, '')); foreach ($packages as $package) { if ($package instanceof AliasPackage) { continue; } $this->validatePackage($package); $packageMap[] = array( $package, $installationManager->getInstallPath($package), ); } return $packageMap; } /** * @param PackageInterface $package * * @throws \InvalidArgumentException Throws an exception, if the package has illegal settings. */ protected function validatePackage(PackageInterface $package) { $autoload = $package->getAutoload(); if (!empty($autoload['psr-4']) && null !== $package->getTargetDir()) { $name = $package->getName(); $package->getTargetDir(); throw new \InvalidArgumentException("PSR-4 autoloading is incompatible with the target-dir property, remove the target-dir in package '$name'."); } if (!empty($autoload['psr-4'])) { foreach ($autoload['psr-4'] as $namespace => $dirs) { if ($namespace !== '' && '\\' !== substr($namespace, -1)) { throw new \InvalidArgumentException("psr-4 namespaces must end with a namespace separator, '$namespace' does not, use '$namespace\\'."); } } } } /** * Compiles an ordered list of namespace => path mappings * * @param array $packageMap array of array(package, installDir-relative-to-composer.json) * @param PackageInterface $mainPackage root package instance * @return array array('psr-0' => array('Ns\\Foo' => array('installDir'))) */ public function parseAutoloads(array $packageMap, PackageInterface $mainPackage) { $mainPackageMap = array_shift($packageMap); $sortedPackageMap = $this->sortPackageMap($packageMap); $sortedPackageMap[] = $mainPackageMap; array_unshift($packageMap, $mainPackageMap); $psr0 = $this->parseAutoloadsType($packageMap, 'psr-0', $mainPackage); $psr4 = $this->parseAutoloadsType($packageMap, 'psr-4', $mainPackage); $classmap = $this->parseAutoloadsType(array_reverse($sortedPackageMap), 'classmap', $mainPackage); $files = $this->parseAutoloadsType($sortedPackageMap, 'files', $mainPackage); $exclude = $this->parseAutoloadsType($sortedPackageMap, 'exclude-from-classmap', $mainPackage); krsort($psr0); krsort($psr4); return array( 'psr-0' => $psr0, 'psr-4' => $psr4, 'classmap' => $classmap, 'files' => $files, 'exclude-from-classmap' => $exclude, ); } /** * Registers an autoloader based on an autoload map returned by parseAutoloads * * @param array $autoloads see parseAutoloads return value * @return ClassLoader */ public function createLoader(array $autoloads) { $loader = new ClassLoader(); if (isset($autoloads['psr-0'])) { foreach ($autoloads['psr-0'] as $namespace => $path) { $loader->add($namespace, $path); } } if (isset($autoloads['psr-4'])) { foreach ($autoloads['psr-4'] as $namespace => $path) { $loader->addPsr4($namespace, $path); } } if (isset($autoloads['classmap'])) { foreach ($autoloads['classmap'] as $dir) { try { $loader->addClassMap($this->generateClassMap($dir, null, null, false)); } catch (\RuntimeException $e) { $this->io->writeError(''.$e->getMessage().''); } } } return $loader; } protected function getIncludePathsFile(array $packageMap, Filesystem $filesystem, $basePath, $vendorPath, $vendorPathCode, $appBaseDirCode) { $includePaths = array(); foreach ($packageMap as $item) { list($package, $installPath) = $item; if (null !== $package->getTargetDir() && strlen($package->getTargetDir()) > 0) { $installPath = substr($installPath, 0, -strlen('/'.$package->getTargetDir())); } foreach ($package->getIncludePaths() as $includePath) { $includePath = trim($includePath, '/'); $includePaths[] = empty($installPath) ? $includePath : $installPath.'/'.$includePath; } } if (!$includePaths) { return; } $includePathsCode = ''; foreach ($includePaths as $path) { $includePathsCode .= " " . $this->getPathCode($filesystem, $basePath, $vendorPath, $path) . ",\n"; } return << $functionFile) { $filesCode .= ' ' . var_export($fileIdentifier, true) . ' => ' . $this->getPathCode($filesystem, $basePath, $vendorPath, $functionFile) . ",\n"; } if (!$filesCode) { return false; } return <<isAbsolutePath($path)) { $path = $basePath . '/' . $path; } $path = $filesystem->normalizePath($path); $baseDir = ''; if (strpos($path.'/', $vendorPath.'/') === 0) { $path = substr($path, strlen($vendorPath)); $baseDir = '$vendorDir'; if ($path !== false) { $baseDir .= " . "; } } else { $path = $filesystem->normalizePath($filesystem->findShortestPath($basePath, $path, true)); if (!$filesystem->isAbsolutePath($path)) { $baseDir = '$baseDir . '; $path = '/' . $path; } } if (preg_match('/\.phar$/', $path)) { $baseDir = "'phar://' . " . $baseDir; } return $baseDir . (($path !== false) ? var_export($path, true) : ""); } protected function getAutoloadFile($vendorPathToTargetDirCode, $suffix) { return <<classMapAuthoritative) { $file .= <<<'PSR04' $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { $loader->set($namespace, $path); } $map = require __DIR__ . '/autoload_psr4.php'; foreach ($map as $namespace => $path) { $loader->setPsr4($namespace, $path); } PSR04; } if ($useClassMap) { $file .= <<<'CLASSMAP' $classMap = require __DIR__ . '/autoload_classmap.php'; if ($classMap) { $loader->addClassMap($classMap); } CLASSMAP; } if ($this->classMapAuthoritative) { $file .= <<<'CLASSMAPAUTHORITATIVE' $loader->setClassMapAuthoritative(true); CLASSMAPAUTHORITATIVE; } if ($useGlobalIncludePath) { $file .= <<<'INCLUDEPATH' $loader->setUseIncludePath(true); INCLUDEPATH; } if ($targetDirLoader) { $file .= <<register($prependAutoloader); REGISTER_LOADER; if ($useIncludeFiles) { $file .= << \$file) { composerRequire$suffix(\$fileIdentifier, \$file); } INCLUDE_FILES; } $file .= <<getAutoload(); if ($this->devMode && $package === $mainPackage) { $autoload = array_merge_recursive($autoload, $package->getDevAutoload()); } // skip misconfigured packages if (!isset($autoload[$type]) || !is_array($autoload[$type])) { continue; } if (null !== $package->getTargetDir() && $package !== $mainPackage) { $installPath = substr($installPath, 0, -strlen('/'.$package->getTargetDir())); } foreach ($autoload[$type] as $namespace => $paths) { foreach ((array) $paths as $path) { if (($type === 'files' || $type === 'classmap' || $type === 'exclude-from-classmap') && $package->getTargetDir() && !is_readable($installPath.'/'.$path)) { // remove target-dir from file paths of the root package if ($package === $mainPackage) { $targetDir = str_replace('\\', '[\\\\/]', preg_quote(str_replace(array('/', '\\'), '', $package->getTargetDir()))); $path = ltrim(preg_replace('{^'.$targetDir.'}', '', ltrim($path, '\\/')), '\\/'); } else { // add target-dir from file paths that don't have it $path = $package->getTargetDir() . '/' . $path; } } if ($type === 'exclude-from-classmap') { // first escape user input $path = preg_quote(trim(strtr($path, '\\', '/'), '/')); // add support for wildcards * and ** $path = str_replace('\\*\\*', '.+?', $path); $path = str_replace('\\*', '[^/]+?', $path); // add support for up-level relative paths $updir = null; $path = preg_replace_callback( '{^((?:(?:\\\\\\.){1,2}+/)+)}', function ($matches) use (&$updir) { if (isset($matches[1])) { // undo preg_quote for the matched string $updir = str_replace('\\.', '.', $matches[1]); } return ''; }, $path ); if (empty($installPath)) { $installPath = strtr(getcwd(), '\\', '/'); } $resolvedPath = realpath($installPath . '/' . $updir); $autoloads[] = preg_quote(strtr($resolvedPath, '\\', '/')) . '/' . $path; continue; } $relativePath = empty($installPath) ? (empty($path) ? '.' : $path) : $installPath.'/'.$path; if ($type === 'files') { $autoloads[$this->getFileIdentifier($package, $path)] = $relativePath; continue; } elseif ($type === 'classmap') { $autoloads[] = $relativePath; continue; } $autoloads[$namespace][] = $relativePath; } } } return $autoloads; } protected function getFileIdentifier(PackageInterface $package, $path) { return md5($package->getName() . ':' . $path); } /** * Sorts packages by dependency weight * * Packages of equal weight retain the original order * * @param array $packageMap * @return array */ protected function sortPackageMap(array $packageMap) { $packages = array(); $paths = array(); $usageList = array(); foreach ($packageMap as $item) { list($package, $path) = $item; $name = $package->getName(); $packages[$name] = $package; $paths[$name] = $path; foreach (array_merge($package->getRequires(), $package->getDevRequires()) as $link) { $target = $link->getTarget(); $usageList[$target][] = $name; } } $computing = array(); $computed = array(); $computeImportance = function ($name) use (&$computeImportance, &$computing, &$computed, $usageList) { // reusing computed importance if (isset($computed[$name])) { return $computed[$name]; } // canceling circular dependency if (isset($computing[$name])) { return 0; } $computing[$name] = true; $weight = 0; if (isset($usageList[$name])) { foreach ($usageList[$name] as $user) { $weight -= 1 - $computeImportance($user); } } unset($computing[$name]); $computed[$name] = $weight; return $weight; }; $weightList = array(); foreach ($packages as $name => $package) { $weight = $computeImportance($name); $weightList[$name] = $weight; } $stable_sort = function (&$array) { static $transform, $restore; $i = 0; if (!$transform) { $transform = function (&$v, $k) use (&$i) { $v = array($v, ++$i, $k, $v); }; $restore = function (&$v, $k) { $v = $v[3]; }; } array_walk($array, $transform); asort($array); array_walk($array, $restore); }; $stable_sort($weightList); $sortedPackageMap = array(); foreach (array_keys($weightList) as $name) { $sortedPackageMap[] = array($packages[$name], $paths[$name]); } return $sortedPackageMap; } /** * Copy file using stream_copy_to_stream to work around https://bugs.php.net/bug.php?id=6463 * * @param string $source * @param string $target */ protected function safeCopy($source, $target) { $source = fopen($source, 'r'); $target = fopen($target, 'w+'); stream_copy_to_stream($source, $target); fclose($source); fclose($target); } } composer-1.0.0-beta2/src/Composer/Autoload/ClassLoader.php000066400000000000000000000302621267577262200234100ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Autoload; /** * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. * * $loader = new \Composer\Autoload\ClassLoader(); * * // register classes with namespaces * $loader->add('Symfony\Component', __DIR__.'/component'); * $loader->add('Symfony', __DIR__.'/framework'); * * // activate the autoloader * $loader->register(); * * // to enable searching the include path (eg. for PEAR packages) * $loader->setUseIncludePath(true); * * In this example, if you try to use a class in the Symfony\Component * namespace or one of its children (Symfony\Component\Console for instance), * the autoloader will first look for the class under the component/ * directory, and it will then fallback to the framework/ directory if not * found before giving up. * * This class is loosely based on the Symfony UniversalClassLoader. * * @author Fabien Potencier * @author Jordi Boggiano * @see http://www.php-fig.org/psr/psr-0/ * @see http://www.php-fig.org/psr/psr-4/ */ class ClassLoader { // PSR-4 private $prefixLengthsPsr4 = array(); private $prefixDirsPsr4 = array(); private $fallbackDirsPsr4 = array(); // PSR-0 private $prefixesPsr0 = array(); private $fallbackDirsPsr0 = array(); private $useIncludePath = false; private $classMap = array(); private $classMapAuthoritative = false; public function getPrefixes() { if (!empty($this->prefixesPsr0)) { return call_user_func_array('array_merge', $this->prefixesPsr0); } return array(); } public function getPrefixesPsr4() { return $this->prefixDirsPsr4; } public function getFallbackDirs() { return $this->fallbackDirsPsr0; } public function getFallbackDirsPsr4() { return $this->fallbackDirsPsr4; } public function getClassMap() { return $this->classMap; } /** * @param array $classMap Class to filename map */ public function addClassMap(array $classMap) { if ($this->classMap) { $this->classMap = array_merge($this->classMap, $classMap); } else { $this->classMap = $classMap; } } /** * Registers a set of PSR-0 directories for a given prefix, either * appending or prepending to the ones previously set for this prefix. * * @param string $prefix The prefix * @param array|string $paths The PSR-0 root directories * @param bool $prepend Whether to prepend the directories */ public function add($prefix, $paths, $prepend = false) { if (!$prefix) { if ($prepend) { $this->fallbackDirsPsr0 = array_merge( (array) $paths, $this->fallbackDirsPsr0 ); } else { $this->fallbackDirsPsr0 = array_merge( $this->fallbackDirsPsr0, (array) $paths ); } return; } $first = $prefix[0]; if (!isset($this->prefixesPsr0[$first][$prefix])) { $this->prefixesPsr0[$first][$prefix] = (array) $paths; return; } if ($prepend) { $this->prefixesPsr0[$first][$prefix] = array_merge( (array) $paths, $this->prefixesPsr0[$first][$prefix] ); } else { $this->prefixesPsr0[$first][$prefix] = array_merge( $this->prefixesPsr0[$first][$prefix], (array) $paths ); } } /** * Registers a set of PSR-4 directories for a given namespace, either * appending or prepending to the ones previously set for this namespace. * * @param string $prefix The prefix/namespace, with trailing '\\' * @param array|string $paths The PSR-4 base directories * @param bool $prepend Whether to prepend the directories * * @throws \InvalidArgumentException */ public function addPsr4($prefix, $paths, $prepend = false) { if (!$prefix) { // Register directories for the root namespace. if ($prepend) { $this->fallbackDirsPsr4 = array_merge( (array) $paths, $this->fallbackDirsPsr4 ); } else { $this->fallbackDirsPsr4 = array_merge( $this->fallbackDirsPsr4, (array) $paths ); } } elseif (!isset($this->prefixDirsPsr4[$prefix])) { // Register directories for a new namespace. $length = strlen($prefix); if ('\\' !== $prefix[$length - 1]) { throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); } $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; $this->prefixDirsPsr4[$prefix] = (array) $paths; } elseif ($prepend) { // Prepend directories for an already registered namespace. $this->prefixDirsPsr4[$prefix] = array_merge( (array) $paths, $this->prefixDirsPsr4[$prefix] ); } else { // Append directories for an already registered namespace. $this->prefixDirsPsr4[$prefix] = array_merge( $this->prefixDirsPsr4[$prefix], (array) $paths ); } } /** * Registers a set of PSR-0 directories for a given prefix, * replacing any others previously set for this prefix. * * @param string $prefix The prefix * @param array|string $paths The PSR-0 base directories */ public function set($prefix, $paths) { if (!$prefix) { $this->fallbackDirsPsr0 = (array) $paths; } else { $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; } } /** * Registers a set of PSR-4 directories for a given namespace, * replacing any others previously set for this namespace. * * @param string $prefix The prefix/namespace, with trailing '\\' * @param array|string $paths The PSR-4 base directories * * @throws \InvalidArgumentException */ public function setPsr4($prefix, $paths) { if (!$prefix) { $this->fallbackDirsPsr4 = (array) $paths; } else { $length = strlen($prefix); if ('\\' !== $prefix[$length - 1]) { throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); } $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; $this->prefixDirsPsr4[$prefix] = (array) $paths; } } /** * Turns on searching the include path for class files. * * @param bool $useIncludePath */ public function setUseIncludePath($useIncludePath) { $this->useIncludePath = $useIncludePath; } /** * Can be used to check if the autoloader uses the include path to check * for classes. * * @return bool */ public function getUseIncludePath() { return $this->useIncludePath; } /** * Turns off searching the prefix and fallback directories for classes * that have not been registered with the class map. * * @param bool $classMapAuthoritative */ public function setClassMapAuthoritative($classMapAuthoritative) { $this->classMapAuthoritative = $classMapAuthoritative; } /** * Should class lookup fail if not found in the current class map? * * @return bool */ public function isClassMapAuthoritative() { return $this->classMapAuthoritative; } /** * Registers this instance as an autoloader. * * @param bool $prepend Whether to prepend the autoloader or not */ public function register($prepend = false) { spl_autoload_register(array($this, 'loadClass'), true, $prepend); } /** * Unregisters this instance as an autoloader. */ public function unregister() { spl_autoload_unregister(array($this, 'loadClass')); } /** * Loads the given class or interface. * * @param string $class The name of the class * @return bool|null True if loaded, null otherwise */ public function loadClass($class) { if ($file = $this->findFile($class)) { includeFile($file); return true; } } /** * Finds the path to the file where the class is defined. * * @param string $class The name of the class * * @return string|false The path if found, false otherwise */ public function findFile($class) { // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731 if ('\\' == $class[0]) { $class = substr($class, 1); } // class map lookup if (isset($this->classMap[$class])) { return $this->classMap[$class]; } if ($this->classMapAuthoritative) { return false; } $file = $this->findFileWithExtension($class, '.php'); // Search for Hack files if we are running on HHVM if ($file === null && defined('HHVM_VERSION')) { $file = $this->findFileWithExtension($class, '.hh'); } if ($file === null) { // Remember that this class does not exist. return $this->classMap[$class] = false; } return $file; } private function findFileWithExtension($class, $ext) { // PSR-4 lookup $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; $first = $class[0]; if (isset($this->prefixLengthsPsr4[$first])) { foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) { if (0 === strpos($class, $prefix)) { foreach ($this->prefixDirsPsr4[$prefix] as $dir) { if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) { return $file; } } } } } // PSR-4 fallback dirs foreach ($this->fallbackDirsPsr4 as $dir) { if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { return $file; } } // PSR-0 lookup if (false !== $pos = strrpos($class, '\\')) { // namespaced class name $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); } else { // PEAR-like class name $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; } if (isset($this->prefixesPsr0[$first])) { foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { if (0 === strpos($class, $prefix)) { foreach ($dirs as $dir) { if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { return $file; } } } } } // PSR-0 fallback dirs foreach ($this->fallbackDirsPsr0 as $dir) { if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { return $file; } } // PSR-0 include paths. if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { return $file; } } } /** * Scope isolated include. * * Prevents access to $this/self from included files. */ function includeFile($file) { include $file; } composer-1.0.0-beta2/src/Composer/Autoload/ClassMapGenerator.php000066400000000000000000000167521267577262200245760ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ /* * This file is copied from the Symfony package. * * (c) Fabien Potencier */ namespace Composer\Autoload; use Symfony\Component\Finder\Finder; use Composer\IO\IOInterface; /** * ClassMapGenerator * * @author Gyula Sallai * @author Jordi Boggiano */ class ClassMapGenerator { /** * Generate a class map file * * @param \Traversable $dirs Directories or a single path to search in * @param string $file The name of the class map file */ public static function dump($dirs, $file) { $maps = array(); foreach ($dirs as $dir) { $maps = array_merge($maps, static::createMap($dir)); } file_put_contents($file, sprintf('files()->followLinks()->name('/\.(php|inc|hh)$/')->in($path); } else { throw new \RuntimeException( 'Could not scan for classes inside "'.$path. '" which does not appear to be a file nor a folder' ); } } $map = array(); foreach ($path as $file) { $filePath = $file->getRealPath(); if (!in_array(pathinfo($filePath, PATHINFO_EXTENSION), array('php', 'inc', 'hh'))) { continue; } if ($blacklist && preg_match($blacklist, strtr($filePath, '\\', '/'))) { continue; } $classes = self::findClasses($filePath); foreach ($classes as $class) { // skip classes not within the given namespace prefix if (null !== $namespace && 0 !== strpos($class, $namespace)) { continue; } if (!isset($map[$class])) { $map[$class] = $filePath; } elseif ($io && $map[$class] !== $filePath && !preg_match('{/(test|fixture|example|stub)s?/}i', strtr($map[$class].' '.$filePath, '\\', '/'))) { $io->writeError( 'Warning: Ambiguous class resolution, "'.$class.'"'. ' was found in both "'.$map[$class].'" and "'.$filePath.'", the first will be used.' ); } } } return $map; } /** * Extract the classes in the given file * * @param string $path The file to check * @throws \RuntimeException * @return array The found classes */ private static function findClasses($path) { $extraTypes = PHP_VERSION_ID < 50400 ? '' : '|trait'; if (defined('HHVM_VERSION') && version_compare(HHVM_VERSION, '3.3', '>=')) { $extraTypes .= '|enum'; } // Use @ here instead of Silencer to actively suppress 'unhelpful' output // @link https://github.com/composer/composer/pull/4886 $contents = @php_strip_whitespace($path); if (!$contents) { if (!file_exists($path)) { $message = 'File at "%s" does not exist, check your classmap definitions'; } elseif (!is_readable($path)) { $message = 'File at "%s" is not readable, check its permissions'; } elseif ('' === trim(file_get_contents($path))) { // The input file was really empty and thus contains no classes return array(); } else { $message = 'File at "%s" could not be parsed as PHP, it may be binary or corrupted'; } $error = error_get_last(); if (isset($error['message'])) { $message .= PHP_EOL . 'The following message may be helpful:' . PHP_EOL . $error['message']; } throw new \RuntimeException(sprintf($message, $path)); } // return early if there is no chance of matching anything in this file if (!preg_match('{\b(?:class|interface'.$extraTypes.')\s}i', $contents)) { return array(); } // strip heredocs/nowdocs $contents = preg_replace('{<<<\s*(\'?)(\w+)\\1(?:\r\n|\n|\r)(?:.*?)(?:\r\n|\n|\r)\\2(?=\r\n|\n|\r|;)}s', 'null', $contents); // strip strings $contents = preg_replace('{"[^"\\\\]*+(\\\\.[^"\\\\]*+)*+"|\'[^\'\\\\]*+(\\\\.[^\'\\\\]*+)*+\'}s', 'null', $contents); // strip leading non-php code if needed if (substr($contents, 0, 2) !== '.+<\?}s', '?>'); if (false !== $pos && false === strpos(substr($contents, $pos), '])(?Pclass|interface'.$extraTypes.') \s++ (?P[a-zA-Z_\x7f-\xff:][a-zA-Z0-9_\x7f-\xff:\-]*+) | \b(?])(?Pnamespace) (?P\s++[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+(?:\s*+\\\\\s*+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+)*+)? \s*+ [\{;] ) }ix', $contents, $matches); $classes = array(); $namespace = ''; for ($i = 0, $len = count($matches['type']); $i < $len; $i++) { if (!empty($matches['ns'][$i])) { $namespace = str_replace(array(' ', "\t", "\r", "\n"), '', $matches['nsname'][$i]) . '\\'; } else { $name = $matches['name'][$i]; if ($name[0] === ':') { // This is an XHP class, https://github.com/facebook/xhp $name = 'xhp'.substr(str_replace(array('-', ':'), array('_', '__'), $name), 1); } elseif ($matches['type'][$i] === 'enum') { // In Hack, something like: // enum Foo: int { HERP = '123'; } // The regex above captures the colon, which isn't part of // the class name. $name = rtrim($name, ':'); } $classes[] = ltrim($namespace . $name, '\\'); } } return $classes; } } composer-1.0.0-beta2/src/Composer/Cache.php000066400000000000000000000156571267577262200204620ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer; use Composer\IO\IOInterface; use Composer\Util\Filesystem; use Composer\Util\Silencer; use Symfony\Component\Finder\Finder; /** * Reads/writes to a filesystem cache * * @author Jordi Boggiano */ class Cache { private static $cacheCollected = false; private $io; private $root; private $enabled = true; private $whitelist; private $filesystem; /** * @param IOInterface $io * @param string $cacheDir location of the cache * @param string $whitelist List of characters that are allowed in path names (used in a regex character class) * @param Filesystem $filesystem optional filesystem instance */ public function __construct(IOInterface $io, $cacheDir, $whitelist = 'a-z0-9.', Filesystem $filesystem = null) { $this->io = $io; $this->root = rtrim($cacheDir, '/\\') . '/'; $this->whitelist = $whitelist; $this->filesystem = $filesystem ?: new Filesystem(); if ( (!is_dir($this->root) && !Silencer::call('mkdir', $this->root, 0777, true)) || !is_writable($this->root) ) { $this->io->writeError('Cannot create cache directory ' . $this->root . ', or directory is not writable. Proceeding without cache'); $this->enabled = false; } } public function isEnabled() { return $this->enabled; } public function getRoot() { return $this->root; } public function read($file) { $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file); if ($this->enabled && file_exists($this->root . $file)) { $this->io->writeError('Reading '.$this->root . $file.' from cache', true, IOInterface::DEBUG); return file_get_contents($this->root . $file); } return false; } public function write($file, $contents) { if ($this->enabled) { $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file); $this->io->writeError('Writing '.$this->root . $file.' into cache', true, IOInterface::DEBUG); try { return file_put_contents($this->root . $file, $contents); } catch (\ErrorException $e) { $this->io->writeError('Failed to write into cache: '.$e->getMessage().'', true, IOInterface::DEBUG); if (preg_match('{^file_put_contents\(\): Only ([0-9]+) of ([0-9]+) bytes written}', $e->getMessage(), $m)) { // Remove partial file. unlink($this->root . $file); $message = sprintf( 'Writing %1$s into cache failed after %2$u of %3$u bytes written, only %4$u bytes of free space available', $this->root . $file, $m[1], $m[2], @disk_free_space($this->root . dirname($file)) ); $this->io->writeError($message); return false; } throw $e; } } return false; } /** * Copy a file into the cache */ public function copyFrom($file, $source) { if ($this->enabled) { $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file); $this->filesystem->ensureDirectoryExists(dirname($this->root . $file)); if (!file_exists($source)) { $this->io->writeError(''.$source.' does not exist, can not write into cache'); } elseif ($this->io->isDebug()) { $this->io->writeError('Writing '.$this->root . $file.' into cache from '.$source); } return copy($source, $this->root . $file); } return false; } /** * Copy a file out of the cache */ public function copyTo($file, $target) { $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file); if ($this->enabled && file_exists($this->root . $file)) { try { touch($this->root . $file, filemtime($this->root . $file), time()); } catch (\ErrorException $e) { // fallback in case the above failed due to incorrect ownership // see https://github.com/composer/composer/issues/4070 Silencer::call('touch', $this->root . $file); } $this->io->writeError('Reading '.$this->root . $file.' from cache', true, IOInterface::DEBUG); return copy($this->root . $file, $target); } return false; } public function gcIsNecessary() { return (!self::$cacheCollected && !mt_rand(0, 50)); } public function remove($file) { $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file); if ($this->enabled && file_exists($this->root . $file)) { return $this->filesystem->unlink($this->root . $file); } return false; } public function gc($ttl, $maxSize) { if ($this->enabled) { $expire = new \DateTime(); $expire->modify('-'.$ttl.' seconds'); $finder = $this->getFinder()->date('until '.$expire->format('Y-m-d H:i:s')); foreach ($finder as $file) { $this->filesystem->unlink($file->getPathname()); } $totalSize = $this->filesystem->size($this->root); if ($totalSize > $maxSize) { $iterator = $this->getFinder()->sortByAccessedTime()->getIterator(); while ($totalSize > $maxSize && $iterator->valid()) { $filepath = $iterator->current()->getPathname(); $totalSize -= $this->filesystem->size($filepath); $this->filesystem->unlink($filepath); $iterator->next(); } } self::$cacheCollected = true; return true; } return false; } public function sha1($file) { $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file); if ($this->enabled && file_exists($this->root . $file)) { return sha1_file($this->root . $file); } return false; } public function sha256($file) { $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file); if ($this->enabled && file_exists($this->root . $file)) { return hash_file('sha256', $this->root . $file); } return false; } protected function getFinder() { return Finder::create()->in($this->root)->files(); } } composer-1.0.0-beta2/src/Composer/Command/000077500000000000000000000000001267577262200203065ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/Command/AboutCommand.php000066400000000000000000000021301267577262200233640ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; /** * @author Jordi Boggiano */ class AboutCommand extends BaseCommand { protected function configure() { $this ->setName('about') ->setDescription('Short information about Composer') ->setHelp(<<php composer.phar about EOT ) ; } protected function execute(InputInterface $input, OutputInterface $output) { $this->getIO()->write(<<Composer - Package Management for PHP Composer is a dependency manager tracking local dependencies of your projects and libraries. See https://getcomposer.org/ for more information. EOT ); } } composer-1.0.0-beta2/src/Composer/Command/ArchiveCommand.php000066400000000000000000000137641267577262200237120ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Composer\Factory; use Composer\IO\IOInterface; use Composer\Config; use Composer\Repository\CompositeRepository; use Composer\Repository\RepositoryFactory; use Composer\Script\ScriptEvents; use Composer\Plugin\CommandEvent; use Composer\Plugin\PluginEvents; use Composer\Util\Filesystem; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; /** * Creates an archive of a package for distribution. * * @author Nils Adermann */ class ArchiveCommand extends BaseCommand { protected function configure() { $this ->setName('archive') ->setDescription('Create an archive of this composer package') ->setDefinition(array( new InputArgument('package', InputArgument::OPTIONAL, 'The package to archive instead of the current project'), new InputArgument('version', InputArgument::OPTIONAL, 'A version constraint to find the package to archive'), new InputOption('format', 'f', InputOption::VALUE_REQUIRED, 'Format of the resulting archive: tar or zip'), new InputOption('dir', null, InputOption::VALUE_REQUIRED, 'Write the archive to this directory'), new InputOption('file', null, InputOption::VALUE_REQUIRED, 'Write the archive with the given file name.' .' Note that the format will be appended.'), )) ->setHelp(<<archive command creates an archive of the specified format containing the files and directories of the Composer project or the specified package in the specified version and writes it to the specified directory. php composer.phar archive [--format=zip] [--dir=/foo] [package [version]] EOT ) ; } protected function execute(InputInterface $input, OutputInterface $output) { $config = Factory::createConfig(); $composer = $this->getComposer(false); if ($composer) { $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'archive', $input, $output); $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent); $composer->getEventDispatcher()->dispatchScript(ScriptEvents::PRE_ARCHIVE_CMD); } if (null === $input->getOption('format')) { $input->setOption('format', $config->get('archive-format')); } if (null === $input->getOption('dir')) { $input->setOption('dir', $config->get('archive-dir')); } $returnCode = $this->archive( $this->getIO(), $config, $input->getArgument('package'), $input->getArgument('version'), $input->getOption('format'), $input->getOption('dir'), $input->getOption('file') ); if (0 === $returnCode && $composer) { $composer->getEventDispatcher()->dispatchScript(ScriptEvents::POST_ARCHIVE_CMD); } return $returnCode; } protected function archive(IOInterface $io, Config $config, $packageName = null, $version = null, $format = 'tar', $dest = '.', $fileName = null) { $factory = new Factory; $downloadManager = $factory->createDownloadManager($io, $config); $archiveManager = $factory->createArchiveManager($config, $downloadManager); if ($packageName) { $package = $this->selectPackage($io, $packageName, $version); if (!$package) { return 1; } } else { $package = $this->getComposer()->getPackage(); } $io->writeError('Creating the archive into "'.$dest.'".'); $packagePath = $archiveManager->archive($package, $format, $dest, $fileName); $fs = new Filesystem; $shortPath = $fs->findShortestPath(getcwd(), $packagePath, true); $io->writeError('Created: ', false); $io->write(strlen($shortPath) < strlen($packagePath) ? $shortPath : $packagePath); return 0; } protected function selectPackage(IOInterface $io, $packageName, $version = null) { $io->writeError('Searching for the specified package.'); if ($composer = $this->getComposer(false)) { $localRepo = $composer->getRepositoryManager()->getLocalRepository(); $repo = new CompositeRepository(array_merge(array($localRepo), $composer->getRepositoryManager()->getRepositories())); } else { $defaultRepos = RepositoryFactory::defaultRepos($this->getIO()); $io->writeError('No composer.json found in the current directory, searching packages from ' . implode(', ', array_keys($defaultRepos))); $repo = new CompositeRepository($defaultRepos); } $packages = $repo->findPackages($packageName, $version); if (count($packages) > 1) { $package = reset($packages); $io->writeError('Found multiple matches, selected '.$package->getPrettyString().'.'); $io->writeError('Alternatives were '.implode(', ', array_map(function ($p) { return $p->getPrettyString(); }, $packages)).'.'); $io->writeError('Please use a more specific constraint to pick a different package.'); } elseif ($packages) { $package = reset($packages); $io->writeError('Found an exact match '.$package->getPrettyString().'.'); } else { $io->writeError('Could not find a package matching '.$packageName.'.'); return false; } return $package; } } composer-1.0.0-beta2/src/Composer/Command/BaseCommand.php000066400000000000000000000057111267577262200231740ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Composer\Composer; use Composer\Console\Application; use Composer\IO\IOInterface; use Composer\IO\NullIO; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Command\Command; /** * Base class for Composer commands * * @author Ryan Weaver * @author Konstantin Kudryashov */ abstract class BaseCommand extends Command { /** * @var Composer */ private $composer; /** * @var IOInterface */ private $io; /** * @param bool $required * @param bool $disablePlugins * @throws \RuntimeException * @return Composer */ public function getComposer($required = true, $disablePlugins = false) { if (null === $this->composer) { $application = $this->getApplication(); if ($application instanceof Application) { /* @var $application Application */ $this->composer = $application->getComposer($required, $disablePlugins); } elseif ($required) { throw new \RuntimeException( 'Could not create a Composer\Composer instance, you must inject '. 'one if this command is not used with a Composer\Console\Application instance' ); } } return $this->composer; } /** * @param Composer $composer */ public function setComposer(Composer $composer) { $this->composer = $composer; } /** * Removes the cached composer instance */ public function resetComposer() { $this->composer = null; $this->getApplication()->resetComposer(); } /** * @return IOInterface */ public function getIO() { if (null === $this->io) { $application = $this->getApplication(); if ($application instanceof Application) { /* @var $application Application */ $this->io = $application->getIO(); } else { $this->io = new NullIO(); } } return $this->io; } /** * @param IOInterface $io */ public function setIO(IOInterface $io) { $this->io = $io; } /** * {@inheritDoc} */ protected function initialize(InputInterface $input, OutputInterface $output) { if (true === $input->hasParameterOption(array('--no-ansi')) && $input->hasOption('no-progress')) { $input->setOption('no-progress', true); } parent::initialize($input, $output); } } composer-1.0.0-beta2/src/Composer/Command/BaseDependencyCommand.php000066400000000000000000000230501267577262200251670ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Composer\DependencyResolver\Pool; use Composer\Package\Link; use Composer\Package\PackageInterface; use Composer\Repository\ArrayRepository; use Composer\Repository\CompositeRepository; use Composer\Repository\PlatformRepository; use Composer\Repository\RepositoryFactory; use Composer\Plugin\CommandEvent; use Composer\Plugin\PluginEvents; use Symfony\Component\Console\Formatter\OutputFormatterStyle; use Composer\Package\Version\VersionParser; use Symfony\Component\Console\Helper\Table; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; /** * Base implementation for commands mapping dependency relationships. * * @author Niels Keurentjes */ class BaseDependencyCommand extends BaseCommand { const ARGUMENT_PACKAGE = 'package'; const ARGUMENT_CONSTRAINT = 'constraint'; const OPTION_RECURSIVE = 'recursive'; const OPTION_TREE = 'tree'; protected $colors; /** * Set common options and arguments. */ protected function configure() { $this->setDefinition(array( new InputArgument(self::ARGUMENT_PACKAGE, InputArgument::REQUIRED, 'Package to inspect'), new InputArgument(self::ARGUMENT_CONSTRAINT, InputArgument::OPTIONAL, 'Optional version constraint', '*'), new InputOption(self::OPTION_RECURSIVE, 'r', InputOption::VALUE_NONE, 'Recursively resolves up to the root package'), new InputOption(self::OPTION_TREE, 't', InputOption::VALUE_NONE, 'Prints the results as a nested tree'), )); } /** * Execute the command. * * @param InputInterface $input * @param OutputInterface $output * @param bool $inverted Whether to invert matching process (why-not vs why behaviour) * @return int|null Exit code of the operation. */ protected function doExecute(InputInterface $input, OutputInterface $output, $inverted = false) { // Emit command event on startup $composer = $this->getComposer(); $commandEvent = new CommandEvent(PluginEvents::COMMAND, $this->getName(), $input, $output); $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent); // Prepare repositories and set up a pool $platformOverrides = $composer->getConfig()->get('platform') ?: array(); $repository = new CompositeRepository(array( new ArrayRepository(array($composer->getPackage())), $composer->getRepositoryManager()->getLocalRepository(), new PlatformRepository(array(), $platformOverrides), )); $pool = new Pool(); $pool->addRepository($repository); // Parse package name and constraint list($needle, $textConstraint) = array_pad( explode(':', $input->getArgument(self::ARGUMENT_PACKAGE)), 2, $input->getArgument(self::ARGUMENT_CONSTRAINT) ); // Find packages that are or provide the requested package first $packages = $pool->whatProvides($needle); if (empty($packages)) { throw new \InvalidArgumentException(sprintf('Could not find package "%s" in your project', $needle)); } // If the version we ask for is not installed then we need to locate it in remote repos and add it. // This is needed for why-not to resolve conflicts from an uninstalled version against installed packages. if (!$repository->findPackage($needle, $textConstraint)) { $defaultRepos = new CompositeRepository(RepositoryFactory::defaultRepos($this->getIO())); if ($match = $defaultRepos->findPackage($needle, $textConstraint)) { $repository->addRepository(new ArrayRepository(array(clone $match))); } } // Include replaced packages for inverted lookups as they are then the actual starting point to consider $needles = array($needle); if ($inverted) { foreach ($packages as $package) { $needles = array_merge($needles, array_map(function (Link $link) { return $link->getTarget(); }, $package->getReplaces())); } } // Parse constraint if one was supplied if ('*' !== $textConstraint) { $versionParser = new VersionParser(); $constraint = $versionParser->parseConstraints($textConstraint); } else { $constraint = null; } // Parse rendering options $renderTree = $input->getOption(self::OPTION_TREE); $recursive = $renderTree || $input->getOption(self::OPTION_RECURSIVE); // Resolve dependencies $results = $repository->getDependents($needles, $constraint, $inverted, $recursive); if (empty($results)) { $extra = (null !== $constraint) ? sprintf(' in versions %smatching %s', $inverted ? 'not ' : '', $textConstraint) : ''; $this->getIO()->writeError(sprintf('There is no installed package depending on "%s"%s', $needle, $extra)); } elseif ($renderTree) { $this->initStyles($output); $root = $packages[0]; $this->getIO()->write(sprintf('%s %s %s', $root->getPrettyName(), $root->getPrettyVersion(), $root->getDescription())); $this->printTree($results); } else { $this->printTable($output, $results); } return 0; } /** * Assembles and prints a bottom-up table of the dependencies. * * @param OutputInterface $output * @param array $results */ protected function printTable(OutputInterface $output, $results) { $table = array(); $doubles = array(); do { $queue = array(); $rows = array(); foreach ($results as $result) { /** * @var PackageInterface $package * @var Link $link */ list($package, $link, $children) = $result; $unique = (string) $link; if (isset($doubles[$unique])) { continue; } $doubles[$unique] = true; $version = (strpos($package->getPrettyVersion(), 'No version set') === 0) ? '-' : $package->getPrettyVersion(); $rows[] = array($package->getPrettyName(), $version, $link->getDescription(), sprintf('%s (%s)', $link->getTarget(), $link->getPrettyConstraint())); if ($children) { $queue = array_merge($queue, $children); } } $results = $queue; $table = array_merge($rows, $table); } while (!empty($results)); // Render table $renderer = new Table($output); $renderer->setStyle('compact'); $renderer->getStyle()->setVerticalBorderChar(''); $renderer->getStyle()->setCellRowContentFormat('%s '); $renderer->setRows($table)->render(); } /** * Init styles for tree * * @param OutputInterface $output */ protected function initStyles(OutputInterface $output) { $this->colors = array( 'green', 'yellow', 'cyan', 'magenta', 'blue', ); foreach ($this->colors as $color) { $style = new OutputFormatterStyle($color); $output->getFormatter()->setStyle($color, $style); } } /** * Recursively prints a tree of the selected results. * * @param array $results * @param string $prefix */ protected function printTree($results, $prefix = '', $level = 1) { $count = count($results); $idx = 0; foreach ($results as $key => $result) { /** * @var PackageInterface $package * @var Link $link */ list($package, $link, $children) = $result; $color = $this->colors[$level % count($this->colors)]; $prevColor = $this->colors[($level - 1) % count($this->colors)]; $isLast = (++$idx == $count); $versionText = (strpos($package->getPrettyVersion(), 'No version set') === 0) ? '' : $package->getPrettyVersion(); $packageText = rtrim(sprintf('<%s>%s %s', $color, $package->getPrettyName(), $versionText)); $linkText = sprintf('%s <%s>%s %s', $link->getDescription(), $prevColor, $link->getTarget(), $link->getPrettyConstraint()); $circularWarn = $children === false ? '(circular dependency aborted here)' : ''; $this->writeTreeLine(rtrim(sprintf("%s%s%s (%s) %s", $prefix, $isLast ? '└──' : '├──', $packageText, $linkText, $circularWarn))); if ($children) { $this->printTree($children, $prefix . ($isLast ? ' ' : '│ '), $level + 1); } } } private function writeTreeLine($line) { $io = $this->getIO(); if (!$io->isDecorated()) { $line = str_replace(array('â””', '├', '──', '│'), array('`-', '|-', '-', '|'), $line); } $io->write($line); } } composer-1.0.0-beta2/src/Composer/Command/ClearCacheCommand.php000066400000000000000000000037701267577262200242770ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Composer\Cache; use Composer\Factory; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; /** * @author David Neilsen */ class ClearCacheCommand extends BaseCommand { protected function configure() { $this ->setName('clear-cache') ->setAliases(array('clearcache')) ->setDescription('Clears composer\'s internal package cache.') ->setHelp(<<clear-cache deletes all cached packages from composer's cache directory. EOT ) ; } protected function execute(InputInterface $input, OutputInterface $output) { $config = Factory::createConfig(); $io = $this->getIO(); $cachePaths = array( 'cache-dir' => $config->get('cache-dir'), 'cache-files-dir' => $config->get('cache-files-dir'), 'cache-repo-dir' => $config->get('cache-repo-dir'), 'cache-vcs-dir' => $config->get('cache-vcs-dir'), ); foreach ($cachePaths as $key => $cachePath) { $cachePath = realpath($cachePath); if (!$cachePath) { $io->writeError("Cache directory does not exist ($key): $cachePath"); continue; } $cache = new Cache($io, $cachePath); if (!$cache->isEnabled()) { $io->writeError("Cache is not enabled ($key): $cachePath"); continue; } $io->writeError("Clearing cache ($key): $cachePath"); $cache->gc(0, 0); } $io->writeError('All caches cleared.'); } } composer-1.0.0-beta2/src/Composer/Command/ConfigCommand.php000066400000000000000000000516341267577262200235340ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Composer\Util\Platform; use Composer\Util\Silencer; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Composer\Config; use Composer\Config\JsonConfigSource; use Composer\Factory; use Composer\Json\JsonFile; /** * @author Joshua Estes * @author Jordi Boggiano */ class ConfigCommand extends BaseCommand { /** * @var Config */ protected $config; /** * @var JsonFile */ protected $configFile; /** * @var JsonConfigSource */ protected $configSource; /** * @var JsonFile */ protected $authConfigFile; /** * @var JsonConfigSource */ protected $authConfigSource; /** * {@inheritDoc} */ protected function configure() { $this ->setName('config') ->setDescription('Set config options') ->setDefinition(array( new InputOption('global', 'g', InputOption::VALUE_NONE, 'Apply command to the global config file'), new InputOption('editor', 'e', InputOption::VALUE_NONE, 'Open editor'), new InputOption('auth', 'a', InputOption::VALUE_NONE, 'Affect auth config file (only used for --editor)'), new InputOption('unset', null, InputOption::VALUE_NONE, 'Unset the given setting-key'), new InputOption('list', 'l', InputOption::VALUE_NONE, 'List configuration settings'), new InputOption('file', 'f', InputOption::VALUE_REQUIRED, 'If you want to choose a different composer.json or config.json'), new InputOption('absolute', null, InputOption::VALUE_NONE, 'Returns absolute paths when fetching *-dir config values instead of relative'), new InputArgument('setting-key', null, 'Setting key'), new InputArgument('setting-value', InputArgument::IS_ARRAY, 'Setting value'), )) ->setHelp(<<%command.full_name% bin-dir bin/ To read a config setting: %command.full_name% bin-dir Outputs: bin To edit the global config.json file: %command.full_name% --global To add a repository: %command.full_name% repositories.foo vcs https://bar.com To remove a repository (repo is a short alias for repositories): %command.full_name% --unset repo.foo To disable packagist: %command.full_name% repo.packagist false You can alter repositories in the global config.json file by passing in the --global option. To edit the file in an external editor: %command.full_name% --editor To choose your editor you can set the "EDITOR" env variable. To get a list of configuration values in the file: %command.full_name% --list You can always pass more than one option. As an example, if you want to edit the global config.json file. %command.full_name% --editor --global EOT ) ; } /** * {@inheritDoc} */ protected function initialize(InputInterface $input, OutputInterface $output) { parent::initialize($input, $output); if ($input->getOption('global') && null !== $input->getOption('file')) { throw new \RuntimeException('--file and --global can not be combined'); } $io = $this->getIO(); $this->config = Factory::createConfig($io); // Get the local composer.json, global config.json, or if the user // passed in a file to use $configFile = $input->getOption('global') ? ($this->config->get('home') . '/config.json') : ($input->getOption('file') ?: trim(getenv('COMPOSER')) ?: 'composer.json'); // Create global composer.json if this was invoked using `composer global config` if ($configFile === 'composer.json' && !file_exists($configFile) && realpath(getcwd()) === realpath($this->config->get('home'))) { file_put_contents($configFile, "{\n}\n"); } $this->configFile = new JsonFile($configFile, null, $io); $this->configSource = new JsonConfigSource($this->configFile); $authConfigFile = $input->getOption('global') ? ($this->config->get('home') . '/auth.json') : dirname(realpath($configFile)) . '/auth.json'; $this->authConfigFile = new JsonFile($authConfigFile, null, $io); $this->authConfigSource = new JsonConfigSource($this->authConfigFile, true); // Initialize the global file if it's not there, ignoring any warnings or notices if ($input->getOption('global') && !$this->configFile->exists()) { touch($this->configFile->getPath()); $this->configFile->write(array('config' => new \ArrayObject)); Silencer::call('chmod', $this->configFile->getPath(), 0600); } if ($input->getOption('global') && !$this->authConfigFile->exists()) { touch($this->authConfigFile->getPath()); $this->authConfigFile->write(array('http-basic' => new \ArrayObject, 'github-oauth' => new \ArrayObject, 'gitlab-oauth' => new \ArrayObject)); Silencer::call('chmod', $this->authConfigFile->getPath(), 0600); } if (!$this->configFile->exists()) { throw new \RuntimeException(sprintf('File "%s" cannot be found in the current directory', $configFile)); } } /** * {@inheritDoc} */ protected function execute(InputInterface $input, OutputInterface $output) { // Open file in editor if ($input->getOption('editor')) { $editor = escapeshellcmd(getenv('EDITOR')); if (!$editor) { if (Platform::isWindows()) { $editor = 'notepad'; } else { foreach (array('editor', 'vim', 'vi', 'nano', 'pico', 'ed') as $candidate) { if (exec('which '.$candidate)) { $editor = $candidate; break; } } } } $file = $input->getOption('auth') ? $this->authConfigFile->getPath() : $this->configFile->getPath(); system($editor . ' ' . $file . (Platform::isWindows() ? '' : ' > `tty`')); return 0; } if (!$input->getOption('global')) { $this->config->merge($this->configFile->read()); $this->config->merge(array('config' => $this->authConfigFile->exists() ? $this->authConfigFile->read() : array())); } // List the configuration of the file settings if ($input->getOption('list')) { $this->listConfiguration($this->config->all(), $this->config->raw(), $output); return 0; } $settingKey = $input->getArgument('setting-key'); if (!$settingKey) { return 0; } // If the user enters in a config variable, parse it and save to file if (array() !== $input->getArgument('setting-value') && $input->getOption('unset')) { throw new \RuntimeException('You can not combine a setting value with --unset'); } // show the value if no value is provided if (array() === $input->getArgument('setting-value') && !$input->getOption('unset')) { $data = $this->config->all(); if (preg_match('/^repos?(?:itories)?(?:\.(.+))?/', $settingKey, $matches)) { if (empty($matches[1])) { $value = isset($data['repositories']) ? $data['repositories'] : array(); } else { if (!isset($data['repositories'][$matches[1]])) { throw new \InvalidArgumentException('There is no '.$matches[1].' repository defined'); } $value = $data['repositories'][$matches[1]]; } } elseif (strpos($settingKey, '.')) { $bits = explode('.', $settingKey); $data = $data['config']; $match = false; foreach ($bits as $bit) { $key = isset($key) ? $key.'.'.$bit : $bit; $match = false; if (isset($data[$key])) { $match = true; $data = $data[$key]; unset($key); } } if (!$match) { throw new \RuntimeException($settingKey.' is not defined.'); } $value = $data; } elseif (isset($data['config'][$settingKey])) { $value = $this->config->get($settingKey, $input->getOption('absolute') ? 0 : Config::RELATIVE_PATHS); } else { throw new \RuntimeException($settingKey.' is not defined'); } if (is_array($value)) { $value = json_encode($value); } $this->getIO()->write($value); return 0; } $values = $input->getArgument('setting-value'); // what the user is trying to add/change $booleanValidator = function ($val) { return in_array($val, array('true', 'false', '1', '0'), true); }; $booleanNormalizer = function ($val) { return $val !== 'false' && (bool) $val; }; // handle config values $uniqueConfigValues = array( 'process-timeout' => array('is_numeric', 'intval'), 'use-include-path' => array($booleanValidator, $booleanNormalizer), 'preferred-install' => array( function ($val) { return in_array($val, array('auto', 'source', 'dist'), true); }, function ($val) { return $val; }, ), 'store-auths' => array( function ($val) { return in_array($val, array('true', 'false', 'prompt'), true); }, function ($val) { if ('prompt' === $val) { return 'prompt'; } return $val !== 'false' && (bool) $val; }, ), 'notify-on-install' => array($booleanValidator, $booleanNormalizer), 'vendor-dir' => array('is_string', function ($val) { return $val; }), 'bin-dir' => array('is_string', function ($val) { return $val; }), 'archive-dir' => array('is_string', function ($val) { return $val; }), 'archive-format' => array('is_string', function ($val) { return $val; }), 'data-dir' => array('is_string', function ($val) { return $val; }), 'cache-dir' => array('is_string', function ($val) { return $val; }), 'cache-files-dir' => array('is_string', function ($val) { return $val; }), 'cache-repo-dir' => array('is_string', function ($val) { return $val; }), 'cache-vcs-dir' => array('is_string', function ($val) { return $val; }), 'cache-ttl' => array('is_numeric', 'intval'), 'cache-files-ttl' => array('is_numeric', 'intval'), 'cache-files-maxsize' => array( function ($val) { return preg_match('/^\s*([0-9.]+)\s*(?:([kmg])(?:i?b)?)?\s*$/i', $val) > 0; }, function ($val) { return $val; }, ), 'bin-compat' => array( function ($val) { return in_array($val, array('auto', 'full')); }, function ($val) { return $val; }, ), 'discard-changes' => array( function ($val) { return in_array($val, array('stash', 'true', 'false', '1', '0'), true); }, function ($val) { if ('stash' === $val) { return 'stash'; } return $val !== 'false' && (bool) $val; }, ), 'autoloader-suffix' => array('is_string', function ($val) { return $val === 'null' ? null : $val; }), 'sort-packages' => array($booleanValidator, $booleanNormalizer), 'optimize-autoloader' => array($booleanValidator, $booleanNormalizer), 'classmap-authoritative' => array($booleanValidator, $booleanNormalizer), 'prepend-autoloader' => array($booleanValidator, $booleanNormalizer), 'disable-tls' => array($booleanValidator, $booleanNormalizer), 'secure-http' => array($booleanValidator, $booleanNormalizer), 'cafile' => array( function ($val) { return file_exists($val) && is_readable($val); }, function ($val) { return $val === 'null' ? null : $val; }, ), 'capath' => array( function ($val) { return is_dir($val) && is_readable($val); }, function ($val) { return $val === 'null' ? null : $val; }, ), 'github-expose-hostname' => array($booleanValidator, $booleanNormalizer), ); $multiConfigValues = array( 'github-protocols' => array( function ($vals) { if (!is_array($vals)) { return 'array expected'; } foreach ($vals as $val) { if (!in_array($val, array('git', 'https', 'ssh'))) { return 'valid protocols include: git, https, ssh'; } } return true; }, function ($vals) { return $vals; }, ), 'github-domains' => array( function ($vals) { if (!is_array($vals)) { return 'array expected'; } return true; }, function ($vals) { return $vals; }, ), 'gitlab-domains' => array( function ($vals) { if (!is_array($vals)) { return 'array expected'; } return true; }, function ($vals) { return $vals; }, ), ); foreach ($uniqueConfigValues as $name => $callbacks) { if ($settingKey === $name) { if ($input->getOption('unset')) { return $this->configSource->removeConfigSetting($settingKey); } list($validator, $normalizer) = $callbacks; if (1 !== count($values)) { throw new \RuntimeException('You can only pass one value. Example: php composer.phar config process-timeout 300'); } if (true !== $validation = $validator($values[0])) { throw new \RuntimeException(sprintf( '"%s" is an invalid value'.($validation ? ' ('.$validation.')' : ''), $values[0] )); } return $this->configSource->addConfigSetting($settingKey, $normalizer($values[0])); } } foreach ($multiConfigValues as $name => $callbacks) { if ($settingKey === $name) { if ($input->getOption('unset')) { return $this->configSource->removeConfigSetting($settingKey); } list($validator, $normalizer) = $callbacks; if (true !== $validation = $validator($values)) { throw new \RuntimeException(sprintf( '%s is an invalid value'.($validation ? ' ('.$validation.')' : ''), json_encode($values) )); } return $this->configSource->addConfigSetting($settingKey, $normalizer($values)); } } // handle repositories if (preg_match('/^repos?(?:itories)?\.(.+)/', $settingKey, $matches)) { if ($input->getOption('unset')) { return $this->configSource->removeRepository($matches[1]); } if (2 === count($values)) { return $this->configSource->addRepository($matches[1], array( 'type' => $values[0], 'url' => $values[1], )); } if (1 === count($values)) { $value = strtolower($values[0]); if (true === $booleanValidator($value)) { if (false === $booleanNormalizer($value)) { return $this->configSource->addRepository($matches[1], false); } } else { $value = JsonFile::parseJson($values[0]); return $this->configSource->addRepository($matches[1], $value); } } throw new \RuntimeException('You must pass the type and a url. Example: php composer.phar config repositories.foo vcs https://bar.com'); } // handle platform if (preg_match('/^platform\.(.+)/', $settingKey, $matches)) { if ($input->getOption('unset')) { return $this->configSource->removeConfigSetting($settingKey); } return $this->configSource->addConfigSetting($settingKey, $values[0]); } // handle github-oauth if (preg_match('/^(github-oauth|gitlab-oauth|http-basic)\.(.+)/', $settingKey, $matches)) { if ($input->getOption('unset')) { $this->authConfigSource->removeConfigSetting($matches[1].'.'.$matches[2]); $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]); return; } if ($matches[1] === 'github-oauth' || $matches[1] === 'gitlab-oauth') { if (1 !== count($values)) { throw new \RuntimeException('Too many arguments, expected only one token'); } $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]); $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], $values[0]); } elseif ($matches[1] === 'http-basic') { if (2 !== count($values)) { throw new \RuntimeException('Expected two arguments (username, password), got '.count($values)); } $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]); $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], array('username' => $values[0], 'password' => $values[1])); } return; } throw new \InvalidArgumentException('Setting '.$settingKey.' does not exist or is not supported by this command'); } /** * Display the contents of the file in a pretty formatted way * * @param array $contents * @param array $rawContents * @param OutputInterface $output * @param string|null $k */ protected function listConfiguration(array $contents, array $rawContents, OutputInterface $output, $k = null) { $origK = $k; $io = $this->getIO(); foreach ($contents as $key => $value) { if ($k === null && !in_array($key, array('config', 'repositories'))) { continue; } $rawVal = isset($rawContents[$key]) ? $rawContents[$key] : null; if (is_array($value) && (!is_numeric(key($value)) || ($key === 'repositories' && null === $k))) { $k .= preg_replace('{^config\.}', '', $key . '.'); $this->listConfiguration($value, $rawVal, $output, $k); $k = $origK; continue; } if (is_array($value)) { $value = array_map(function ($val) { return is_array($val) ? json_encode($val) : $val; }, $value); $value = '['.implode(', ', $value).']'; } if (is_bool($value)) { $value = var_export($value, true); } if (is_string($rawVal) && $rawVal != $value) { $io->write('[' . $k . $key . '] ' . $rawVal . ' (' . $value . ')'); } else { $io->write('[' . $k . $key . '] ' . $value . ''); } } } } composer-1.0.0-beta2/src/Composer/Command/CreateProjectCommand.php000066400000000000000000000416401267577262200250550ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Composer\Config; use Composer\Factory; use Composer\Installer; use Composer\Installer\ProjectInstaller; use Composer\Installer\InstallationManager; use Composer\Installer\SuggestedPackagesReporter; use Composer\IO\IOInterface; use Composer\Package\BasePackage; use Composer\DependencyResolver\Pool; use Composer\DependencyResolver\Operation\InstallOperation; use Composer\Package\Version\VersionSelector; use Composer\Repository\RepositoryFactory; use Composer\Repository\CompositeRepository; use Composer\Repository\InstalledFilesystemRepository; use Composer\Script\ScriptEvents; use Composer\Util\Silencer; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Finder\Finder; use Composer\Json\JsonFile; use Composer\Config\JsonConfigSource; use Composer\Util\Filesystem; use Composer\Package\Version\VersionParser; /** * Install a package as new project into new directory. * * @author Benjamin Eberlei * @author Jordi Boggiano * @author Tobias Munk * @author Nils Adermann */ class CreateProjectCommand extends BaseCommand { /** * @var SuggestedPackagesReporter */ protected $suggestedPackagesReporter; protected function configure() { $this ->setName('create-project') ->setDescription('Create new project from a package into given directory.') ->setDefinition(array( new InputArgument('package', InputArgument::OPTIONAL, 'Package name to be installed'), new InputArgument('directory', InputArgument::OPTIONAL, 'Directory where the files should be created'), new InputArgument('version', InputArgument::OPTIONAL, 'Version, will default to latest'), new InputOption('stability', 's', InputOption::VALUE_REQUIRED, 'Minimum-stability allowed (unless a version is specified).'), new InputOption('prefer-source', null, InputOption::VALUE_NONE, 'Forces installation from package sources when possible, including VCS information.'), new InputOption('prefer-dist', null, InputOption::VALUE_NONE, 'Forces installation from package dist even for dev versions.'), new InputOption('repository', null, InputOption::VALUE_REQUIRED, 'Pick a different repository (as url or json config) to look for the package.'), new InputOption('repository-url', null, InputOption::VALUE_REQUIRED, 'DEPRECATED: Use --repository instead.'), new InputOption('dev', null, InputOption::VALUE_NONE, 'Enables installation of require-dev packages (enabled by default, only present for BC).'), new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables installation of require-dev packages.'), new InputOption('no-plugins', null, InputOption::VALUE_NONE, 'Whether to disable plugins.'), new InputOption('no-custom-installers', null, InputOption::VALUE_NONE, 'DEPRECATED: Use no-plugins instead.'), new InputOption('no-scripts', null, InputOption::VALUE_NONE, 'Whether to prevent execution of all defined scripts in the root package.'), new InputOption('no-progress', null, InputOption::VALUE_NONE, 'Do not output download progress.'), new InputOption('keep-vcs', null, InputOption::VALUE_NONE, 'Whether to prevent deletion vcs folder.'), new InputOption('no-install', null, InputOption::VALUE_NONE, 'Whether to skip installation of the package dependencies.'), new InputOption('ignore-platform-reqs', null, InputOption::VALUE_NONE, 'Ignore platform requirements (php & ext- packages).'), )) ->setHelp(<<create-project command creates a new project from a given package into a new directory. If executed without params and in a directory with a composer.json file it installs the packages for the current project. You can use this command to bootstrap new projects or setup a clean version-controlled installation for developers of your project. php composer.phar create-project vendor/project target-directory [version] You can also specify the version with the package name using = or : as separator. php composer.phar create-project vendor/project:version target-directory To install unstable packages, either specify the version you want, or use the --stability=dev (where dev can be one of RC, beta, alpha or dev). To setup a developer workable version you should create the project using the source controlled code by appending the '--prefer-source' flag. To install a package from another repository than the default one you can pass the '--repository=https://myrepository.org' flag. EOT ) ; } protected function execute(InputInterface $input, OutputInterface $output) { $config = Factory::createConfig(); $io = $this->getIO(); $this->updatePreferredOptions($config, $input, $preferSource, $preferDist, true); if ($input->getOption('dev')) { $io->writeError('You are using the deprecated option "dev". Dev packages are installed by default now.'); } if ($input->getOption('no-custom-installers')) { $io->writeError('You are using the deprecated option "no-custom-installers". Use "no-plugins" instead.'); $input->setOption('no-plugins', true); } return $this->installProject( $io, $config, $input, $input->getArgument('package'), $input->getArgument('directory'), $input->getArgument('version'), $input->getOption('stability'), $preferSource, $preferDist, !$input->getOption('no-dev'), $input->getOption('repository') ?: $input->getOption('repository-url'), $input->getOption('no-plugins'), $input->getOption('no-scripts'), $input->getOption('keep-vcs'), $input->getOption('no-progress'), $input->getOption('no-install'), $input->getOption('ignore-platform-reqs') ); } public function installProject(IOInterface $io, Config $config, InputInterface $input, $packageName, $directory = null, $packageVersion = null, $stability = 'stable', $preferSource = false, $preferDist = false, $installDevPackages = false, $repository = null, $disablePlugins = false, $noScripts = false, $keepVcs = false, $noProgress = false, $noInstall = false, $ignorePlatformReqs = false) { $oldCwd = getcwd(); // we need to manually load the configuration to pass the auth credentials to the io interface! $io->loadConfiguration($config); $this->suggestedPackagesReporter = new SuggestedPackagesReporter($io); if ($packageName !== null) { $installedFromVcs = $this->installRootPackage($io, $config, $packageName, $directory, $packageVersion, $stability, $preferSource, $preferDist, $installDevPackages, $repository, $disablePlugins, $noScripts, $keepVcs, $noProgress, $ignorePlatformReqs); } else { $installedFromVcs = false; } $composer = Factory::create($io, null, $disablePlugins); $composer->getDownloadManager()->setOutputProgress(!$noProgress); $fs = new Filesystem(); if ($noScripts === false) { // dispatch event $composer->getEventDispatcher()->dispatchScript(ScriptEvents::POST_ROOT_PACKAGE_INSTALL, $installDevPackages); } $rootPackageConfig = $composer->getConfig(); $this->updatePreferredOptions($rootPackageConfig, $input, $preferSource, $preferDist); // install dependencies of the created project if ($noInstall === false) { $installer = Installer::create($io, $composer); $installer->setPreferSource($preferSource) ->setPreferDist($preferDist) ->setDevMode($installDevPackages) ->setRunScripts(!$noScripts) ->setIgnorePlatformRequirements($ignorePlatformReqs) ->setSuggestedPackagesReporter($this->suggestedPackagesReporter); if ($disablePlugins) { $installer->disablePlugins(); } $status = $installer->run(); if (0 !== $status) { return $status; } } $hasVcs = $installedFromVcs; if (!$keepVcs && $installedFromVcs && ( !$io->isInteractive() || $io->askConfirmation('Do you want to remove the existing VCS (.git, .svn..) history? [Y,n]? ', true) ) ) { $finder = new Finder(); $finder->depth(0)->directories()->in(getcwd())->ignoreVCS(false)->ignoreDotFiles(false); foreach (array('.svn', '_svn', 'CVS', '_darcs', '.arch-params', '.monotone', '.bzr', '.git', '.hg') as $vcsName) { $finder->name($vcsName); } try { $dirs = iterator_to_array($finder); unset($finder); foreach ($dirs as $dir) { if (!$fs->removeDirectory($dir)) { throw new \RuntimeException('Could not remove '.$dir); } } } catch (\Exception $e) { $io->writeError('An error occurred while removing the VCS metadata: '.$e->getMessage().''); } $hasVcs = false; } // rewriting self.version dependencies with explicit version numbers if the package's vcs metadata is gone if (!$hasVcs) { $package = $composer->getPackage(); $configSource = new JsonConfigSource(new JsonFile('composer.json')); foreach (BasePackage::$supportedLinkTypes as $type => $meta) { foreach ($package->{'get'.$meta['method']}() as $link) { if ($link->getPrettyConstraint() === 'self.version') { $configSource->addLink($type, $link->getTarget(), $package->getPrettyVersion()); } } } } if ($noScripts === false) { // dispatch event $composer->getEventDispatcher()->dispatchScript(ScriptEvents::POST_CREATE_PROJECT_CMD, $installDevPackages); } chdir($oldCwd); $vendorComposerDir = $composer->getConfig()->get('vendor-dir').'/composer'; if (is_dir($vendorComposerDir) && $fs->isDirEmpty($vendorComposerDir)) { Silencer::call('rmdir', $vendorComposerDir); $vendorDir = $composer->getConfig()->get('vendor-dir'); if (is_dir($vendorDir) && $fs->isDirEmpty($vendorDir)) { Silencer::call('rmdir', $vendorDir); } } return 0; } protected function installRootPackage(IOInterface $io, Config $config, $packageName, $directory = null, $packageVersion = null, $stability = 'stable', $preferSource = false, $preferDist = false, $installDevPackages = false, $repository = null, $disablePlugins = false, $noScripts = false, $keepVcs = false, $noProgress = false, $ignorePlatformReqs = false) { if (null === $repository) { $sourceRepo = new CompositeRepository(RepositoryFactory::defaultRepos($io, $config)); } else { $sourceRepo = RepositoryFactory::fromString($io, $config, $repository, true); } $parser = new VersionParser(); $requirements = $parser->parseNameVersionPairs(array($packageName)); $name = strtolower($requirements[0]['name']); if (!$packageVersion && isset($requirements[0]['version'])) { $packageVersion = $requirements[0]['version']; } if (null === $stability) { if (preg_match('{^[^,\s]*?@('.implode('|', array_keys(BasePackage::$stabilities)).')$}i', $packageVersion, $match)) { $stability = $match[1]; } else { $stability = VersionParser::parseStability($packageVersion); } } $stability = VersionParser::normalizeStability($stability); if (!isset(BasePackage::$stabilities[$stability])) { throw new \InvalidArgumentException('Invalid stability provided ('.$stability.'), must be one of: '.implode(', ', array_keys(BasePackage::$stabilities))); } $pool = new Pool($stability); $pool->addRepository($sourceRepo); $phpVersion = null; if (!$ignorePlatformReqs) { // using those 3 constants to build a version without the 'extra' bit that can contain garbage $phpVersion = PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION.'.'.PHP_RELEASE_VERSION; } // find the latest version if there are multiple $versionSelector = new VersionSelector($pool); $package = $versionSelector->findBestCandidate($name, $packageVersion, $phpVersion, $stability); if (!$package) { throw new \InvalidArgumentException("Could not find package $name" . ($packageVersion ? " with version $packageVersion." : " with stability $stability.")); } if (null === $directory) { $parts = explode("/", $name, 2); $directory = getcwd() . DIRECTORY_SEPARATOR . array_pop($parts); } // handler Ctrl+C for unix-like systems if (function_exists('pcntl_signal')) { declare(ticks=100); pcntl_signal(SIGINT, function () use ($directory) { $fs = new Filesystem(); $fs->removeDirectory($directory); exit(130); }); } $io->writeError('Installing ' . $package->getName() . ' (' . $package->getFullPrettyVersion(false) . ')'); if ($disablePlugins) { $io->writeError('Plugins have been disabled.'); } if (0 === strpos($package->getPrettyVersion(), 'dev-') && in_array($package->getSourceType(), array('git', 'hg'))) { $package->setSourceReference(substr($package->getPrettyVersion(), 4)); } $dm = $this->createDownloadManager($io, $config); $dm->setPreferSource($preferSource) ->setPreferDist($preferDist) ->setOutputProgress(!$noProgress); $projectInstaller = new ProjectInstaller($directory, $dm); $im = $this->createInstallationManager(); $im->addInstaller($projectInstaller); $im->install(new InstalledFilesystemRepository(new JsonFile('php://memory')), new InstallOperation($package)); $im->notifyInstalls($io); // collect suggestions $this->suggestedPackagesReporter->addSuggestionsFromPackage($package); $installedFromVcs = 'source' === $package->getInstallationSource(); $io->writeError('Created project in ' . $directory . ''); chdir($directory); $_SERVER['COMPOSER_ROOT_VERSION'] = $package->getPrettyVersion(); putenv('COMPOSER_ROOT_VERSION='.$_SERVER['COMPOSER_ROOT_VERSION']); return $installedFromVcs; } protected function createDownloadManager(IOInterface $io, Config $config) { $factory = new Factory(); return $factory->createDownloadManager($io, $config); } protected function createInstallationManager() { return new InstallationManager(); } /** * Updated preferSource or preferDist based on the preferredInstall config option * @param Config $config * @param InputInterface $input * @param bool $preferSource * @param bool $preferDist */ protected function updatePreferredOptions(Config $config, InputInterface $input, &$preferSource, &$preferDist, $keepVcsRequiresPreferSource = false) { $preferSource = false; $preferDist = false; switch ($config->get('preferred-install')) { case 'source': $preferSource = true; break; case 'dist': $preferDist = true; break; case 'auto': default: // noop break; } if ($input->getOption('prefer-source') || $input->getOption('prefer-dist') || ($keepVcsRequiresPreferSource && $input->getOption('keep-vcs'))) { $preferSource = $input->getOption('prefer-source') || ($keepVcsRequiresPreferSource && $input->getOption('keep-vcs')); $preferDist = $input->getOption('prefer-dist'); } } } composer-1.0.0-beta2/src/Composer/Command/DependsCommand.php000066400000000000000000000024471267577262200237070ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; /** * @author Niels Keurentjes */ class DependsCommand extends BaseDependencyCommand { /** * Configure command metadata. */ protected function configure() { parent::configure(); $this ->setName('depends') ->setAliases(array('why')) ->setDescription('Shows which packages cause the given package to be installed') ->setHelp(<<php composer.phar depends composer/composer EOT ) ; } /** * Execute the function. * * @param InputInterface $input * @param OutputInterface $output * @return int|null */ protected function execute(InputInterface $input, OutputInterface $output) { return parent::doExecute($input, $output, false); } } composer-1.0.0-beta2/src/Composer/Command/DiagnoseCommand.php000066400000000000000000000606211267577262200240540ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Composer\Composer; use Composer\Factory; use Composer\Config; use Composer\Downloader\TransportException; use Composer\Plugin\CommandEvent; use Composer\Plugin\PluginEvents; use Composer\Util\ConfigValidator; use Composer\Util\ProcessExecutor; use Composer\Util\RemoteFilesystem; use Composer\Util\StreamContextFactory; use Composer\SelfUpdate\Keys; use Composer\SelfUpdate\Versions; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; /** * @author Jordi Boggiano */ class DiagnoseCommand extends BaseCommand { /** @var RemoteFileSystem */ protected $rfs; /** @var ProcessExecutor */ protected $process; /** @var int */ protected $failures = 0; protected function configure() { $this ->setName('diagnose') ->setDescription('Diagnoses the system to identify common errors.') ->setHelp(<<diagnose command checks common errors to help debugging problems. EOT ) ; } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $composer = $this->getComposer(false); $io = $this->getIO(); if ($composer) { $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'diagnose', $input, $output); $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent); $io->write('Checking composer.json: ', false); $this->outputResult($this->checkComposerSchema()); } if ($composer) { $config = $composer->getConfig(); } else { $config = Factory::createConfig(); } $config->merge(array('config' => array('secure-http' => false))); $this->rfs = Factory::createRemoteFilesystem($io, $config); $this->process = new ProcessExecutor($io); $io->write('Checking platform settings: ', false); $this->outputResult($this->checkPlatform()); $io->write('Checking git settings: ', false); $this->outputResult($this->checkGit()); $io->write('Checking http connectivity to packagist: ', false); $this->outputResult($this->checkHttp('http', $config)); $io->write('Checking https connectivity to packagist: ', false); $this->outputResult($this->checkHttp('https', $config)); $opts = stream_context_get_options(StreamContextFactory::getContext('http://example.org')); if (!empty($opts['http']['proxy'])) { $io->write('Checking HTTP proxy: ', false); $this->outputResult($this->checkHttpProxy()); $io->write('Checking HTTP proxy support for request_fulluri: ', false); $this->outputResult($this->checkHttpProxyFullUriRequestParam()); $io->write('Checking HTTPS proxy support for request_fulluri: ', false); $this->outputResult($this->checkHttpsProxyFullUriRequestParam()); } if ($oauth = $config->get('github-oauth')) { foreach ($oauth as $domain => $token) { $io->write('Checking '.$domain.' oauth access: ', false); $this->outputResult($this->checkGithubOauth($domain, $token)); } } else { $io->write('Checking github.com rate limit: ', false); try { $rate = $this->getGithubRateLimit('github.com'); $this->outputResult(true); if (10 > $rate['remaining']) { $io->write('WARNING'); $io->write(sprintf( 'Github has a rate limit on their API. ' . 'You currently have %u ' . 'out of %u requests left.' . PHP_EOL . 'See https://developer.github.com/v3/#rate-limiting and also' . PHP_EOL . ' https://getcomposer.org/doc/articles/troubleshooting.md#api-rate-limit-and-oauth-tokens', $rate['remaining'], $rate['limit'] )); } } catch (\Exception $e) { if ($e instanceof TransportException && $e->getCode() === 401) { $this->outputResult('The oauth token for github.com seems invalid, run "composer config --global --unset github-oauth.github.com" to remove it'); } else { $this->outputResult($e); } } } $io->write('Checking disk free space: ', false); $this->outputResult($this->checkDiskSpace($config)); if ('phar:' === substr(__FILE__, 0, 5)) { $io->write('Checking pubkeys: ', false); $this->outputResult($this->checkPubKeys($config)); $io->write('Checking composer version: ', false); $this->outputResult($this->checkVersion($config)); } return $this->failures; } private function checkComposerSchema() { $validator = new ConfigValidator($this->getIO()); list($errors, , $warnings) = $validator->validate(Factory::getComposerFile()); if ($errors || $warnings) { $messages = array( 'error' => $errors, 'warning' => $warnings, ); $output = ''; foreach ($messages as $style => $msgs) { foreach ($msgs as $msg) { $output .= '<' . $style . '>' . $msg . '' . PHP_EOL; } } return rtrim($output); } return true; } private function checkGit() { $this->process->execute('git config color.ui', $output); if (strtolower(trim($output)) === 'always') { return 'Your git color.ui setting is set to always, this is known to create issues. Use "git config --global color.ui true" to set it correctly.'; } return true; } private function checkHttp($proto, Config $config) { $disableTls = false; $result = array(); if ($proto === 'https' && $config->get('disable-tls') === true) { $disableTls = true; $result[] = 'Composer is configured to disable SSL/TLS protection. This will leave remote HTTPS requests vulnerable to Man-In-The-Middle attacks.'; } if ($proto === 'https' && !extension_loaded('openssl') && !$disableTls) { $result[] = 'Composer is configured to use SSL/TLS protection but the openssl extension is not available.'; } try { $this->rfs->getContents('packagist.org', $proto . '://packagist.org/packages.json', false); } catch (TransportException $e) { if (false !== strpos($e->getMessage(), 'cafile')) { $result[] = '[' . get_class($e) . '] ' . $e->getMessage() . ''; $result[] = 'Unable to locate a valid CA certificate file. You must set a valid \'cafile\' option.'; $result[] = 'You can alternatively disable this error, at your own risk, by enabling the \'disable-tls\' option.'; } else { array_unshift($result, '[' . get_class($e) . '] ' . $e->getMessage()); } } if (count($result) > 0) { return $result; } return true; } private function checkHttpProxy() { $protocol = extension_loaded('openssl') ? 'https' : 'http'; try { $json = json_decode($this->rfs->getContents('packagist.org', $protocol . '://packagist.org/packages.json', false), true); $hash = reset($json['provider-includes']); $hash = $hash['sha256']; $path = str_replace('%hash%', $hash, key($json['provider-includes'])); $provider = $this->rfs->getContents('packagist.org', $protocol . '://packagist.org/'.$path, false); if (hash('sha256', $provider) !== $hash) { return 'It seems that your proxy is modifying http traffic on the fly'; } } catch (\Exception $e) { return $e; } return true; } /** * Due to various proxy servers configurations, some servers can't handle non-standard HTTP "http_proxy_request_fulluri" parameter, * and will return error 500/501 (as not implemented), see discussion @ https://github.com/composer/composer/pull/1825. * This method will test, if you need to disable this parameter via setting extra environment variable in your system. * * @return bool|string */ private function checkHttpProxyFullUriRequestParam() { $url = 'http://packagist.org/packages.json'; try { $this->rfs->getContents('packagist.org', $url, false); } catch (TransportException $e) { try { $this->rfs->getContents('packagist.org', $url, false, array('http' => array('request_fulluri' => false))); } catch (TransportException $e) { return 'Unable to assess the situation, maybe packagist.org is down ('.$e->getMessage().')'; } return 'It seems there is a problem with your proxy server, try setting the "HTTP_PROXY_REQUEST_FULLURI" and "HTTPS_PROXY_REQUEST_FULLURI" environment variables to "false"'; } return true; } /** * Due to various proxy servers configurations, some servers can't handle non-standard HTTP "http_proxy_request_fulluri" parameter, * and will return error 500/501 (as not implemented), see discussion @ https://github.com/composer/composer/pull/1825. * This method will test, if you need to disable this parameter via setting extra environment variable in your system. * * @return bool|string */ private function checkHttpsProxyFullUriRequestParam() { if (!extension_loaded('openssl')) { return 'You need the openssl extension installed for this check'; } $url = 'https://api.github.com/repos/Seldaek/jsonlint/zipball/1.0.0'; try { $this->rfs->getContents('github.com', $url, false); } catch (TransportException $e) { try { $this->rfs->getContents('github.com', $url, false, array('http' => array('request_fulluri' => false))); } catch (TransportException $e) { return 'Unable to assess the situation, maybe github is down ('.$e->getMessage().')'; } return 'It seems there is a problem with your proxy server, try setting the "HTTPS_PROXY_REQUEST_FULLURI" environment variable to "false"'; } return true; } private function checkGithubOauth($domain, $token) { $this->getIO()->setAuthentication($domain, $token, 'x-oauth-basic'); try { $url = $domain === 'github.com' ? 'https://api.'.$domain.'/' : 'https://'.$domain.'/api/v3/'; return $this->rfs->getContents($domain, $url, false, array( 'retry-auth-failure' => false, )) ? true : 'Unexpected error'; } catch (\Exception $e) { if ($e instanceof TransportException && $e->getCode() === 401) { return 'The oauth token for '.$domain.' seems invalid, run "composer config --global --unset github-oauth.'.$domain.'" to remove it'; } return $e; } } /** * @param string $domain * @param string $token * @throws TransportException * @return array */ private function getGithubRateLimit($domain, $token = null) { if ($token) { $this->getIO()->setAuthentication($domain, $token, 'x-oauth-basic'); } $url = $domain === 'github.com' ? 'https://api.'.$domain.'/rate_limit' : 'https://'.$domain.'/api/rate_limit'; $json = $this->rfs->getContents($domain, $url, false, array('retry-auth-failure' => false)); $data = json_decode($json, true); return $data['resources']['core']; } private function checkDiskSpace($config) { $minSpaceFree = 1024 * 1024; if ((($df = @disk_free_space($dir = $config->get('home'))) !== false && $df < $minSpaceFree) || (($df = @disk_free_space($dir = $config->get('vendor-dir'))) !== false && $df < $minSpaceFree) ) { return 'The disk hosting '.$dir.' is full'; } return true; } private function checkPubKeys($config) { $home = $config->get('home'); $errors = array(); $io = $this->getIO(); if (file_exists($home.'/keys.tags.pub') && file_exists($home.'/keys.dev.pub')) { $io->write(''); } if (file_exists($home.'/keys.tags.pub')) { $io->write('Tags Public Key Fingerprint: ' . Keys::fingerprint($home.'/keys.tags.pub')); } else { $errors[] = 'Missing pubkey for tags verification'; } if (file_exists($home.'/keys.dev.pub')) { $io->write('Dev Public Key Fingerprint: ' . Keys::fingerprint($home.'/keys.dev.pub')); } else { $errors[] = 'Missing pubkey for dev verification'; } if ($errors) { $errors[] = 'Run composer self-update --update-keys to set them up'; } return $errors ?: true; } private function checkVersion($config) { $versionsUtil = new Versions($config, $this->rfs); $latest = $versionsUtil->getLatest(); if (Composer::VERSION !== $latest['version'] && Composer::VERSION !== '@package_version@') { return 'You are not running the latest '.$versionsUtil->getChannel().' version, run `composer self-update` to update ('.Composer::VERSION.' => '.$latest['version'].')'; } return true; } /** * @param bool|string|\Exception $result */ private function outputResult($result) { $io = $this->getIO(); if (true === $result) { $io->write('OK'); } else { $this->failures++; $io->write('FAIL'); if ($result instanceof \Exception) { $io->write('['.get_class($result).'] '.$result->getMessage()); } elseif ($result) { if (is_array($result)) { foreach ($result as $message) { $io->write($message); } } else { $io->write($result); } } } } private function checkPlatform() { $output = ''; $out = function ($msg, $style) use (&$output) { $output .= '<'.$style.'>'.$msg.''.PHP_EOL; }; // code below taken from getcomposer.org/installer, any changes should be made there and replicated here $errors = array(); $warnings = array(); $iniPath = php_ini_loaded_file(); $displayIniMessage = false; if ($iniPath) { $iniMessage = PHP_EOL.PHP_EOL.'The php.ini used by your command-line PHP is: ' . $iniPath; } else { $iniMessage = PHP_EOL.PHP_EOL.'A php.ini file does not exist. You will have to create one.'; } $iniMessage .= PHP_EOL.'If you can not modify the ini file, you can also run `php -d option=value` to modify ini values on the fly. You can use -d multiple times.'; if (!function_exists('json_decode')) { $errors['json'] = true; } if (!extension_loaded('Phar')) { $errors['phar'] = true; } if (!extension_loaded('filter')) { $errors['filter'] = true; } if (!extension_loaded('hash')) { $errors['hash'] = true; } if (!extension_loaded('iconv') && !extension_loaded('mbstring')) { $errors['iconv_mbstring'] = true; } if (!ini_get('allow_url_fopen')) { $errors['allow_url_fopen'] = true; } if (extension_loaded('ionCube Loader') && ioncube_loader_iversion() < 40009) { $errors['ioncube'] = ioncube_loader_version(); } if (PHP_VERSION_ID < 50302) { $errors['php'] = PHP_VERSION; } if (!isset($errors['php']) && PHP_VERSION_ID < 50304) { $warnings['php'] = PHP_VERSION; } if (!extension_loaded('openssl')) { $errors['openssl'] = true; } if (extension_loaded('openssl') && OPENSSL_VERSION_NUMBER < 0x1000100f) { $warnings['openssl_version'] = true; } if (!defined('HHVM_VERSION') && !extension_loaded('apcu') && ini_get('apc.enable_cli')) { $warnings['apc_cli'] = true; } ob_start(); phpinfo(INFO_GENERAL); $phpinfo = ob_get_clean(); if (preg_match('{Configure Command(?: *| *=> *)(.*?)(?:|$)}m', $phpinfo, $match)) { $configure = $match[1]; if (false !== strpos($configure, '--enable-sigchild')) { $warnings['sigchild'] = true; } if (false !== strpos($configure, '--with-curlwrappers')) { $warnings['curlwrappers'] = true; } } if (ini_get('xdebug.profiler_enabled')) { $warnings['xdebug_profile'] = true; } elseif (extension_loaded('xdebug')) { $warnings['xdebug_loaded'] = true; } if (!empty($errors)) { foreach ($errors as $error => $current) { switch ($error) { case 'json': $text = PHP_EOL."The json extension is missing.".PHP_EOL; $text .= "Install it or recompile php without --disable-json"; break; case 'phar': $text = PHP_EOL."The phar extension is missing.".PHP_EOL; $text .= "Install it or recompile php without --disable-phar"; break; case 'filter': $text = PHP_EOL."The filter extension is missing.".PHP_EOL; $text .= "Install it or recompile php without --disable-filter"; break; case 'hash': $text = PHP_EOL."The hash extension is missing.".PHP_EOL; $text .= "Install it or recompile php without --disable-hash"; break; case 'iconv_mbstring': $text = PHP_EOL."The iconv OR mbstring extension is required and both are missing.".PHP_EOL; $text .= "Install either of them or recompile php without --disable-iconv"; break; case 'unicode': $text = PHP_EOL."The detect_unicode setting must be disabled.".PHP_EOL; $text .= "Add the following to the end of your `php.ini`:".PHP_EOL; $text .= " detect_unicode = Off"; $displayIniMessage = true; break; case 'suhosin': $text = PHP_EOL."The suhosin.executor.include.whitelist setting is incorrect.".PHP_EOL; $text .= "Add the following to the end of your `php.ini` or suhosin.ini (Example path [for Debian]: /etc/php5/cli/conf.d/suhosin.ini):".PHP_EOL; $text .= " suhosin.executor.include.whitelist = phar ".$current; $displayIniMessage = true; break; case 'php': $text = PHP_EOL."Your PHP ({$current}) is too old, you must upgrade to PHP 5.3.2 or higher."; break; case 'allow_url_fopen': $text = PHP_EOL."The allow_url_fopen setting is incorrect.".PHP_EOL; $text .= "Add the following to the end of your `php.ini`:".PHP_EOL; $text .= " allow_url_fopen = On"; $displayIniMessage = true; break; case 'ioncube': $text = PHP_EOL."Your ionCube Loader extension ($current) is incompatible with Phar files.".PHP_EOL; $text .= "Upgrade to ionCube 4.0.9 or higher or remove this line (path may be different) from your `php.ini` to disable it:".PHP_EOL; $text .= " zend_extension = /usr/lib/php5/20090626+lfs/ioncube_loader_lin_5.3.so"; $displayIniMessage = true; break; case 'openssl': $text = PHP_EOL."The openssl extension is missing, which means that secure HTTPS transfers are impossible.".PHP_EOL; $text .= "If possible you should enable it or recompile php with --with-openssl"; break; } $out($text, 'error'); } $output .= PHP_EOL; } if (!empty($warnings)) { foreach ($warnings as $warning => $current) { switch ($warning) { case 'apc_cli': $text = "The apc.enable_cli setting is incorrect.".PHP_EOL; $text .= "Add the following to the end of your `php.ini`:".PHP_EOL; $text .= " apc.enable_cli = Off"; $displayIniMessage = true; break; case 'sigchild': $text = "PHP was compiled with --enable-sigchild which can cause issues on some platforms.".PHP_EOL; $text .= "Recompile it without this flag if possible, see also:".PHP_EOL; $text .= " https://bugs.php.net/bug.php?id=22999"; break; case 'curlwrappers': $text = "PHP was compiled with --with-curlwrappers which will cause issues with HTTP authentication and GitHub.".PHP_EOL; $text .= " Recompile it without this flag if possible"; break; case 'php': $text = "Your PHP ({$current}) is quite old, upgrading to PHP 5.3.4 or higher is recommended.".PHP_EOL; $text .= " Composer works with 5.3.2+ for most people, but there might be edge case issues."; break; case 'openssl_version': // Attempt to parse version number out, fallback to whole string value. $opensslVersion = strstr(trim(strstr(OPENSSL_VERSION_TEXT, ' ')), ' ', true); $opensslVersion = $opensslVersion ?: OPENSSL_VERSION_TEXT; $text = "The OpenSSL library ({$opensslVersion}) used by PHP does not support TLSv1.2 or TLSv1.1.".PHP_EOL; $text .= "If possible you should upgrade OpenSSL to version 1.0.1 or above."; break; case 'xdebug_loaded': $text = "The xdebug extension is loaded, this can slow down Composer a little.".PHP_EOL; $text .= " Disabling it when using Composer is recommended."; break; case 'xdebug_profile': $text = "The xdebug.profiler_enabled setting is enabled, this can slow down Composer a lot.".PHP_EOL; $text .= "Add the following to the end of your `php.ini` to disable it:".PHP_EOL; $text .= " xdebug.profiler_enabled = 0"; $displayIniMessage = true; break; } $out($text, 'comment'); } } if ($displayIniMessage) { $out($iniMessage, 'comment'); } return !$warnings && !$errors ? true : $output; } } composer-1.0.0-beta2/src/Composer/Command/DumpAutoloadCommand.php000066400000000000000000000055531267577262200247240ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Composer\Plugin\CommandEvent; use Composer\Plugin\PluginEvents; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; /** * @author Jordi Boggiano */ class DumpAutoloadCommand extends BaseCommand { protected function configure() { $this ->setName('dump-autoload') ->setAliases(array('dumpautoload')) ->setDescription('Dumps the autoloader') ->setDefinition(array( new InputOption('no-scripts', null, InputOption::VALUE_NONE, 'Skips the execution of all scripts defined in composer.json file.'), new InputOption('optimize', 'o', InputOption::VALUE_NONE, 'Optimizes PSR0 and PSR4 packages to be loaded with classmaps too, good for production.'), new InputOption('classmap-authoritative', 'a', InputOption::VALUE_NONE, 'Autoload classes from the classmap only. Implicitly enables `--optimize`.'), new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables autoload-dev rules.'), )) ->setHelp(<<php composer.phar dump-autoload EOT ) ; } protected function execute(InputInterface $input, OutputInterface $output) { $composer = $this->getComposer(); $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'dump-autoload', $input, $output); $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent); $installationManager = $composer->getInstallationManager(); $localRepo = $composer->getRepositoryManager()->getLocalRepository(); $package = $composer->getPackage(); $config = $composer->getConfig(); $optimize = $input->getOption('optimize') || $config->get('optimize-autoloader'); $authoritative = $input->getOption('classmap-authoritative') || $config->get('classmap-authoritative'); if ($optimize || $authoritative) { $this->getIO()->writeError('Generating optimized autoload files'); } else { $this->getIO()->writeError('Generating autoload files'); } $generator = $composer->getAutoloadGenerator(); $generator->setDevMode(!$input->getOption('no-dev')); $generator->setClassMapAuthoritative($authoritative); $generator->setRunScripts(!$input->getOption('no-scripts')); $generator->dump($config, $localRepo, $package, $installationManager, 'composer', $optimize); } } composer-1.0.0-beta2/src/Composer/Command/ExecCommand.php000066400000000000000000000050761267577262200232120ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Input\InputArgument; /** * @author Davey Shafik */ class ExecCommand extends BaseCommand { protected function configure() { $this ->setName('exec') ->setDescription('Execute a vendored binary/script') ->setDefinition(array( new InputOption('list', 'l', InputOption::VALUE_NONE), new InputArgument('binary', InputArgument::OPTIONAL, 'The binary to run, e.g. phpunit'), new InputArgument( 'args', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, 'Arguments to pass to the binary. Use -- to separate from composer arguments' ), )) ; } protected function execute(InputInterface $input, OutputInterface $output) { $composer = $this->getComposer(); $binDir = $composer->getConfig()->get('bin-dir'); if ($input->getOption('list') || !$input->getArgument('binary')) { $bins = glob($binDir . '/*'); if (!$bins) { throw new \RuntimeException("No binaries found in bin-dir ($binDir)"); } $this->getIO()->write(<<Available binaries: EOT ); foreach ($bins as $bin) { // skip .bat copies if (isset($previousBin) && $bin === $previousBin.'.bat') { continue; } $previousBin = $bin; $bin = basename($bin); $this->getIO()->write(<<- $bin EOT ); } return; } $binary = $input->getArgument('binary'); $dispatcher = $composer->getEventDispatcher(); $dispatcher->addListener('__exec_command', $binary); if ($output->getVerbosity() === OutputInterface::VERBOSITY_NORMAL) { $output->setVerbosity(OutputInterface::VERBOSITY_QUIET); } return $dispatcher->dispatchScript('__exec_command', true, $input->getArgument('args')); } } composer-1.0.0-beta2/src/Composer/Command/GlobalCommand.php000066400000000000000000000051161267577262200235210ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Composer\Factory; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\StringInput; use Symfony\Component\Console\Output\OutputInterface; /** * @author Jordi Boggiano */ class GlobalCommand extends BaseCommand { protected function configure() { $this ->setName('global') ->setDescription('Allows running commands in the global composer dir ($COMPOSER_HOME).') ->setDefinition(array( new InputArgument('command-name', InputArgument::REQUIRED, ''), new InputArgument('args', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, ''), )) ->setHelp(<<\AppData\Roaming\Composer on Windows and /home//.composer on unix systems. Note: This path may vary depending on customizations to bin-dir in composer.json or the environmental variable COMPOSER_BIN_DIR. EOT ) ; } public function run(InputInterface $input, OutputInterface $output) { // extract real command name $tokens = preg_split('{\s+}', $input->__toString()); $args = array(); foreach ($tokens as $token) { if ($token && $token[0] !== '-') { $args[] = $token; if (count($args) >= 2) { break; } } } // show help for this command if no command was found if (count($args) < 2) { return parent::run($input, $output); } // change to global dir $config = Factory::createConfig(); chdir($config->get('home')); $this->getIO()->writeError('Changed current directory to '.$config->get('home').''); // create new input without "global" command prefix $input = new StringInput(preg_replace('{\bg(?:l(?:o(?:b(?:a(?:l)?)?)?)?)?\b}', '', $input->__toString(), 1)); return $this->getApplication()->run($input, $output); } } composer-1.0.0-beta2/src/Composer/Command/HomeCommand.php000066400000000000000000000116141267577262200232110ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Composer\Package\CompletePackageInterface; use Composer\Repository\RepositoryInterface; use Composer\Repository\ArrayRepository; use Composer\Repository\RepositoryFactory; use Composer\Util\Platform; use Composer\Util\ProcessExecutor; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; /** * @author Robert Schönthal */ class HomeCommand extends BaseCommand { /** * {@inheritDoc} */ protected function configure() { $this ->setName('browse') ->setAliases(array('home')) ->setDescription('Opens the package\'s repository URL or homepage in your browser.') ->setDefinition(array( new InputArgument('packages', InputArgument::IS_ARRAY | InputArgument::REQUIRED, 'Package(s) to browse to.'), new InputOption('homepage', 'H', InputOption::VALUE_NONE, 'Open the homepage instead of the repository URL.'), new InputOption('show', 's', InputOption::VALUE_NONE, 'Only show the homepage or repository URL.'), )) ->setHelp(<<initializeRepos(); $io = $this->getIO(); $return = 0; foreach ($input->getArgument('packages') as $packageName) { $handled = false; $packageExists = false; foreach ($repos as $repo) { foreach ($repo->findPackages($packageName) as $package) { $packageExists = true; if ($this->handlePackage($package, $input->getOption('homepage'), $input->getOption('show'))) { $handled = true; break 2; } } } if (!$packageExists) { $return = 1; $io->writeError('Package '.$packageName.' not found'); } if (!$handled) { $return = 1; $io->writeError(''.($input->getOption('homepage') ? 'Invalid or missing homepage' : 'Invalid or missing repository URL').' for '.$packageName.''); } } return $return; } private function handlePackage(CompletePackageInterface $package, $showHomepage, $showOnly) { $support = $package->getSupport(); $url = isset($support['source']) ? $support['source'] : $package->getSourceUrl(); if (!$url || $showHomepage) { $url = $package->getHomepage(); } if (!$url || !filter_var($url, FILTER_VALIDATE_URL)) { return false; } if ($showOnly) { $this->getIO()->write(sprintf('%s', $url)); } else { $this->openBrowser($url); } return true; } /** * opens a url in your system default browser * * @param string $url */ private function openBrowser($url) { $url = ProcessExecutor::escape($url); if (Platform::isWindows()) { return passthru('start "web" explorer "' . $url . '"'); } passthru('which xdg-open', $linux); passthru('which open', $osx); if (0 === $linux) { passthru('xdg-open ' . $url); } elseif (0 === $osx) { passthru('open ' . $url); } else { $this->getIO()->writeError('no suitable browser opening command found, open yourself: ' . $url); } } /** * Initializes repositories * * Returns an array of repos in order they should be checked in * * @return RepositoryInterface[] */ private function initializeRepos() { $composer = $this->getComposer(false); if ($composer) { return array_merge( array(new ArrayRepository(array($composer->getPackage()))), // root package array($composer->getRepositoryManager()->getLocalRepository()), // installed packages $composer->getRepositoryManager()->getRepositories() // remotes ); } return RepositoryFactory::defaultRepos($this->getIO()); } } composer-1.0.0-beta2/src/Composer/Command/InitCommand.php000066400000000000000000000553011267577262200232250ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Composer\DependencyResolver\Pool; use Composer\Json\JsonFile; use Composer\Factory; use Composer\Repository\RepositoryFactory; use Composer\Package\BasePackage; use Composer\Package\Version\VersionParser; use Composer\Package\Version\VersionSelector; use Composer\Repository\CompositeRepository; use Composer\Repository\PlatformRepository; use Composer\Util\ProcessExecutor; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Process\Process; use Symfony\Component\Process\ExecutableFinder; /** * @author Justin Rainbow * @author Jordi Boggiano */ class InitCommand extends BaseCommand { /** @var CompositeRepository */ protected $repos; /** @var array */ private $gitConfig; /** @var Pool */ private $pool; /** * {@inheritdoc} */ protected function configure() { $this ->setName('init') ->setDescription('Creates a basic composer.json file in current directory.') ->setDefinition(array( new InputOption('name', null, InputOption::VALUE_REQUIRED, 'Name of the package'), new InputOption('description', null, InputOption::VALUE_REQUIRED, 'Description of package'), new InputOption('author', null, InputOption::VALUE_REQUIRED, 'Author name of package'), // new InputOption('version', null, InputOption::VALUE_NONE, 'Version of package'), new InputOption('type', null, InputOption::VALUE_OPTIONAL, 'Type of package'), new InputOption('homepage', null, InputOption::VALUE_REQUIRED, 'Homepage of package'), new InputOption('require', null, InputOption::VALUE_IS_ARRAY | InputOption::VALUE_REQUIRED, 'Package to require with a version constraint, e.g. foo/bar:1.0.0 or foo/bar=1.0.0 or "foo/bar 1.0.0"'), new InputOption('require-dev', null, InputOption::VALUE_IS_ARRAY | InputOption::VALUE_REQUIRED, 'Package to require for development with a version constraint, e.g. foo/bar:1.0.0 or foo/bar=1.0.0 or "foo/bar 1.0.0"'), new InputOption('stability', 's', InputOption::VALUE_REQUIRED, 'Minimum stability (empty or one of: '.implode(', ', array_keys(BasePackage::$stabilities)).')'), new InputOption('license', 'l', InputOption::VALUE_REQUIRED, 'License of package'), new InputOption('repository', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Add custom repositories, either by URL or using JSON arrays'), )) ->setHelp(<<init command creates a basic composer.json file in the current directory. php composer.phar init EOT ) ; } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $io = $this->getIO(); $whitelist = array('name', 'description', 'author', 'type', 'homepage', 'require', 'require-dev', 'stability', 'license'); $options = array_filter(array_intersect_key($input->getOptions(), array_flip($whitelist))); if (isset($options['author'])) { $options['authors'] = $this->formatAuthors($options['author']); unset($options['author']); } $repositories = $input->getOption('repository'); if ($repositories) { $config = Factory::createConfig($io); foreach ($repositories as $repo) { $options['repositories'][] = RepositoryFactory::configFromString($io, $config, $repo); } } if (isset($options['stability'])) { $options['minimum-stability'] = $options['stability']; unset($options['stability']); } $options['require'] = isset($options['require']) ? $this->formatRequirements($options['require']) : new \stdClass; if (array() === $options['require']) { $options['require'] = new \stdClass; } if (isset($options['require-dev'])) { $options['require-dev'] = $this->formatRequirements($options['require-dev']); if (array() === $options['require-dev']) { $options['require-dev'] = new \stdClass; } } $file = new JsonFile('composer.json'); $json = $file->encode($options); if ($input->isInteractive()) { $io->writeError(array('', $json, '')); if (!$io->askConfirmation('Do you confirm generation [yes]? ', true)) { $io->writeError('Command aborted'); return 1; } } $file->write($options); if ($input->isInteractive() && is_dir('.git')) { $ignoreFile = realpath('.gitignore'); if (false === $ignoreFile) { $ignoreFile = realpath('.') . '/.gitignore'; } if (!$this->hasVendorIgnore($ignoreFile)) { $question = 'Would you like the vendor directory added to your .gitignore [yes]? '; if ($io->askConfirmation($question, true)) { $this->addVendorIgnore($ignoreFile); } } } } /** * {@inheritdoc} */ protected function interact(InputInterface $input, OutputInterface $output) { $git = $this->getGitConfig(); $io = $this->getIO(); $formatter = $this->getHelperSet()->get('formatter'); // initialize repos if configured $repositories = $input->getOption('repository'); if ($repositories) { $config = Factory::createConfig($io); $repos = array(new PlatformRepository); foreach ($repositories as $repo) { $repos[] = RepositoryFactory::fromString($io, $config, $repo); } $repos[] = RepositoryFactory::createRepo($io, $config, array( 'type' => 'composer', 'url' => 'https://packagist.org', )); $this->repos = new CompositeRepository($repos); unset($repos, $config, $repositories); } $io->writeError(array( '', $formatter->formatBlock('Welcome to the Composer config generator', 'bg=blue;fg=white', true), '', )); // namespace $io->writeError(array( '', 'This command will guide you through creating your composer.json config.', '', )); $cwd = realpath("."); if (!$name = $input->getOption('name')) { $name = basename($cwd); $name = preg_replace('{(?:([a-z])([A-Z])|([A-Z])([A-Z][a-z]))}', '\\1\\3-\\2\\4', $name); $name = strtolower($name); if (isset($git['github.user'])) { $name = $git['github.user'] . '/' . $name; } elseif (!empty($_SERVER['USERNAME'])) { $name = $_SERVER['USERNAME'] . '/' . $name; } elseif (get_current_user()) { $name = get_current_user() . '/' . $name; } else { // package names must be in the format foo/bar $name = $name . '/' . $name; } $name = strtolower($name); } else { if (!preg_match('{^[a-z0-9_.-]+/[a-z0-9_.-]+$}', $name)) { throw new \InvalidArgumentException( 'The package name '.$name.' is invalid, it should be lowercase and have a vendor name, a forward slash, and a package name, matching: [a-z0-9_.-]+/[a-z0-9_.-]+' ); } } $name = $io->askAndValidate( 'Package name (/) ['.$name.']: ', function ($value) use ($name) { if (null === $value) { return $name; } if (!preg_match('{^[a-z0-9_.-]+/[a-z0-9_.-]+$}', $value)) { throw new \InvalidArgumentException( 'The package name '.$value.' is invalid, it should be lowercase and have a vendor name, a forward slash, and a package name, matching: [a-z0-9_.-]+/[a-z0-9_.-]+' ); } return $value; }, null, $name ); $input->setOption('name', $name); $description = $input->getOption('description') ?: false; $description = $io->ask( 'Description ['.$description.']: ', $description ); $input->setOption('description', $description); if (null === $author = $input->getOption('author')) { if (isset($git['user.name']) && isset($git['user.email'])) { $author = sprintf('%s <%s>', $git['user.name'], $git['user.email']); } } $self = $this; $author = $io->askAndValidate( 'Author ['.$author.', n to skip]: ', function ($value) use ($self, $author) { if ($value === 'n' || $value === 'no') { return; } $value = $value ?: $author; $author = $self->parseAuthorString($value); return sprintf('%s <%s>', $author['name'], $author['email']); }, null, $author ); $input->setOption('author', $author); $minimumStability = $input->getOption('stability') ?: null; $minimumStability = $io->askAndValidate( 'Minimum Stability ['.$minimumStability.']: ', function ($value) use ($self, $minimumStability) { if (null === $value) { return $minimumStability; } if (!isset(BasePackage::$stabilities[$value])) { throw new \InvalidArgumentException( 'Invalid minimum stability "'.$value.'". Must be empty or one of: '. implode(', ', array_keys(BasePackage::$stabilities)) ); } return $value; }, null, $minimumStability ); $input->setOption('stability', $minimumStability); $type = $input->getOption('type') ?: false; $type = $io->ask( 'Package Type ['.$type.']: ', $type ); $input->setOption('type', $type); $license = $input->getOption('license') ?: false; $license = $io->ask( 'License ['.$license.']: ', $license ); $input->setOption('license', $license); $io->writeError(array('', 'Define your dependencies.', '')); $question = 'Would you like to define your dependencies (require) interactively [yes]? '; $requirements = array(); if ($io->askConfirmation($question, true)) { $requirements = $this->determineRequirements($input, $output, $input->getOption('require')); } $input->setOption('require', $requirements); $question = 'Would you like to define your dev dependencies (require-dev) interactively [yes]? '; $devRequirements = array(); if ($io->askConfirmation($question, true)) { $devRequirements = $this->determineRequirements($input, $output, $input->getOption('require-dev')); } $input->setOption('require-dev', $devRequirements); } /** * @private * @param string $author * @return array */ public function parseAuthorString($author) { if (preg_match('/^(?P[- \.,\p{L}\p{N}\'’]+) <(?P.+?)>$/u', $author, $match)) { if ($this->isValidEmail($match['email'])) { return array( 'name' => trim($match['name']), 'email' => $match['email'], ); } } throw new \InvalidArgumentException( 'Invalid author string. Must be in the format: '. 'John Smith ' ); } protected function findPackages($name) { return $this->getRepos()->search($name); } protected function getRepos() { if (!$this->repos) { $this->repos = new CompositeRepository(array_merge( array(new PlatformRepository), RepositoryFactory::defaultRepos($this->getIO()) )); } return $this->repos; } protected function determineRequirements(InputInterface $input, OutputInterface $output, $requires = array(), $phpVersion = null) { if ($requires) { $requires = $this->normalizeRequirements($requires); $result = array(); $io = $this->getIO(); foreach ($requires as $requirement) { if (!isset($requirement['version'])) { // determine the best version automatically $version = $this->findBestVersionForPackage($input, $requirement['name'], $phpVersion); $requirement['version'] = $version; $io->writeError(sprintf( 'Using version %s for %s', $requirement['version'], $requirement['name'] )); } $result[] = $requirement['name'] . ' ' . $requirement['version']; } return $result; } $versionParser = new VersionParser(); $io = $this->getIO(); while (null !== $package = $io->ask('Search for a package: ')) { $matches = $this->findPackages($package); if (count($matches)) { $exactMatch = null; $choices = array(); foreach ($matches as $position => $foundPackage) { $choices[] = sprintf(' %5s %s', "[$position]", $foundPackage['name']); if ($foundPackage['name'] === $package) { $exactMatch = true; break; } } // no match, prompt which to pick if (!$exactMatch) { $io->writeError(array( '', sprintf('Found %s packages matching %s', count($matches), $package), '', )); $io->writeError($choices); $io->writeError(''); $validator = function ($selection) use ($matches, $versionParser) { if ('' === $selection) { return false; } if (is_numeric($selection) && isset($matches[(int) $selection])) { $package = $matches[(int) $selection]; return $package['name']; } if (preg_match('{^\s*(?P[\S/]+)(?:\s+(?P\S+))?\s*$}', $selection, $packageMatches)) { if (isset($packageMatches['version'])) { // parsing `acme/example ~2.3` // validate version constraint $versionParser->parseConstraints($packageMatches['version']); return $packageMatches['name'].' '.$packageMatches['version']; } // parsing `acme/example` return $packageMatches['name']; } throw new \Exception('Not a valid selection'); }; $package = $io->askAndValidate( 'Enter package # to add, or the complete package name if it is not listed: ', $validator, 3, false ); } // no constraint yet, determine the best version automatically if (false !== $package && false === strpos($package, ' ')) { $validator = function ($input) { $input = trim($input); return $input ?: false; }; $constraint = $io->askAndValidate( 'Enter the version constraint to require (or leave blank to use the latest version): ', $validator, 3, false ); if (false === $constraint) { $constraint = $this->findBestVersionForPackage($input, $package, $phpVersion); $io->writeError(sprintf( 'Using version %s for %s', $constraint, $package )); } $package .= ' '.$constraint; } if (false !== $package) { $requires[] = $package; } } } return $requires; } protected function formatAuthors($author) { return array($this->parseAuthorString($author)); } protected function formatRequirements(array $requirements) { $requires = array(); $requirements = $this->normalizeRequirements($requirements); foreach ($requirements as $requirement) { $requires[$requirement['name']] = $requirement['version']; } return $requires; } protected function getGitConfig() { if (null !== $this->gitConfig) { return $this->gitConfig; } $finder = new ExecutableFinder(); $gitBin = $finder->find('git'); $cmd = new Process(sprintf('%s config -l', ProcessExecutor::escape($gitBin))); $cmd->run(); if ($cmd->isSuccessful()) { $this->gitConfig = array(); preg_match_all('{^([^=]+)=(.*)$}m', $cmd->getOutput(), $matches, PREG_SET_ORDER); foreach ($matches as $match) { $this->gitConfig[$match[1]] = $match[2]; } return $this->gitConfig; } return $this->gitConfig = array(); } /** * Checks the local .gitignore file for the Composer vendor directory. * * Tested patterns include: * "/$vendor" * "$vendor" * "$vendor/" * "/$vendor/" * "/$vendor/*" * "$vendor/*" * * @param string $ignoreFile * @param string $vendor * * @return bool */ protected function hasVendorIgnore($ignoreFile, $vendor = 'vendor') { if (!file_exists($ignoreFile)) { return false; } $pattern = sprintf('{^/?%s(/\*?)?$}', preg_quote($vendor)); $lines = file($ignoreFile, FILE_IGNORE_NEW_LINES); foreach ($lines as $line) { if (preg_match($pattern, $line)) { return true; } } return false; } protected function normalizeRequirements(array $requirements) { $parser = new VersionParser(); return $parser->parseNameVersionPairs($requirements); } protected function addVendorIgnore($ignoreFile, $vendor = '/vendor/') { $contents = ""; if (file_exists($ignoreFile)) { $contents = file_get_contents($ignoreFile); if ("\n" !== substr($contents, 0, -1)) { $contents .= "\n"; } } file_put_contents($ignoreFile, $contents . $vendor. "\n"); } protected function isValidEmail($email) { // assume it's valid if we can't validate it if (!function_exists('filter_var')) { return true; } // php <5.3.3 has a very broken email validator, so bypass checks if (PHP_VERSION_ID < 50303) { return true; } return false !== filter_var($email, FILTER_VALIDATE_EMAIL); } private function getPool(InputInterface $input) { if (!$this->pool) { $this->pool = new Pool($this->getMinimumStability($input)); $this->pool->addRepository($this->getRepos()); } return $this->pool; } private function getMinimumStability(InputInterface $input) { if ($input->hasOption('stability')) { return $input->getOption('stability') ?: 'stable'; } $file = Factory::getComposerFile(); if (is_file($file) && is_readable($file) && is_array($composer = json_decode(file_get_contents($file), true))) { if (!empty($composer['minimum-stability'])) { return $composer['minimum-stability']; } } return 'stable'; } /** * Given a package name, this determines the best version to use in the require key. * * This returns a version with the ~ operator prefixed when possible. * * @param InputInterface $input * @param string $name * @param string $phpVersion * @throws \InvalidArgumentException * @return string */ private function findBestVersionForPackage(InputInterface $input, $name, $phpVersion) { // find the latest version allowed in this pool $versionSelector = new VersionSelector($this->getPool($input)); $package = $versionSelector->findBestCandidate($name, null, $phpVersion); if (!$package) { // Check whether the PHP version was the problem if ($phpVersion && $versionSelector->findBestCandidate($name)) { throw new \InvalidArgumentException(sprintf( 'Could not find package %s at any version matching your PHP version %s', $name, $phpVersion )); } throw new \InvalidArgumentException(sprintf( 'Could not find package %s at any version for your minimum-stability (%s). Check the package spelling or your minimum-stability', $name, $this->getMinimumStability($input) )); } return $versionSelector->findRecommendedRequireVersion($package); } } composer-1.0.0-beta2/src/Composer/Command/InstallCommand.php000066400000000000000000000145531267577262200237340ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Composer\Installer; use Composer\Plugin\CommandEvent; use Composer\Plugin\PluginEvents; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Output\OutputInterface; /** * @author Jordi Boggiano * @author Ryan Weaver * @author Konstantin Kudryashov * @author Nils Adermann */ class InstallCommand extends BaseCommand { protected function configure() { $this ->setName('install') ->setDescription('Installs the project dependencies from the composer.lock file if present, or falls back on the composer.json.') ->setDefinition(array( new InputOption('prefer-source', null, InputOption::VALUE_NONE, 'Forces installation from package sources when possible, including VCS information.'), new InputOption('prefer-dist', null, InputOption::VALUE_NONE, 'Forces installation from package dist even for dev versions.'), new InputOption('dry-run', null, InputOption::VALUE_NONE, 'Outputs the operations but will not execute anything (implicitly enables --verbose).'), new InputOption('dev', null, InputOption::VALUE_NONE, 'Enables installation of require-dev packages (enabled by default, only present for BC).'), new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables installation of require-dev packages.'), new InputOption('no-plugins', null, InputOption::VALUE_NONE, 'Disables all plugins.'), new InputOption('no-custom-installers', null, InputOption::VALUE_NONE, 'DEPRECATED: Use no-plugins instead.'), new InputOption('no-autoloader', null, InputOption::VALUE_NONE, 'Skips autoloader generation'), new InputOption('no-scripts', null, InputOption::VALUE_NONE, 'Skips the execution of all scripts defined in composer.json file.'), new InputOption('no-progress', null, InputOption::VALUE_NONE, 'Do not output download progress.'), new InputOption('verbose', 'v|vv|vvv', InputOption::VALUE_NONE, 'Shows more details including new commits pulled in when updating packages.'), new InputOption('optimize-autoloader', 'o', InputOption::VALUE_NONE, 'Optimize autoloader during autoloader dump'), new InputOption('classmap-authoritative', 'a', InputOption::VALUE_NONE, 'Autoload classes from the classmap only. Implicitly enables `--optimize-autoloader`.'), new InputOption('ignore-platform-reqs', null, InputOption::VALUE_NONE, 'Ignore platform requirements (php & ext- packages).'), new InputArgument('packages', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, 'Should not be provided, use composer require instead to add a given package to composer.json.'), )) ->setHelp(<<install command reads the composer.lock file from the current directory, processes it, and downloads and installs all the libraries and dependencies outlined in that file. If the file does not exist it will look for composer.json and do the same. php composer.phar install EOT ) ; } protected function execute(InputInterface $input, OutputInterface $output) { $io = $this->getIO(); if ($args = $input->getArgument('packages')) { $io->writeError('Invalid argument '.implode(' ', $args).'. Use "composer require '.implode(' ', $args).'" instead to add packages to your composer.json.'); return 1; } if ($input->getOption('no-custom-installers')) { $io->writeError('You are using the deprecated option "no-custom-installers". Use "no-plugins" instead.'); $input->setOption('no-plugins', true); } if ($input->getOption('dev')) { $io->writeError('You are using the deprecated option "dev". Dev packages are installed by default now.'); } $composer = $this->getComposer(true, $input->getOption('no-plugins')); $composer->getDownloadManager()->setOutputProgress(!$input->getOption('no-progress')); $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'install', $input, $output); $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent); $install = Installer::create($io, $composer); $preferSource = false; $preferDist = false; $config = $composer->getConfig(); switch ($config->get('preferred-install')) { case 'source': $preferSource = true; break; case 'dist': $preferDist = true; break; case 'auto': default: // noop break; } if ($input->getOption('prefer-source') || $input->getOption('prefer-dist')) { $preferSource = $input->getOption('prefer-source'); $preferDist = $input->getOption('prefer-dist'); } $optimize = $input->getOption('optimize-autoloader') || $config->get('optimize-autoloader'); $authoritative = $input->getOption('classmap-authoritative') || $config->get('classmap-authoritative'); $install ->setDryRun($input->getOption('dry-run')) ->setVerbose($input->getOption('verbose')) ->setPreferSource($preferSource) ->setPreferDist($preferDist) ->setDevMode(!$input->getOption('no-dev')) ->setDumpAutoloader(!$input->getOption('no-autoloader')) ->setRunScripts(!$input->getOption('no-scripts')) ->setOptimizeAutoloader($optimize) ->setClassMapAuthoritative($authoritative) ->setIgnorePlatformRequirements($input->getOption('ignore-platform-reqs')) ; if ($input->getOption('no-plugins')) { $install->disablePlugins(); } return $install->run(); } } composer-1.0.0-beta2/src/Composer/Command/LicensesCommand.php000066400000000000000000000124211267577262200240630ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Composer\Json\JsonFile; use Composer\Plugin\CommandEvent; use Composer\Plugin\PluginEvents; use Composer\Package\PackageInterface; use Composer\Repository\RepositoryInterface; use Symfony\Component\Console\Helper\Table; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; /** * @author Benoît Merlet */ class LicensesCommand extends BaseCommand { protected function configure() { $this ->setName('licenses') ->setDescription('Show information about licenses of dependencies') ->setDefinition(array( new InputOption('format', 'f', InputOption::VALUE_REQUIRED, 'Format of the output: text or json', 'text'), new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables search in require-dev packages.'), )) ->setHelp(<<getComposer(); $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'licenses', $input, $output); $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent); $root = $composer->getPackage(); $repo = $composer->getRepositoryManager()->getLocalRepository(); if ($input->getOption('no-dev')) { $packages = $this->filterRequiredPackages($repo, $root); } else { $packages = $this->appendPackages($repo->getPackages(), array()); } ksort($packages); $io = $this->getIO(); switch ($format = $input->getOption('format')) { case 'text': $io->write('Name: '.$root->getPrettyName().''); $io->write('Version: '.$root->getFullPrettyVersion().''); $io->write('Licenses: '.(implode(', ', $root->getLicense()) ?: 'none').''); $io->write('Dependencies:'); $io->write(''); $table = new Table($output); $table->setStyle('compact'); $table->getStyle()->setVerticalBorderChar(''); $table->getStyle()->setCellRowContentFormat('%s '); $table->setHeaders(array('Name', 'Version', 'License')); foreach ($packages as $package) { $table->addRow(array( $package->getPrettyName(), $package->getFullPrettyVersion(), implode(', ', $package->getLicense()) ?: 'none', )); } $table->render(); break; case 'json': $dependencies = array(); foreach ($packages as $package) { $dependencies[$package->getPrettyName()] = array( 'version' => $package->getFullPrettyVersion(), 'license' => $package->getLicense(), ); } $io->write(JsonFile::encode(array( 'name' => $root->getPrettyName(), 'version' => $root->getFullPrettyVersion(), 'license' => $root->getLicense(), 'dependencies' => $dependencies, ))); break; default: throw new \RuntimeException(sprintf('Unsupported format "%s". See help for supported formats.', $format)); } } /** * Find package requires and child requires * * @param RepositoryInterface $repo * @param PackageInterface $package */ private function filterRequiredPackages(RepositoryInterface $repo, PackageInterface $package, $bucket = array()) { $requires = array_keys($package->getRequires()); $packageListNames = array_keys($bucket); $packages = array_filter( $repo->getPackages(), function ($package) use ($requires, $packageListNames) { return in_array($package->getName(), $requires) && !in_array($package->getName(), $packageListNames); } ); $bucket = $this->appendPackages($packages, $bucket); foreach ($packages as $package) { $bucket = $this->filterRequiredPackages($repo, $package, $bucket); } return $bucket; } /** * Adds packages to the package list * * @param array $packages the list of packages to add * @param array $bucket the list to add packages to * @return array */ public function appendPackages(array $packages, array $bucket) { foreach ($packages as $package) { $bucket[$package->getName()] = $package; } return $bucket; } } composer-1.0.0-beta2/src/Composer/Command/ProhibitsCommand.php000066400000000000000000000024731267577262200242670ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; /** * @author Niels Keurentjes */ class ProhibitsCommand extends BaseDependencyCommand { /** * Configure command metadata. */ protected function configure() { parent::configure(); $this ->setName('prohibits') ->setAliases(array('why-not')) ->setDescription('Shows which packages prevent the given package from being installed') ->setHelp(<<php composer.phar prohibits composer/composer EOT ) ; } /** * Execute the function. * * @param InputInterface $input * @param OutputInterface $output * @return int|null */ protected function execute(InputInterface $input, OutputInterface $output) { return parent::doExecute($input, $output, true); } } composer-1.0.0-beta2/src/Composer/Command/RemoveCommand.php000066400000000000000000000141521267577262200235560ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Composer\Config\JsonConfigSource; use Composer\Installer; use Composer\Plugin\CommandEvent; use Composer\Plugin\PluginEvents; use Composer\Json\JsonFile; use Composer\Factory; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Output\OutputInterface; /** * @author Pierre du Plessis * @author Jordi Boggiano */ class RemoveCommand extends BaseCommand { protected function configure() { $this ->setName('remove') ->setDescription('Removes a package from the require or require-dev') ->setDefinition(array( new InputArgument('packages', InputArgument::IS_ARRAY, 'Packages that should be removed.'), new InputOption('dev', null, InputOption::VALUE_NONE, 'Removes a package from the require-dev section.'), new InputOption('no-plugins', null, InputOption::VALUE_NONE, 'Disables all plugins.'), new InputOption('no-progress', null, InputOption::VALUE_NONE, 'Do not output download progress.'), new InputOption('no-update', null, InputOption::VALUE_NONE, 'Disables the automatic update of the dependencies.'), new InputOption('update-no-dev', null, InputOption::VALUE_NONE, 'Run the dependency update with the --no-dev option.'), new InputOption('update-with-dependencies', null, InputOption::VALUE_NONE, 'Allows inherited dependencies to be updated with explicit dependencies. (Deprecrated, is now default behavior)'), new InputOption('no-update-with-dependencies', null, InputOption::VALUE_NONE, 'Does not allow inherited dependencies to be updated with explicit dependencies.'), new InputOption('ignore-platform-reqs', null, InputOption::VALUE_NONE, 'Ignore platform requirements (php & ext- packages).'), new InputOption('optimize-autoloader', 'o', InputOption::VALUE_NONE, 'Optimize autoloader during autoloader dump'), new InputOption('classmap-authoritative', 'a', InputOption::VALUE_NONE, 'Autoload classes from the classmap only. Implicitly enables `--optimize-autoloader`.'), )) ->setHelp(<<remove command removes a package from the current list of installed packages php composer.phar remove EOT ) ; } protected function execute(InputInterface $input, OutputInterface $output) { $packages = $input->getArgument('packages'); $file = Factory::getComposerFile(); $jsonFile = new JsonFile($file); $composer = $jsonFile->read(); $composerBackup = file_get_contents($jsonFile->getPath()); $json = new JsonConfigSource($jsonFile); $type = $input->getOption('dev') ? 'require-dev' : 'require'; $altType = !$input->getOption('dev') ? 'require-dev' : 'require'; $io = $this->getIO(); if ($input->getOption('update-with-dependencies')) { $io->writeError('You are using the deprecated option "update-with-dependencies". This is now default behaviour. The --no-update-with-dependencies option can be used to remove a package without its dependencies.'); } foreach ($packages as $package) { if (isset($composer[$type][$package])) { $json->removeLink($type, $package); } elseif (isset($composer[$altType][$package])) { $io->writeError(''.$package.' could not be found in '.$type.' but it is present in '.$altType.''); if ($io->isInteractive()) { if ($io->askConfirmation('Do you want to remove it from '.$altType.' [yes]? ', true)) { $json->removeLink($altType, $package); } } } else { $io->writeError(''.$package.' is not required in your composer.json and has not been removed'); } } if ($input->getOption('no-update')) { return 0; } // Update packages $composer = $this->getComposer(true, $input->getOption('no-plugins')); $composer->getDownloadManager()->setOutputProgress(!$input->getOption('no-progress')); $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'remove', $input, $output); $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent); $install = Installer::create($io, $composer); $updateDevMode = !$input->getOption('update-no-dev'); $optimize = $input->getOption('optimize-autoloader') || $composer->getConfig()->get('optimize-autoloader'); $authoritative = $input->getOption('classmap-authoritative') || $composer->getConfig()->get('classmap-authoritative'); $install ->setVerbose($input->getOption('verbose')) ->setDevMode($updateDevMode) ->setOptimizeAutoloader($optimize) ->setClassMapAuthoritative($authoritative) ->setUpdate(true) ->setUpdateWhitelist($packages) ->setWhitelistDependencies( ! $input->getOption('no-update-with-dependencies')) ->setIgnorePlatformRequirements($input->getOption('ignore-platform-reqs')) ; $exception = null; try { $status = $install->run(); } catch (\Exception $exception) { $status = 1; } if ($status !== 0) { $io->writeError("\n".'Removal failed, reverting '.$file.' to its original content.'); file_put_contents($jsonFile->getPath(), $composerBackup); } if ($exception) { throw $exception; } return $status; } } composer-1.0.0-beta2/src/Composer/Command/RequireCommand.php000066400000000000000000000220571267577262200237400ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Composer\Factory; use Composer\Installer; use Composer\Json\JsonFile; use Composer\Json\JsonManipulator; use Composer\Package\Version\VersionParser; use Composer\Plugin\CommandEvent; use Composer\Plugin\PluginEvents; use Composer\Repository\CompositeRepository; use Composer\Repository\PlatformRepository; /** * @author Jérémy Romey * @author Jordi Boggiano */ class RequireCommand extends InitCommand { protected function configure() { $this ->setName('require') ->setDescription('Adds required packages to your composer.json and installs them') ->setDefinition(array( new InputArgument('packages', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, 'Required package name optionally including a version constraint, e.g. foo/bar or foo/bar:1.0.0 or foo/bar=1.0.0 or "foo/bar 1.0.0"'), new InputOption('dev', null, InputOption::VALUE_NONE, 'Add requirement to require-dev.'), new InputOption('prefer-source', null, InputOption::VALUE_NONE, 'Forces installation from package sources when possible, including VCS information.'), new InputOption('prefer-dist', null, InputOption::VALUE_NONE, 'Forces installation from package dist even for dev versions.'), new InputOption('no-plugins', null, InputOption::VALUE_NONE, 'Disables all plugins.'), new InputOption('no-progress', null, InputOption::VALUE_NONE, 'Do not output download progress.'), new InputOption('no-update', null, InputOption::VALUE_NONE, 'Disables the automatic update of the dependencies.'), new InputOption('update-no-dev', null, InputOption::VALUE_NONE, 'Run the dependency update with the --no-dev option.'), new InputOption('update-with-dependencies', null, InputOption::VALUE_NONE, 'Allows inherited dependencies to be updated with explicit dependencies.'), new InputOption('ignore-platform-reqs', null, InputOption::VALUE_NONE, 'Ignore platform requirements (php & ext- packages).'), new InputOption('sort-packages', null, InputOption::VALUE_NONE, 'Sorts packages when adding/updating a new dependency'), new InputOption('optimize-autoloader', 'o', InputOption::VALUE_NONE, 'Optimize autoloader during autoloader dump'), new InputOption('classmap-authoritative', 'a', InputOption::VALUE_NONE, 'Autoload classes from the classmap only. Implicitly enables `--optimize-autoloader`.'), )) ->setHelp(<<getIO(); $newlyCreated = !file_exists($file); if (!file_exists($file) && !file_put_contents($file, "{\n}\n")) { $io->writeError(''.$file.' could not be created.'); return 1; } if (!is_readable($file)) { $io->writeError(''.$file.' is not readable.'); return 1; } if (!is_writable($file)) { $io->writeError(''.$file.' is not writable.'); return 1; } if (filesize($file) === 0) { file_put_contents($file, "{\n}\n"); } $json = new JsonFile($file); $composerDefinition = $json->read(); $composerBackup = file_get_contents($json->getPath()); $composer = $this->getComposer(true, $input->getOption('no-plugins')); $repos = $composer->getRepositoryManager()->getRepositories(); $platformOverrides = $composer->getConfig()->get('platform') ?: array(); // initialize $this->repos as it is used by the parent InitCommand $this->repos = new CompositeRepository(array_merge( array(new PlatformRepository(array(), $platformOverrides)), $repos )); $phpVersion = $this->repos->findPackage('php', '*')->getVersion(); $requirements = $this->determineRequirements($input, $output, $input->getArgument('packages'), $phpVersion); $requireKey = $input->getOption('dev') ? 'require-dev' : 'require'; $removeKey = $input->getOption('dev') ? 'require' : 'require-dev'; $baseRequirements = array_key_exists($requireKey, $composerDefinition) ? $composerDefinition[$requireKey] : array(); $requirements = $this->formatRequirements($requirements); // validate requirements format $versionParser = new VersionParser(); foreach ($requirements as $constraint) { $versionParser->parseConstraints($constraint); } $sortPackages = $input->getOption('sort-packages') || $composer->getConfig()->get('sort-packages'); if (!$this->updateFileCleanly($json, $baseRequirements, $requirements, $requireKey, $removeKey, $sortPackages)) { foreach ($requirements as $package => $version) { $baseRequirements[$package] = $version; if (isset($composerDefinition[$removeKey][$package])) { unset($composerDefinition[$removeKey][$package]); } } $composerDefinition[$requireKey] = $baseRequirements; $json->write($composerDefinition); } $io->writeError(''.$file.' has been '.($newlyCreated ? 'created' : 'updated').''); if ($input->getOption('no-update')) { return 0; } $updateDevMode = !$input->getOption('update-no-dev'); $optimize = $input->getOption('optimize-autoloader') || $composer->getConfig()->get('optimize-autoloader'); $authoritative = $input->getOption('classmap-authoritative') || $composer->getConfig()->get('classmap-authoritative'); // Update packages $this->resetComposer(); $composer = $this->getComposer(true, $input->getOption('no-plugins')); $composer->getDownloadManager()->setOutputProgress(!$input->getOption('no-progress')); $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'require', $input, $output); $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent); $install = Installer::create($io, $composer); $install ->setVerbose($input->getOption('verbose')) ->setPreferSource($input->getOption('prefer-source')) ->setPreferDist($input->getOption('prefer-dist')) ->setDevMode($updateDevMode) ->setOptimizeAutoloader($optimize) ->setClassMapAuthoritative($authoritative) ->setUpdate(true) ->setUpdateWhitelist(array_keys($requirements)) ->setWhitelistDependencies($input->getOption('update-with-dependencies')) ->setIgnorePlatformRequirements($input->getOption('ignore-platform-reqs')) ; $exception = null; try { $status = $install->run(); } catch (\Exception $exception) { $status = 1; } if ($status !== 0) { if ($newlyCreated) { $io->writeError("\n".'Installation failed, deleting '.$file.'.'); unlink($json->getPath()); } else { $io->writeError("\n".'Installation failed, reverting '.$file.' to its original content.'); file_put_contents($json->getPath(), $composerBackup); } } if ($exception) { throw $exception; } return $status; } private function updateFileCleanly($json, array $base, array $new, $requireKey, $removeKey, $sortPackages) { $contents = file_get_contents($json->getPath()); $manipulator = new JsonManipulator($contents); foreach ($new as $package => $constraint) { if (!$manipulator->addLink($requireKey, $package, $constraint, $sortPackages)) { return false; } if (!$manipulator->removeSubNode($removeKey, $package)) { return false; } } file_put_contents($json->getPath(), $manipulator->getContents()); return true; } protected function interact(InputInterface $input, OutputInterface $output) { return; } } composer-1.0.0-beta2/src/Composer/Command/RunScriptCommand.php000066400000000000000000000102741267577262200242530ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Composer\Script\CommandEvent; use Composer\Script\ScriptEvents; use Composer\Util\ProcessExecutor; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Output\OutputInterface; /** * @author Fabien Potencier */ class RunScriptCommand extends BaseCommand { /** * @var array Array with command events */ protected $scriptEvents = array( ScriptEvents::PRE_INSTALL_CMD, ScriptEvents::POST_INSTALL_CMD, ScriptEvents::PRE_UPDATE_CMD, ScriptEvents::POST_UPDATE_CMD, ScriptEvents::PRE_STATUS_CMD, ScriptEvents::POST_STATUS_CMD, ScriptEvents::POST_ROOT_PACKAGE_INSTALL, ScriptEvents::POST_CREATE_PROJECT_CMD, ScriptEvents::PRE_ARCHIVE_CMD, ScriptEvents::POST_ARCHIVE_CMD, ScriptEvents::PRE_AUTOLOAD_DUMP, ScriptEvents::POST_AUTOLOAD_DUMP, ); protected function configure() { $this ->setName('run-script') ->setDescription('Run the scripts defined in composer.json.') ->setDefinition(array( new InputArgument('script', InputArgument::OPTIONAL, 'Script name to run.'), new InputArgument('args', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, ''), new InputOption('timeout', null, InputOption::VALUE_REQUIRED, 'Sets script timeout in seconds, or 0 for never.'), new InputOption('dev', null, InputOption::VALUE_NONE, 'Sets the dev mode.'), new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables the dev mode.'), new InputOption('list', 'l', InputOption::VALUE_NONE, 'List scripts.'), )) ->setHelp(<<run-script command runs scripts defined in composer.json: php composer.phar run-script post-update-cmd EOT ) ; } protected function execute(InputInterface $input, OutputInterface $output) { if ($input->getOption('list')) { return $this->listScripts(); } elseif (!$input->getArgument('script')) { throw new \RunTimeException('Missing required argument "script"'); } $script = $input->getArgument('script'); if (!in_array($script, $this->scriptEvents)) { if (defined('Composer\Script\ScriptEvents::'.str_replace('-', '_', strtoupper($script)))) { throw new \InvalidArgumentException(sprintf('Script "%s" cannot be run with this command', $script)); } } $composer = $this->getComposer(); $hasListeners = $composer->getEventDispatcher()->hasEventListeners(new CommandEvent($script, $composer, $this->getIO())); if (!$hasListeners) { throw new \InvalidArgumentException(sprintf('Script "%s" is not defined in this package', $script)); } $args = $input->getArgument('args'); if (!is_null($timeout = $input->getOption('timeout'))) { if (!ctype_digit($timeout)) { throw new \RuntimeException('Timeout value must be numeric and positive if defined, or 0 for forever'); } // Override global timeout set before in Composer by environment or config ProcessExecutor::setTimeout((int) $timeout); } return $composer->getEventDispatcher()->dispatchScript($script, $input->getOption('dev') || !$input->getOption('no-dev'), $args); } protected function listScripts() { $scripts = $this->getComposer()->getPackage()->getScripts(); if (!count($scripts)) { return 0; } $io = $this->getIO(); $io->writeError('scripts:'); foreach ($scripts as $name => $script) { $io->write(' ' . $name); } return 0; } } composer-1.0.0-beta2/src/Composer/Command/ScriptAliasCommand.php000066400000000000000000000034121267577262200245340ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Output\OutputInterface; /** * @author Jordi Boggiano */ class ScriptAliasCommand extends BaseCommand { private $script; public function __construct($script) { $this->script = $script; parent::__construct(); } protected function configure() { $this ->setName($this->script) ->setDescription('Run the '.$this->script.' script as defined in composer.json.') ->setDefinition(array( new InputOption('dev', null, InputOption::VALUE_NONE, 'Sets the dev mode.'), new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables the dev mode.'), new InputArgument('args', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, ''), )) ->setHelp(<<run-script command runs scripts defined in composer.json: php composer.phar run-script post-update-cmd EOT ) ; } protected function execute(InputInterface $input, OutputInterface $output) { $composer = $this->getComposer(); $args = $input->getArguments(); return $composer->getEventDispatcher()->dispatchScript($this->script, $input->getOption('dev') || !$input->getOption('no-dev'), $args['args']); } } composer-1.0.0-beta2/src/Composer/Command/SearchCommand.php000066400000000000000000000053601267577262200235270ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Composer\Factory; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Composer\Repository\CompositeRepository; use Composer\Repository\PlatformRepository; use Composer\Repository\RepositoryFactory; use Composer\Repository\RepositoryInterface; use Composer\Plugin\CommandEvent; use Composer\Plugin\PluginEvents; /** * @author Robert Schönthal */ class SearchCommand extends BaseCommand { protected $matches; protected $lowMatches = array(); protected $tokens; protected $output; protected $onlyName; protected function configure() { $this ->setName('search') ->setDescription('Search for packages') ->setDefinition(array( new InputOption('only-name', 'N', InputOption::VALUE_NONE, 'Search only in name'), new InputArgument('tokens', InputArgument::IS_ARRAY | InputArgument::REQUIRED, 'tokens to search for'), )) ->setHelp(<<php composer.phar search symfony composer EOT ) ; } protected function execute(InputInterface $input, OutputInterface $output) { // init repos $platformRepo = new PlatformRepository; $io = $this->getIO(); if (!($composer = $this->getComposer(false))) { $composer = Factory::create($this->getIO(), array()); } $localRepo = $composer->getRepositoryManager()->getLocalRepository(); $installedRepo = new CompositeRepository(array($localRepo, $platformRepo)); $repos = new CompositeRepository(array_merge(array($installedRepo), $composer->getRepositoryManager()->getRepositories())); $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'search', $input, $output); $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent); $onlyName = $input->getOption('only-name'); $flags = $onlyName ? RepositoryInterface::SEARCH_NAME : RepositoryInterface::SEARCH_FULLTEXT; $results = $repos->search(implode(' ', $input->getArgument('tokens')), $flags); foreach ($results as $result) { $io->write($result['name'] . (isset($result['description']) ? ' '. $result['description'] : '')); } } } composer-1.0.0-beta2/src/Composer/Command/SelfUpdateCommand.php000066400000000000000000000362511267577262200243610ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Composer\Composer; use Composer\Factory; use Composer\Config; use Composer\Util\Filesystem; use Composer\SelfUpdate\Keys; use Composer\SelfUpdate\Versions; use Composer\IO\IOInterface; use Composer\Downloader\FilesystemException; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Finder\Finder; /** * @author Igor Wiedler * @author Kevin Ran * @author Jordi Boggiano */ class SelfUpdateCommand extends BaseCommand { const HOMEPAGE = 'getcomposer.org'; const OLD_INSTALL_EXT = '-old.phar'; protected function configure() { $this ->setName('self-update') ->setAliases(array('selfupdate')) ->setDescription('Updates composer.phar to the latest version.') ->setDefinition(array( new InputOption('rollback', 'r', InputOption::VALUE_NONE, 'Revert to an older installation of composer'), new InputOption('clean-backups', null, InputOption::VALUE_NONE, 'Delete old backups during an update. This makes the current version of composer the only backup available after the update'), new InputArgument('version', InputArgument::OPTIONAL, 'The version to update to'), new InputOption('no-progress', null, InputOption::VALUE_NONE, 'Do not output download progress.'), new InputOption('update-keys', null, InputOption::VALUE_NONE, 'Prompt user for a key update'), new InputOption('stable', null, InputOption::VALUE_NONE, 'Force an update to the stable channel'), new InputOption('preview', null, InputOption::VALUE_NONE, 'Force an update to the preview channel'), new InputOption('snapshot', null, InputOption::VALUE_NONE, 'Force an update to the snapshot channel'), )) ->setHelp(<<self-update command checks getcomposer.org for newer versions of composer and if found, installs the latest. php composer.phar self-update EOT ) ; } protected function execute(InputInterface $input, OutputInterface $output) { $config = Factory::createConfig(); if ($config->get('disable-tls') === true) { $baseUrl = 'http://' . self::HOMEPAGE; } else { $baseUrl = 'https://' . self::HOMEPAGE; } $io = $this->getIO(); $remoteFilesystem = Factory::createRemoteFilesystem($io, $config); $versionsUtil = new Versions($config, $remoteFilesystem); // switch channel if requested foreach (array('stable', 'preview', 'snapshot') as $channel) { if ($input->getOption($channel)) { $versionsUtil->setChannel($channel); } } $cacheDir = $config->get('cache-dir'); $rollbackDir = $config->get('data-dir'); $home = $config->get('home'); $localFilename = realpath($_SERVER['argv'][0]) ?: $_SERVER['argv'][0]; if ($input->getOption('update-keys')) { return $this->fetchKeys($io, $config); } // check if current dir is writable and if not try the cache dir from settings $tmpDir = is_writable(dirname($localFilename)) ? dirname($localFilename) : $cacheDir; // check for permissions in local filesystem before start connection process if (!is_writable($tmpDir)) { throw new FilesystemException('Composer update failed: the "'.$tmpDir.'" directory used to download the temp file could not be written'); } if ($input->getOption('rollback')) { return $this->rollback($output, $rollbackDir, $localFilename); } $latest = $versionsUtil->getLatest(); $latestVersion = $latest['version']; $updateVersion = $input->getArgument('version') ?: $latestVersion; if (preg_match('{^[0-9a-f]{40}$}', $updateVersion) && $updateVersion !== $latestVersion) { $io->writeError('You can not update to a specific SHA-1 as those phars are not available for download'); return 1; } if (Composer::VERSION === $updateVersion) { $io->writeError('You are already using composer version '.$updateVersion.'.'); // remove all backups except for the most recent, if any if ($input->getOption('clean-backups')) { $this->cleanBackups($rollbackDir, $this->getLastBackupVersion($rollbackDir)); } return 0; } $tempFilename = $tmpDir . '/' . basename($localFilename, '.phar').'-temp.phar'; $backupFile = sprintf( '%s/%s-%s%s', $rollbackDir, strtr(Composer::RELEASE_DATE, ' :', '_-'), preg_replace('{^([0-9a-f]{7})[0-9a-f]{33}$}', '$1', Composer::VERSION), self::OLD_INSTALL_EXT ); $updatingToTag = !preg_match('{^[0-9a-f]{40}$}', $updateVersion); $io->write(sprintf("Updating to version %s.", $updateVersion)); $remoteFilename = $baseUrl . ($updatingToTag ? "/download/{$updateVersion}/composer.phar" : '/composer.phar'); $signature = $remoteFilesystem->getContents(self::HOMEPAGE, $remoteFilename.'.sig', false); $remoteFilesystem->copy(self::HOMEPAGE, $remoteFilename, $tempFilename, !$input->getOption('no-progress')); if (!file_exists($tempFilename) || !$signature) { $io->writeError('The download of the new composer version failed for an unexpected reason'); return 1; } // verify phar signature if (!extension_loaded('openssl') && $config->get('disable-tls')) { $io->writeError('Skipping phar signature verification as you have disabled OpenSSL via config.disable-tls'); } else { if (!extension_loaded('openssl')) { throw new \RuntimeException('The openssl extension is required for phar signatures to be verified but it is not available. ' . 'If you can not enable the openssl extension, you can disable this error, at your own risk, by setting the \'disable-tls\' option to true.'); } $sigFile = 'file://'.$home.'/' . ($updatingToTag ? 'keys.tags.pub' : 'keys.dev.pub'); if (!file_exists($sigFile)) { file_put_contents($home.'/keys.dev.pub', <<getOption('clean-backups')) { $this->cleanBackups($rollbackDir); } if ($err = $this->setLocalPhar($localFilename, $tempFilename, $backupFile)) { @unlink($tempFilename); $io->writeError('The file is corrupted ('.$err->getMessage().').'); $io->writeError('Please re-run the self-update command to try again.'); return 1; } if (file_exists($backupFile)) { $io->writeError('Use composer self-update --rollback to return to version '.Composer::VERSION); } else { $io->writeError('A backup of the current version could not be written to '.$backupFile.', no rollback possible'); } } protected function fetchKeys(IOInterface $io, Config $config) { if (!$io->isInteractive()) { throw new \RuntimeException('Public keys can not be fetched in non-interactive mode, please run Composer interactively'); } $io->write('Open https://composer.github.io/pubkeys.html to find the latest keys'); $validator = function ($value) { if (!preg_match('{^-----BEGIN PUBLIC KEY-----$}', trim($value))) { throw new \UnexpectedValueException('Invalid input'); } return trim($value)."\n"; }; $devKey = ''; while (!preg_match('{(-----BEGIN PUBLIC KEY-----.+?-----END PUBLIC KEY-----)}s', $devKey, $match)) { $devKey = $io->askAndValidate('Enter Dev / Snapshot Public Key (including lines with -----): ', $validator); while ($line = $io->ask('')) { $devKey .= trim($line)."\n"; if (trim($line) === '-----END PUBLIC KEY-----') { break; } } } file_put_contents($keyPath = $config->get('home').'/keys.dev.pub', $match[0]); $io->write('Stored key with fingerprint: ' . Keys::fingerprint($keyPath)); $tagsKey = ''; while (!preg_match('{(-----BEGIN PUBLIC KEY-----.+?-----END PUBLIC KEY-----)}s', $tagsKey, $match)) { $tagsKey = $io->askAndValidate('Enter Tags Public Key (including lines with -----): ', $validator); while ($line = $io->ask('')) { $tagsKey .= trim($line)."\n"; if (trim($line) === '-----END PUBLIC KEY-----') { break; } } } file_put_contents($keyPath = $config->get('home').'/keys.tags.pub', $match[0]); $io->write('Stored key with fingerprint: ' . Keys::fingerprint($keyPath)); $io->write('Public keys stored in '.$config->get('home')); } protected function rollback(OutputInterface $output, $rollbackDir, $localFilename) { $rollbackVersion = $this->getLastBackupVersion($rollbackDir); if (!$rollbackVersion) { throw new \UnexpectedValueException('Composer rollback failed: no installation to roll back to in "'.$rollbackDir.'"'); } $oldFile = $rollbackDir . '/' . $rollbackVersion . self::OLD_INSTALL_EXT; if (!is_file($oldFile)) { throw new FilesystemException('Composer rollback failed: "'.$oldFile.'" could not be found'); } if (!is_readable($oldFile)) { throw new FilesystemException('Composer rollback failed: "'.$oldFile.'" could not be read'); } $io = $this->getIO(); $io->writeError(sprintf("Rolling back to version %s.", $rollbackVersion)); if ($err = $this->setLocalPhar($localFilename, $oldFile)) { $io->writeError('The backup file was corrupted ('.$err->getMessage().').'); return 1; } return 0; } /** * @param string $localFilename * @param string $newFilename * @param string $backupTarget */ protected function setLocalPhar($localFilename, $newFilename, $backupTarget = null) { try { @chmod($newFilename, fileperms($localFilename)); if (!ini_get('phar.readonly')) { // test the phar validity $phar = new \Phar($newFilename); // free the variable to unlock the file unset($phar); } // copy current file into installations dir if ($backupTarget && file_exists($localFilename)) { @copy($localFilename, $backupTarget); } rename($newFilename, $localFilename); } catch (\Exception $e) { if (!$e instanceof \UnexpectedValueException && !$e instanceof \PharException) { throw $e; } return $e; } } protected function cleanBackups($rollbackDir, $except = null) { $finder = $this->getOldInstallationFinder($rollbackDir); $io = $this->getIO(); $fs = new Filesystem; foreach ($finder as $file) { if ($except && $file->getBasename(self::OLD_INSTALL_EXT) === $except) { continue; } $file = (string) $file; $io->writeError('Removing: '.$file.''); $fs->remove($file); } } protected function getLastBackupVersion($rollbackDir) { $finder = $this->getOldInstallationFinder($rollbackDir); $finder->sortByName(); $files = iterator_to_array($finder); if (count($files)) { return basename(end($files), self::OLD_INSTALL_EXT); } return false; } protected function getOldInstallationFinder($rollbackDir) { $finder = Finder::create() ->depth(0) ->files() ->name('*' . self::OLD_INSTALL_EXT) ->in($rollbackDir); return $finder; } } composer-1.0.0-beta2/src/Composer/Command/ShowCommand.php000066400000000000000000000600531267577262200232420ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Composer\DependencyResolver\Pool; use Composer\DependencyResolver\DefaultPolicy; use Composer\Package\CompletePackageInterface; use Composer\Package\Version\VersionParser; use Composer\Plugin\CommandEvent; use Composer\Plugin\PluginEvents; use Composer\Package\PackageInterface; use Composer\Semver\Constraint\ConstraintInterface; use Composer\Util\Platform; use Symfony\Component\Console\Formatter\OutputFormatterStyle; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Composer\Repository\ArrayRepository; use Composer\Repository\CompositeRepository; use Composer\Repository\ComposerRepository; use Composer\Repository\PlatformRepository; use Composer\Repository\RepositoryInterface; use Composer\Repository\RepositoryFactory; use Composer\Spdx\SpdxLicenses; /** * @author Robert Schönthal * @author Jordi Boggiano * @author Jérémy Romey */ class ShowCommand extends BaseCommand { /** @var VersionParser */ protected $versionParser; protected $colors; protected function configure() { $this ->setName('show') ->setAliases(array('info')) ->setDescription('Show information about packages') ->setDefinition(array( new InputArgument('package', InputArgument::OPTIONAL, 'Package to inspect'), new InputArgument('version', InputArgument::OPTIONAL, 'Version or version constraint to inspect'), new InputOption('all', null, InputOption::VALUE_NONE, 'List all packages'), new InputOption('installed', 'i', InputOption::VALUE_NONE, 'List installed packages only (enabled by default, only present for BC).'), new InputOption('platform', 'p', InputOption::VALUE_NONE, 'List platform packages only'), new InputOption('available', 'a', InputOption::VALUE_NONE, 'List available packages only'), new InputOption('self', 's', InputOption::VALUE_NONE, 'Show the root package information'), new InputOption('name-only', 'N', InputOption::VALUE_NONE, 'List package names only'), new InputOption('path', 'P', InputOption::VALUE_NONE, 'Show package paths'), new InputOption('tree', 't', InputOption::VALUE_NONE, 'List the dependencies as a tree'), )) ->setHelp(<<versionParser = new VersionParser; if ($input->getOption('tree')) { $this->initStyles($output); } $composer = $this->getComposer(false); $io = $this->getIO(); if ($input->getOption('installed')) { $io->writeError('You are using the deprecated option "installed". Only installed packages are shown by default now. The --all option can be used to show all packages.'); } if ($input->getOption('tree') && ($input->getOption('all') || $input->getOption('available'))) { $io->writeError('The --tree (-t) option is not usable in combination with --all or --available (-a)'); return; } // init repos $platformOverrides = array(); if ($composer) { $platformOverrides = $composer->getConfig()->get('platform') ?: array(); } $platformRepo = new PlatformRepository(array(), $platformOverrides); if ($input->getOption('self')) { $package = $this->getComposer()->getPackage(); $repos = $installedRepo = new ArrayRepository(array($package)); } elseif ($input->getOption('platform')) { $repos = $installedRepo = $platformRepo; } elseif ($input->getOption('available')) { $installedRepo = $platformRepo; if ($composer) { $repos = new CompositeRepository($composer->getRepositoryManager()->getRepositories()); } else { $defaultRepos = RepositoryFactory::defaultRepos($io); $repos = new CompositeRepository($defaultRepos); $io->writeError('No composer.json found in the current directory, showing available packages from ' . implode(', ', array_keys($defaultRepos))); } } elseif ($input->getOption('all') && $composer) { $localRepo = $composer->getRepositoryManager()->getLocalRepository(); $installedRepo = new CompositeRepository(array($localRepo, $platformRepo)); $repos = new CompositeRepository(array_merge(array($installedRepo), $composer->getRepositoryManager()->getRepositories())); } elseif ($input->getOption('all')) { $defaultRepos = RepositoryFactory::defaultRepos($io); $io->writeError('No composer.json found in the current directory, showing available packages from ' . implode(', ', array_keys($defaultRepos))); $installedRepo = $platformRepo; $repos = new CompositeRepository(array_merge(array($installedRepo), $defaultRepos)); } else { $repos = $installedRepo = $this->getComposer()->getRepositoryManager()->getLocalRepository(); } if ($composer) { $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'show', $input, $output); $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent); } // show single package or single version if ($input->getArgument('package') || !empty($package)) { if (empty($package)) { list($package, $versions) = $this->getPackage($installedRepo, $repos, $input->getArgument('package'), $input->getArgument('version')); if (!$package) { throw new \InvalidArgumentException('Package '.$input->getArgument('package').' not found'); } } else { $versions = array($package->getPrettyVersion() => $package->getVersion()); } if ($input->getOption('tree')) { $this->displayPackageTree($package, $installedRepo, $repos); } else { $this->printMeta($package, $versions, $installedRepo); $this->printLinks($package, 'requires'); $this->printLinks($package, 'devRequires', 'requires (dev)'); if ($package->getSuggests()) { $io->write("\nsuggests"); foreach ($package->getSuggests() as $suggested => $reason) { $io->write($suggested . ' ' . $reason . ''); } } $this->printLinks($package, 'provides'); $this->printLinks($package, 'conflicts'); $this->printLinks($package, 'replaces'); } return; } // show tree view if requested if ($input->getOption('tree')) { $rootPackage = $this->getComposer()->getPackage(); $rootRequires = array_map( 'strtolower', array_keys(array_merge($rootPackage->getRequires(), $rootPackage->getDevRequires())) ); foreach ($installedRepo->getPackages() as $package) { if (in_array($package->getName(), $rootRequires, true)) { $this->displayPackageTree($package, $installedRepo, $repos); } } return 0; } if ($repos instanceof CompositeRepository) { $repos = $repos->getRepositories(); } elseif (!is_array($repos)) { $repos = array($repos); } // list packages $packages = array(); foreach ($repos as $repo) { if ($repo === $platformRepo) { $type = 'platform:'; } elseif ( $repo === $installedRepo || ($installedRepo instanceof CompositeRepository && in_array($repo, $installedRepo->getRepositories(), true)) ) { $type = 'installed:'; } else { $type = 'available:'; } if ($repo instanceof ComposerRepository && $repo->hasProviders()) { foreach ($repo->getProviderNames() as $name) { $packages[$type][$name] = $name; } } else { foreach ($repo->getPackages() as $package) { if (!isset($packages[$type][$package->getName()]) || !is_object($packages[$type][$package->getName()]) || version_compare($packages[$type][$package->getName()]->getVersion(), $package->getVersion(), '<') ) { $packages[$type][$package->getName()] = $package; } } } } $showAllTypes = $input->getOption('all'); $indent = $showAllTypes ? ' ' : ''; foreach (array('platform:' => true, 'available:' => false, 'installed:' => true) as $type => $showVersion) { if (isset($packages[$type])) { if ($showAllTypes) { $io->write($type); } ksort($packages[$type]); $nameLength = $versionLength = 0; foreach ($packages[$type] as $package) { if (is_object($package)) { $nameLength = max($nameLength, strlen($package->getPrettyName())); $versionLength = max($versionLength, strlen($package->getFullPrettyVersion())); } else { $nameLength = max($nameLength, $package); } } list($width) = $this->getApplication()->getTerminalDimensions(); if (null === $width) { // In case the width is not detected, we're probably running the command // outside of a real terminal, use space without a limit $width = PHP_INT_MAX; } if (Platform::isWindows()) { $width--; } if ($input->getOption('path') && null === $composer) { $io->writeError('No composer.json found in the current directory, disabling "path" option'); $input->setOption('path', false); } $writePath = !$input->getOption('name-only') && $input->getOption('path'); $writeVersion = !$input->getOption('name-only') && !$input->getOption('path') && $showVersion && ($nameLength + $versionLength + 3 <= $width); $writeDescription = !$input->getOption('name-only') && !$input->getOption('path') && ($nameLength + ($showVersion ? $versionLength : 0) + 24 <= $width); foreach ($packages[$type] as $package) { if (is_object($package)) { $io->write($indent . str_pad($package->getPrettyName(), $nameLength, ' '), false); if ($writeVersion) { $io->write(' ' . str_pad($package->getFullPrettyVersion(), $versionLength, ' '), false); } if ($writeDescription) { $description = strtok($package->getDescription(), "\r\n"); $remaining = $width - $nameLength - $versionLength - 4; if (strlen($description) > $remaining) { $description = substr($description, 0, $remaining - 3) . '...'; } $io->write(' ' . $description, false); } if ($writePath) { $path = strtok(realpath($composer->getInstallationManager()->getInstallPath($package)), "\r\n"); $io->write(' ' . $path, false); } } else { $io->write($indent . $package, false); } $io->write(''); } if ($showAllTypes) { $io->write(''); } } } } /** * finds a package by name and version if provided * * @param RepositoryInterface $installedRepo * @param RepositoryInterface $repos * @param string $name * @param ConstraintInterface|string $version * @throws \InvalidArgumentException * @return array array(CompletePackageInterface, array of versions) */ protected function getPackage(RepositoryInterface $installedRepo, RepositoryInterface $repos, $name, $version = null) { $name = strtolower($name); $constraint = is_string($version) ? $this->versionParser->parseConstraints($version) : $version; $policy = new DefaultPolicy(); $pool = new Pool('dev'); $pool->addRepository($repos); $matchedPackage = null; $versions = array(); $matches = $pool->whatProvides($name, $constraint); foreach ($matches as $index => $package) { // skip providers/replacers if ($package->getName() !== $name) { unset($matches[$index]); continue; } // select an exact match if it is in the installed repo and no specific version was required if (null === $version && $installedRepo->hasPackage($package)) { $matchedPackage = $package; } $versions[$package->getPrettyVersion()] = $package->getVersion(); $matches[$index] = $package->getId(); } // select preferred package according to policy rules if (!$matchedPackage && $matches && $preferred = $policy->selectPreferredPackages($pool, array(), $matches)) { $matchedPackage = $pool->literalToPackage($preferred[0]); } return array($matchedPackage, $versions); } /** * prints package meta data */ protected function printMeta(CompletePackageInterface $package, array $versions, RepositoryInterface $installedRepo) { $io = $this->getIO(); $io->write('name : ' . $package->getPrettyName()); $io->write('descrip. : ' . $package->getDescription()); $io->write('keywords : ' . join(', ', $package->getKeywords() ?: array())); $this->printVersions($package, $versions, $installedRepo); $io->write('type : ' . $package->getType()); $this->printLicenses($package); $io->write('source : ' . sprintf('[%s] %s %s', $package->getSourceType(), $package->getSourceUrl(), $package->getSourceReference())); $io->write('dist : ' . sprintf('[%s] %s %s', $package->getDistType(), $package->getDistUrl(), $package->getDistReference())); $io->write('names : ' . implode(', ', $package->getNames())); if ($package->isAbandoned()) { $replacement = ($package->getReplacementPackage() !== null) ? ' The author suggests using the ' . $package->getReplacementPackage(). ' package instead.' : null; $io->writeError( sprintf('Attention: This package is abandoned and no longer maintained.%s', $replacement) ); } if ($package->getSupport()) { $io->write("\nsupport"); foreach ($package->getSupport() as $type => $value) { $io->write('' . $type . ' : '.$value); } } if ($package->getAutoload()) { $io->write("\nautoload"); foreach ($package->getAutoload() as $type => $autoloads) { $io->write('' . $type . ''); if ($type === 'psr-0') { foreach ($autoloads as $name => $path) { $io->write(($name ?: '*') . ' => ' . (is_array($path) ? implode(', ', $path) : ($path ?: '.'))); } } elseif ($type === 'psr-4') { foreach ($autoloads as $name => $path) { $io->write(($name ?: '*') . ' => ' . (is_array($path) ? implode(', ', $path) : ($path ?: '.'))); } } elseif ($type === 'classmap') { $io->write(implode(', ', $autoloads)); } } if ($package->getIncludePaths()) { $io->write('include-path'); $io->write(implode(', ', $package->getIncludePaths())); } } } /** * prints all available versions of this package and highlights the installed one if any */ protected function printVersions(CompletePackageInterface $package, array $versions, RepositoryInterface $installedRepo) { uasort($versions, 'version_compare'); $versions = array_keys(array_reverse($versions)); // highlight installed version if ($installedRepo->hasPackage($package)) { $installedVersion = $package->getPrettyVersion(); $key = array_search($installedVersion, $versions); if (false !== $key) { $versions[$key] = '* ' . $installedVersion . ''; } } $versions = implode(', ', $versions); $this->getIO()->write('versions : ' . $versions); } /** * print link objects * * @param CompletePackageInterface $package * @param string $linkType * @param string $title */ protected function printLinks(CompletePackageInterface $package, $linkType, $title = null) { $title = $title ?: $linkType; $io = $this->getIO(); if ($links = $package->{'get'.ucfirst($linkType)}()) { $io->write("\n" . $title . ""); foreach ($links as $link) { $io->write($link->getTarget() . ' ' . $link->getPrettyConstraint() . ''); } } } /** * Prints the licenses of a package with metadata * * @param CompletePackageInterface $package */ protected function printLicenses(CompletePackageInterface $package) { $spdxLicenses = new SpdxLicenses(); $licenses = $package->getLicense(); $io = $this->getIO(); foreach ($licenses as $licenseId) { $license = $spdxLicenses->getLicenseByIdentifier($licenseId); // keys: 0 fullname, 1 osi, 2 url if (!$license) { $out = $licenseId; } else { // is license OSI approved? if ($license[1] === true) { $out = sprintf('%s (%s) (OSI approved) %s', $license[0], $licenseId, $license[2]); } else { $out = sprintf('%s (%s) %s', $license[0], $licenseId, $license[2]); } } $io->write('license : ' . $out); } } /** * Init styles for tree * * @param OutputInterface $output */ protected function initStyles(OutputInterface $output) { $this->colors = array( 'green', 'yellow', 'cyan', 'magenta', 'blue', ); foreach ($this->colors as $color) { $style = new OutputFormatterStyle($color); $output->getFormatter()->setStyle($color, $style); } } /** * Display the tree * * @param PackageInterface|string $package * @param RepositoryInterface $installedRepo * @param RepositoryInterface $distantRepos */ protected function displayPackageTree(PackageInterface $package, RepositoryInterface $installedRepo, RepositoryInterface $distantRepos) { $io = $this->getIO(); $io->write(sprintf('%s', $package->getPrettyName()), false); $io->write(' ' . $package->getPrettyVersion(), false); $io->write(' ' . strtok($package->getDescription(), "\r\n")); if (is_object($package)) { $requires = $package->getRequires(); $treeBar = '├'; $j = 0; $total = count($requires); foreach ($requires as $requireName => $require) { $j++; if ($j == 0) { $this->writeTreeLine($treeBar); } if ($j == $total) { $treeBar = 'â””'; } $level = 1; $color = $this->colors[$level]; $info = sprintf('%s──<%s>%s %s', $treeBar, $color, $requireName, $color, $require->getPrettyConstraint()); $this->writeTreeLine($info); $treeBar = str_replace('â””', ' ', $treeBar); $packagesInTree = array($package->getName(), $requireName); $this->displayTree($requireName, $require, $installedRepo, $distantRepos, $packagesInTree, $treeBar, $level + 1); } } } /** * Display a package tree * * @param string $name * @param PackageInterface|string $package * @param RepositoryInterface $installedRepo * @param RepositoryInterface $distantRepos * @param array $packagesInTree * @param string $previousTreeBar * @param int $level */ protected function displayTree($name, $package, RepositoryInterface $installedRepo, RepositoryInterface $distantRepos, array $packagesInTree, $previousTreeBar = '├', $level = 1) { $previousTreeBar = str_replace('├', '│', $previousTreeBar); list($package, $versions) = $this->getPackage($installedRepo, $distantRepos, $name, $package->getPrettyConstraint() === 'self.version' ? $package->getConstraint() : $package->getPrettyConstraint()); if (is_object($package)) { $requires = $package->getRequires(); $treeBar = $previousTreeBar . ' ├'; $i = 0; $total = count($requires); foreach ($requires as $requireName => $require) { $currentTree = $packagesInTree; $i++; if ($i == $total) { $treeBar = $previousTreeBar . ' â””'; } $colorIdent = $level % count($this->colors); $color = $this->colors[$colorIdent]; $circularWarn = in_array($requireName, $currentTree) ? '(circular dependency aborted here)' : ''; $info = rtrim(sprintf('%s──<%s>%s %s %s', $treeBar, $color, $requireName, $color, $require->getPrettyConstraint(), $circularWarn)); $this->writeTreeLine($info); $treeBar = str_replace('â””', ' ', $treeBar); if (!in_array($requireName, $currentTree)) { $currentTree[] = $requireName; $this->displayTree($requireName, $require, $installedRepo, $distantRepos, $currentTree, $treeBar, $level + 1); } } } } private function writeTreeLine($line) { $io = $this->getIO(); if (!$io->isDecorated()) { $line = str_replace(array('â””', '├', '──', '│'), array('`-', '|-', '-', '|'), $line); } $io->write($line); } } composer-1.0.0-beta2/src/Composer/Command/StatusCommand.php000066400000000000000000000111541267577262200236030ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Composer\Downloader\ChangeReportInterface; use Composer\Plugin\CommandEvent; use Composer\Plugin\PluginEvents; use Composer\Script\ScriptEvents; use Composer\Downloader\DvcsDownloaderInterface; /** * @author Tiago Ribeiro * @author Rui Marinho */ class StatusCommand extends BaseCommand { protected function configure() { $this ->setName('status') ->setDescription('Show a list of locally modified packages') ->setDefinition(array( new InputOption('verbose', 'v|vv|vvv', InputOption::VALUE_NONE, 'Show modified files for each directory that contains changes.'), )) ->setHelp(<<getComposer(); $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'status', $input, $output); $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent); $installedRepo = $composer->getRepositoryManager()->getLocalRepository(); $dm = $composer->getDownloadManager(); $im = $composer->getInstallationManager(); // Dispatch pre-status-command $composer->getEventDispatcher()->dispatchScript(ScriptEvents::PRE_STATUS_CMD, true); $errors = array(); $io = $this->getIO(); $unpushedChanges = array(); // list packages foreach ($installedRepo->getCanonicalPackages() as $package) { $downloader = $dm->getDownloaderForInstalledPackage($package); if ($downloader instanceof ChangeReportInterface) { $targetDir = $im->getInstallPath($package); if (is_link($targetDir)) { $errors[$targetDir] = $targetDir . ' is a symbolic link.'; } if ($changes = $downloader->getLocalChanges($package, $targetDir)) { $errors[$targetDir] = $changes; } if ($downloader instanceof DvcsDownloaderInterface) { if ($unpushed = $downloader->getUnpushedChanges($package, $targetDir)) { $unpushedChanges[$targetDir] = $unpushed; } } } } // output errors/warnings if (!$errors && !$unpushedChanges) { $io->writeError('No local changes'); } elseif ($errors) { $io->writeError('You have changes in the following dependencies:'); } foreach ($errors as $path => $changes) { if ($input->getOption('verbose')) { $indentedChanges = implode("\n", array_map(function ($line) { return ' ' . ltrim($line); }, explode("\n", $changes))); $io->write(''.$path.':'); $io->write($indentedChanges); } else { $io->write($path); } } if ($unpushedChanges) { $io->writeError('You have unpushed changes on the current branch in the following dependencies:'); foreach ($unpushedChanges as $path => $changes) { if ($input->getOption('verbose')) { $indentedChanges = implode("\n", array_map(function ($line) { return ' ' . ltrim($line); }, explode("\n", $changes))); $io->write(''.$path.':'); $io->write($indentedChanges); } else { $io->write($path); } } } if (($errors || $unpushedChanges) && !$input->getOption('verbose')) { $io->writeError('Use --verbose (-v) to see a list of files'); } // Dispatch post-status-command $composer->getEventDispatcher()->dispatchScript(ScriptEvents::POST_STATUS_CMD, true); return ($errors ? 1 : 0) + ($unpushedChanges ? 2 : 0); } } composer-1.0.0-beta2/src/Composer/Command/SuggestsCommand.php000066400000000000000000000121501267577262200241210ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Composer\Repository\PlatformRepository; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; class SuggestsCommand extends BaseCommand { protected function configure() { $this ->setName('suggests') ->setDescription('Show package suggestions') ->setDefinition(array( new InputOption('by-package', null, InputOption::VALUE_NONE, 'Groups output by suggesting package'), new InputOption('by-suggestion', null, InputOption::VALUE_NONE, 'Groups output by suggested package'), new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Exclude suggestions from require-dev packages'), new InputArgument('packages', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, 'Packages that you want to list suggestions from.'), )) ->setHelp(<<%command.name% command shows a sorted list of suggested packages. Enabling -v implies --by-package --by-suggestion, showing both lists. EOT ) ; } protected function execute(InputInterface $input, OutputInterface $output) { $lock = $this->getComposer()->getLocker()->getLockData(); if (empty($lock)) { throw new \RuntimeException('Lockfile seems to be empty?'); } $packages = $lock['packages']; if (!$input->getOption('no-dev')) { $packages += $lock['packages-dev']; } $filter = $input->getArgument('packages'); // First assemble lookup list of packages that are installed, replaced or provided $installed = array(); foreach ($packages as $package) { $installed[] = $package['name']; if (!empty($package['provide'])) { $installed = array_merge($installed, array_keys($package['provide'])); } if (!empty($package['replace'])) { $installed = array_merge($installed, array_keys($package['replace'])); } } // Undub and sort the install list into a sorted lookup array $installed = array_flip($installed); ksort($installed); // Init platform repo $platform = new PlatformRepository(array(), $this->getComposer()->getConfig()->get('platform') ?: array()); // Next gather all suggestions that are not in that list $suggesters = array(); $suggested = array(); foreach ($packages as $package) { $packageName = $package['name']; if ((!empty($filter) && !in_array($packageName, $filter)) || empty($package['suggest'])) { continue; } foreach ($package['suggest'] as $suggestion => $reason) { if (false === strpos('/', $suggestion) && !is_null($platform->findPackage($suggestion, '*'))) { continue; } if (!isset($installed[$suggestion])) { $suggesters[$packageName][$suggestion] = $reason; $suggested[$suggestion][$packageName] = $reason; } } } ksort($suggesters); ksort($suggested); // Determine output mode $mode = 0; $io = $this->getIO(); if ($input->getOption('by-package') || $io->isVerbose()) { $mode |= 1; } if ($input->getOption('by-suggestion')) { $mode |= 2; } // Simple mode if ($mode === 0) { foreach (array_keys($suggested) as $suggestion) { $io->write(sprintf('%s', $suggestion)); } return; } // Grouped by package if ($mode & 1) { foreach ($suggesters as $suggester => $suggestions) { $io->write(sprintf('%s suggests:', $suggester)); foreach ($suggestions as $suggestion => $reason) { $io->write(sprintf(' - %s: %s', $suggestion, $reason ?: '*')); } $io->write(''); } } // Grouped by suggestion if ($mode & 2) { // Improve readability in full mode if ($mode & 1) { $io->write(str_repeat('-', 78)); } foreach ($suggested as $suggestion => $suggesters) { $io->write(sprintf('%s is suggested by:', $suggestion)); foreach ($suggesters as $suggester => $reason) { $io->write(sprintf(' - %s: %s', $suggester, $reason ?: '*')); } $io->write(''); } } } } composer-1.0.0-beta2/src/Composer/Command/UpdateCommand.php000066400000000000000000000251671267577262200235530ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Composer\Composer; use Composer\Installer; use Composer\IO\IOInterface; use Composer\Plugin\CommandEvent; use Composer\Plugin\PluginEvents; use Symfony\Component\Console\Helper\Table; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Question\Question; /** * @author Jordi Boggiano * @author Nils Adermann */ class UpdateCommand extends BaseCommand { protected function configure() { $this ->setName('update') ->setDescription('Updates your dependencies to the latest version according to composer.json, and updates the composer.lock file.') ->setDefinition(array( new InputArgument('packages', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, 'Packages that should be updated, if not provided all packages are.'), new InputOption('prefer-source', null, InputOption::VALUE_NONE, 'Forces installation from package sources when possible, including VCS information.'), new InputOption('prefer-dist', null, InputOption::VALUE_NONE, 'Forces installation from package dist even for dev versions.'), new InputOption('dry-run', null, InputOption::VALUE_NONE, 'Outputs the operations but will not execute anything (implicitly enables --verbose).'), new InputOption('dev', null, InputOption::VALUE_NONE, 'Enables installation of require-dev packages (enabled by default, only present for BC).'), new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables installation of require-dev packages.'), new InputOption('lock', null, InputOption::VALUE_NONE, 'Only updates the lock file hash to suppress warning about the lock file being out of date.'), new InputOption('no-plugins', null, InputOption::VALUE_NONE, 'Disables all plugins.'), new InputOption('no-custom-installers', null, InputOption::VALUE_NONE, 'DEPRECATED: Use no-plugins instead.'), new InputOption('no-autoloader', null, InputOption::VALUE_NONE, 'Skips autoloader generation'), new InputOption('no-scripts', null, InputOption::VALUE_NONE, 'Skips the execution of all scripts defined in composer.json file.'), new InputOption('no-progress', null, InputOption::VALUE_NONE, 'Do not output download progress.'), new InputOption('with-dependencies', null, InputOption::VALUE_NONE, 'Add also all dependencies of whitelisted packages to the whitelist.'), new InputOption('verbose', 'v|vv|vvv', InputOption::VALUE_NONE, 'Shows more details including new commits pulled in when updating packages.'), new InputOption('optimize-autoloader', 'o', InputOption::VALUE_NONE, 'Optimize autoloader during autoloader dump.'), new InputOption('classmap-authoritative', 'a', InputOption::VALUE_NONE, 'Autoload classes from the classmap only. Implicitly enables `--optimize-autoloader`.'), new InputOption('ignore-platform-reqs', null, InputOption::VALUE_NONE, 'Ignore platform requirements (php & ext- packages).'), new InputOption('prefer-stable', null, InputOption::VALUE_NONE, 'Prefer stable versions of dependencies.'), new InputOption('prefer-lowest', null, InputOption::VALUE_NONE, 'Prefer lowest versions of dependencies.'), new InputOption('interactive', 'i', InputOption::VALUE_NONE, 'Interactive interface with autocompletion to select the packages to update.'), new InputOption('root-reqs', null, InputOption::VALUE_NONE, 'Restricts the update to your first degree dependencies.'), )) ->setHelp(<<update command reads the composer.json file from the current directory, processes it, and updates, removes or installs all the dependencies. php composer.phar update To limit the update operation to a few packages, you can list the package(s) you want to update as such: php composer.phar update vendor/package1 foo/mypackage [...] You may also use an asterisk (*) pattern to limit the update operation to package(s) from a specific vendor: php composer.phar update vendor/package1 foo/* [...] To select packages names interactively with auto-completion use -i. EOT ) ; } protected function execute(InputInterface $input, OutputInterface $output) { $io = $this->getIO(); if ($input->getOption('no-custom-installers')) { $io->writeError('You are using the deprecated option "no-custom-installers". Use "no-plugins" instead.'); $input->setOption('no-plugins', true); } if ($input->getOption('dev')) { $io->writeError('You are using the deprecated option "dev". Dev packages are installed by default now.'); } $composer = $this->getComposer(true, $input->getOption('no-plugins')); $packages = $input->getArgument('packages'); if ($input->getOption('interactive')) { $packages = $this->getPackagesInteractively($io, $input, $output, $composer, $packages); } if ($input->getOption('root-reqs')) { $require = array_keys($composer->getPackage()->getRequires()); if (!$input->getOption('no-dev')) { $requireDev = array_keys($composer->getPackage()->getDevRequires()); $require = array_merge($require, $requireDev); } if (!empty($packages)) { $packages = array_intersect($packages, $require); } else { $packages = $require; } } $composer->getDownloadManager()->setOutputProgress(!$input->getOption('no-progress')); $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'update', $input, $output); $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent); $install = Installer::create($io, $composer); $preferSource = false; $preferDist = false; $config = $composer->getConfig(); switch ($config->get('preferred-install')) { case 'source': $preferSource = true; break; case 'dist': $preferDist = true; break; case 'auto': default: // noop break; } if ($input->getOption('prefer-source') || $input->getOption('prefer-dist')) { $preferSource = $input->getOption('prefer-source'); $preferDist = $input->getOption('prefer-dist'); } $optimize = $input->getOption('optimize-autoloader') || $config->get('optimize-autoloader'); $authoritative = $input->getOption('classmap-authoritative') || $config->get('classmap-authoritative'); $install ->setDryRun($input->getOption('dry-run')) ->setVerbose($input->getOption('verbose')) ->setPreferSource($preferSource) ->setPreferDist($preferDist) ->setDevMode(!$input->getOption('no-dev')) ->setDumpAutoloader(!$input->getOption('no-autoloader')) ->setRunScripts(!$input->getOption('no-scripts')) ->setOptimizeAutoloader($optimize) ->setClassMapAuthoritative($authoritative) ->setUpdate(true) ->setUpdateWhitelist($input->getOption('lock') ? array('lock') : $packages) ->setWhitelistDependencies($input->getOption('with-dependencies')) ->setIgnorePlatformRequirements($input->getOption('ignore-platform-reqs')) ->setPreferStable($input->getOption('prefer-stable')) ->setPreferLowest($input->getOption('prefer-lowest')) ; if ($input->getOption('no-plugins')) { $install->disablePlugins(); } return $install->run(); } private function getPackagesInteractively(IOInterface $io, InputInterface $input, OutputInterface $output, Composer $composer, array $packages) { if (!$input->isInteractive()) { throw new \InvalidArgumentException('--interactive cannot be used in non-interactive terminals.'); } $requires = array_merge( $composer->getPackage()->getRequires(), $composer->getPackage()->getDevRequires() ); $autocompleterValues = array(); foreach ($requires as $require) { $autocompleterValues[strtolower($require->getTarget())] = $require->getTarget(); } $installedPackages = $composer->getRepositoryManager()->getLocalRepository()->getPackages(); foreach ($installedPackages as $package) { $autocompleterValues[$package->getName()] = $package->getPrettyName(); } $helper = $this->getHelper('question'); $question = new Question('Enter package name: ', null); $io->writeError('Press enter without value to end submission'); do { $autocompleterValues = array_diff($autocompleterValues, $packages); $question->setAutocompleterValues($autocompleterValues); $addedPackage = $helper->ask($input, $output, $question); if (!is_string($addedPackage) || empty($addedPackage)) { break; } $addedPackage = strtolower($addedPackage); if (!in_array($addedPackage, $packages)) { $packages[] = $addedPackage; } } while (true); $packages = array_filter($packages); if (!$packages) { throw new \InvalidArgumentException('You must enter minimum one package.'); } $table = new Table($output); $table->setHeaders(array('Selected packages')); foreach ($packages as $package) { $table->addRow(array($package)); } $table->render(); if ($io->askConfirmation(sprintf( 'Would you like to continue and update the above package%s [yes]? ', 1 === count($packages) ? '' : 's' ), true)) { return $packages; } throw new \RuntimeException('Installation aborted.'); } } composer-1.0.0-beta2/src/Composer/Command/ValidateCommand.php000066400000000000000000000153371267577262200240600ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Command; use Composer\Factory; use Composer\Package\Loader\ValidatingArrayLoader; use Composer\Plugin\CommandEvent; use Composer\Plugin\PluginEvents; use Composer\Util\ConfigValidator; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; /** * ValidateCommand * * @author Robert Schönthal * @author Jordi Boggiano */ class ValidateCommand extends BaseCommand { /** * configure */ protected function configure() { $this ->setName('validate') ->setDescription('Validates a composer.json and composer.lock') ->setDefinition(array( new InputOption('no-check-all', null, InputOption::VALUE_NONE, 'Do not make a complete validation'), new InputOption('no-check-lock', null, InputOption::VALUE_NONE, 'Do not check if lock file is up to date'), new InputOption('no-check-publish', null, InputOption::VALUE_NONE, 'Do not check for publish errors'), new InputOption('with-dependencies', 'A', InputOption::VALUE_NONE, 'Also validate the composer.json of all installed dependencies'), new InputOption('strict', null, InputOption::VALUE_NONE, 'Return a non-zero exit code for warnings as well as errors'), new InputArgument('file', InputArgument::OPTIONAL, 'path to composer.json file', './composer.json'), )) ->setHelp(<<getArgument('file'); $io = $this->getIO(); if (!file_exists($file)) { $io->writeError('' . $file . ' not found.'); return 3; } if (!is_readable($file)) { $io->writeError('' . $file . ' is not readable.'); return 3; } $validator = new ConfigValidator($io); $checkAll = $input->getOption('no-check-all') ? 0 : ValidatingArrayLoader::CHECK_ALL; $checkPublish = !$input->getOption('no-check-publish'); $checkLock = !$input->getOption('no-check-lock'); $isStrict = $input->getOption('strict'); list($errors, $publishErrors, $warnings) = $validator->validate($file, $checkAll); $lockErrors = array(); $composer = Factory::create($io, $file); $locker = $composer->getLocker(); if ($locker->isLocked() && !$locker->isFresh()) { $lockErrors[] = 'The lock file is not up to date with the latest changes in composer.json, it is recommended that you run `composer update`.'; } $this->outputResult($io, $file, $errors, $warnings, $checkPublish, $publishErrors, $checkLock, $lockErrors, true); $exitCode = $errors || ($publishErrors && $checkPublish) || ($lockErrors && $checkLock) ? 2 : ($isStrict && $warnings ? 1 : 0); if ($input->getOption('with-dependencies')) { $localRepo = $composer->getRepositoryManager()->getLocalRepository(); foreach ($localRepo->getPackages() as $package) { $path = $composer->getInstallationManager()->getInstallPath($package); $file = $path . '/composer.json'; if (is_dir($path) && file_exists($file)) { list($errors, $publishErrors, $warnings) = $validator->validate($file, $checkAll); $this->outputResult($io, $package->getPrettyName(), $errors, $warnings, $checkPublish, $publishErrors); $depCode = $errors || ($publishErrors && $checkPublish) ? 2 : ($isStrict && $warnings ? 1 : 0); $exitCode = max($depCode, $exitCode); } } } $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'validate', $input, $output); $eventCode = $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent); $exitCode = max($eventCode, $exitCode); return $exitCode; } private function outputResult($io, $name, &$errors, &$warnings, $checkPublish = false, $publishErrors = array(), $checkLock = false, $lockErrors = array(), $printSchemaUrl = false) { if (!$errors && !$publishErrors && !$warnings) { $io->write('' . $name . ' is valid'); } elseif (!$errors && !$publishErrors) { $io->writeError('' . $name . ' is valid, but with a few warnings'); if ($printSchemaUrl) { $io->writeError('See https://getcomposer.org/doc/04-schema.md for details on the schema'); } } elseif (!$errors) { $io->writeError('' . $name . ' is valid for simple usage with composer but has'); $io->writeError('strict errors that make it unable to be published as a package:'); if ($printSchemaUrl) { $io->writeError('See https://getcomposer.org/doc/04-schema.md for details on the schema'); } } else { $io->writeError('' . $name . ' is invalid, the following errors/warnings were found:'); } // If checking publish errors, display them as errors, otherwise just show them as warnings if ($checkPublish) { $errors = array_merge($errors, $publishErrors); } else { $warnings = array_merge($warnings, $publishErrors); } // If checking lock errors, display them as errors, otherwise just show them as warnings if ($checkLock) { $errors = array_merge($errors, $lockErrors); } else { $warnings = array_merge($warnings, $lockErrors); } $messages = array( 'error' => $errors, 'warning' => $warnings, ); foreach ($messages as $style => $msgs) { foreach ($msgs as $msg) { $io->writeError('<' . $style . '>' . $msg . ''); } } } } composer-1.0.0-beta2/src/Composer/Compiler.php000066400000000000000000000224551267577262200212230ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer; use Composer\Json\JsonFile; use Composer\Spdx\SpdxLicenses; use Symfony\Component\Finder\Finder; use Symfony\Component\Process\Process; use Seld\PharUtils\Timestamps; /** * The Compiler class compiles composer into a phar * * @author Fabien Potencier * @author Jordi Boggiano */ class Compiler { private $version; private $branchAliasVersion = ''; private $versionDate; /** * Compiles composer into a single phar file * * @param string $pharFile The full path to the file to create * @throws \RuntimeException */ public function compile($pharFile = 'composer.phar') { if (file_exists($pharFile)) { unlink($pharFile); } $process = new Process('git log --pretty="%H" -n1 HEAD', __DIR__); if ($process->run() != 0) { throw new \RuntimeException('Can\'t run git log. You must ensure to run compile from composer git repository clone and that git binary is available.'); } $this->version = trim($process->getOutput()); $process = new Process('git log -n1 --pretty=%ci HEAD', __DIR__); if ($process->run() != 0) { throw new \RuntimeException('Can\'t run git log. You must ensure to run compile from composer git repository clone and that git binary is available.'); } $this->versionDate = new \DateTime(trim($process->getOutput())); $this->versionDate->setTimezone(new \DateTimeZone('UTC')); $process = new Process('git describe --tags --exact-match HEAD'); if ($process->run() == 0) { $this->version = trim($process->getOutput()); } else { // get branch-alias defined in composer.json for dev-master (if any) $localConfig = __DIR__.'/../../composer.json'; $file = new JsonFile($localConfig); $localConfig = $file->read(); if (isset($localConfig['extra']['branch-alias']['dev-master'])) { $this->branchAliasVersion = $localConfig['extra']['branch-alias']['dev-master']; } } $phar = new \Phar($pharFile, 0, 'composer.phar'); $phar->setSignatureAlgorithm(\Phar::SHA1); $phar->startBuffering(); $finderSort = function ($a, $b) { return strcmp(strtr($a->getRealPath(), '\\', '/'), strtr($b->getRealPath(), '\\', '/')); }; $finder = new Finder(); $finder->files() ->ignoreVCS(true) ->name('*.php') ->notName('Compiler.php') ->notName('ClassLoader.php') ->in(__DIR__.'/..') ->sort($finderSort) ; foreach ($finder as $file) { $this->addFile($phar, $file); } $this->addFile($phar, new \SplFileInfo(__DIR__ . '/Autoload/ClassLoader.php'), false); $finder = new Finder(); $finder->files() ->name('*.json') ->in(__DIR__.'/../../res') ->in(SpdxLicenses::getResourcesDir()) ->sort($finderSort) ; foreach ($finder as $file) { $this->addFile($phar, $file, false); } $this->addFile($phar, new \SplFileInfo(__DIR__ . '/../../vendor/seld/cli-prompt/res/hiddeninput.exe'), false); $finder = new Finder(); $finder->files() ->ignoreVCS(true) ->name('*.php') ->name('LICENSE') ->exclude('Tests') ->exclude('tests') ->exclude('docs') ->in(__DIR__.'/../../vendor/symfony/') ->in(__DIR__.'/../../vendor/seld/jsonlint/') ->in(__DIR__.'/../../vendor/seld/cli-prompt/') ->in(__DIR__.'/../../vendor/justinrainbow/json-schema/') ->in(__DIR__.'/../../vendor/composer/spdx-licenses/') ->in(__DIR__.'/../../vendor/composer/semver/') ->sort($finderSort) ; foreach ($finder as $file) { $this->addFile($phar, $file); } $this->addFile($phar, new \SplFileInfo(__DIR__.'/../../vendor/autoload.php')); $this->addFile($phar, new \SplFileInfo(__DIR__.'/../../vendor/composer/autoload_namespaces.php')); $this->addFile($phar, new \SplFileInfo(__DIR__.'/../../vendor/composer/autoload_psr4.php')); $this->addFile($phar, new \SplFileInfo(__DIR__.'/../../vendor/composer/autoload_classmap.php')); $this->addFile($phar, new \SplFileInfo(__DIR__.'/../../vendor/composer/autoload_files.php')); $this->addFile($phar, new \SplFileInfo(__DIR__.'/../../vendor/composer/autoload_real.php')); if (file_exists(__DIR__.'/../../vendor/composer/include_paths.php')) { $this->addFile($phar, new \SplFileInfo(__DIR__.'/../../vendor/composer/include_paths.php')); } $this->addFile($phar, new \SplFileInfo(__DIR__.'/../../vendor/composer/ClassLoader.php')); $this->addFile($phar, new \SplFileInfo(__DIR__ . '/../../res/cacert.pem'), false); $this->addComposerBin($phar); // Stubs $phar->setStub($this->getStub()); $phar->stopBuffering(); // disabled for interoperability with systems without gzip ext // $phar->compressFiles(\Phar::GZ); $this->addFile($phar, new \SplFileInfo(__DIR__.'/../../LICENSE'), false); unset($phar); // re-sign the phar with reproducible timestamp / signature $util = new Timestamps($pharFile); $util->updateTimestamps($this->versionDate); $util->save($pharFile, \Phar::SHA1); } private function addFile($phar, $file, $strip = true) { $path = strtr(str_replace(dirname(dirname(__DIR__)).DIRECTORY_SEPARATOR, '', $file->getRealPath()), '\\', '/'); $content = file_get_contents($file); if ($strip) { $content = $this->stripWhitespace($content); } elseif ('LICENSE' === basename($file)) { $content = "\n".$content."\n"; } if ($path === 'src/Composer/Composer.php') { $content = str_replace('@package_version@', $this->version, $content); $content = str_replace('@package_branch_alias_version@', $this->branchAliasVersion, $content); $content = str_replace('@release_date@', $this->versionDate->format('Y-m-d H:i:s'), $content); } $phar->addFromString($path, $content); } private function addComposerBin($phar) { $content = file_get_contents(__DIR__.'/../../bin/composer'); $content = preg_replace('{^#!/usr/bin/env php\s*}', '', $content); $phar->addFromString('bin/composer', $content); } /** * Removes whitespace from a PHP source string while preserving line numbers. * * @param string $source A PHP string * @return string The PHP string with the whitespace removed */ private function stripWhitespace($source) { if (!function_exists('token_get_all')) { return $source; } $output = ''; foreach (token_get_all($source) as $token) { if (is_string($token)) { $output .= $token; } elseif (in_array($token[0], array(T_COMMENT, T_DOC_COMMENT))) { $output .= str_repeat("\n", substr_count($token[1], "\n")); } elseif (T_WHITESPACE === $token[0]) { // reduce wide spaces $whitespace = preg_replace('{[ \t]+}', ' ', $token[1]); // normalize newlines to \n $whitespace = preg_replace('{(?:\r\n|\r|\n)}', "\n", $whitespace); // trim leading spaces $whitespace = preg_replace('{\n +}', "\n", $whitespace); $output .= $whitespace; } else { $output .= $token[1]; } } return $output; } private function getStub() { $stub = <<<'EOF' #!/usr/bin/env php * Jordi Boggiano * * For the full copyright and license information, please view * the license that is located at the bottom of this file. */ // Avoid APC causing random fatal errors per https://github.com/composer/composer/issues/264 if (extension_loaded('apc') && ini_get('apc.enable_cli') && ini_get('apc.cache_by_default')) { if (version_compare(phpversion('apc'), '3.0.12', '>=')) { ini_set('apc.cache_by_default', 0); } else { fwrite(STDERR, 'Warning: APC <= 3.0.12 may cause fatal errors when running composer commands.'.PHP_EOL); fwrite(STDERR, 'Update APC, or set apc.enable_cli or apc.cache_by_default to 0 in your php.ini.'.PHP_EOL); } } Phar::mapPhar('composer.phar'); EOF; // add warning once the phar is older than 60 days if (preg_match('{^[a-f0-9]+$}', $this->version)) { $warningTime = $this->versionDate->format('U') + 60 * 86400; $stub .= "define('COMPOSER_DEV_WARNING_TIME', $warningTime);\n"; } return $stub . <<<'EOF' require 'phar://composer.phar/bin/composer'; __HALT_COMPILER(); EOF; } } composer-1.0.0-beta2/src/Composer/Composer.php000066400000000000000000000107471267577262200212410ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer; use Composer\Package\RootPackageInterface; use Composer\Package\Locker; use Composer\Repository\RepositoryManager; use Composer\Installer\InstallationManager; use Composer\Plugin\PluginManager; use Composer\Downloader\DownloadManager; use Composer\EventDispatcher\EventDispatcher; use Composer\Autoload\AutoloadGenerator; /** * @author Jordi Boggiano * @author Konstantin Kudryashiv * @author Nils Adermann */ class Composer { const VERSION = '1.0.0-beta2'; const BRANCH_ALIAS_VERSION = '@package_branch_alias_version@'; const RELEASE_DATE = '2016-03-27 16:00:34'; /** * @var Package\RootPackageInterface */ private $package; /** * @var Locker */ private $locker; /** * @var Repository\RepositoryManager */ private $repositoryManager; /** * @var Downloader\DownloadManager */ private $downloadManager; /** * @var Installer\InstallationManager */ private $installationManager; /** * @var Plugin\PluginManager */ private $pluginManager; /** * @var Config */ private $config; /** * @var EventDispatcher */ private $eventDispatcher; /** * @var Autoload\AutoloadGenerator */ private $autoloadGenerator; /** * @param Package\RootPackageInterface $package * @return void */ public function setPackage(RootPackageInterface $package) { $this->package = $package; } /** * @return Package\RootPackageInterface */ public function getPackage() { return $this->package; } /** * @param Config $config */ public function setConfig(Config $config) { $this->config = $config; } /** * @return Config */ public function getConfig() { return $this->config; } /** * @param Package\Locker $locker */ public function setLocker(Locker $locker) { $this->locker = $locker; } /** * @return Package\Locker */ public function getLocker() { return $this->locker; } /** * @param Repository\RepositoryManager $manager */ public function setRepositoryManager(RepositoryManager $manager) { $this->repositoryManager = $manager; } /** * @return Repository\RepositoryManager */ public function getRepositoryManager() { return $this->repositoryManager; } /** * @param Downloader\DownloadManager $manager */ public function setDownloadManager(DownloadManager $manager) { $this->downloadManager = $manager; } /** * @return Downloader\DownloadManager */ public function getDownloadManager() { return $this->downloadManager; } /** * @param Installer\InstallationManager $manager */ public function setInstallationManager(InstallationManager $manager) { $this->installationManager = $manager; } /** * @return Installer\InstallationManager */ public function getInstallationManager() { return $this->installationManager; } /** * @param Plugin\PluginManager $manager */ public function setPluginManager(PluginManager $manager) { $this->pluginManager = $manager; } /** * @return Plugin\PluginManager */ public function getPluginManager() { return $this->pluginManager; } /** * @param EventDispatcher $eventDispatcher */ public function setEventDispatcher(EventDispatcher $eventDispatcher) { $this->eventDispatcher = $eventDispatcher; } /** * @return EventDispatcher */ public function getEventDispatcher() { return $this->eventDispatcher; } /** * @param Autoload\AutoloadGenerator $autoloadGenerator */ public function setAutoloadGenerator(AutoloadGenerator $autoloadGenerator) { $this->autoloadGenerator = $autoloadGenerator; } /** * @return Autoload\AutoloadGenerator */ public function getAutoloadGenerator() { return $this->autoloadGenerator; } } composer-1.0.0-beta2/src/Composer/Config.php000066400000000000000000000316151267577262200206540ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer; use Composer\Config\ConfigSourceInterface; /** * @author Jordi Boggiano */ class Config { const RELATIVE_PATHS = 1; public static $defaultConfig = array( 'process-timeout' => 300, 'use-include-path' => false, 'preferred-install' => 'auto', 'notify-on-install' => true, 'github-protocols' => array('https', 'ssh', 'git'), 'vendor-dir' => 'vendor', 'bin-dir' => '{$vendor-dir}/bin', 'cache-dir' => '{$home}/cache', 'data-dir' => '{$home}', 'cache-files-dir' => '{$cache-dir}/files', 'cache-repo-dir' => '{$cache-dir}/repo', 'cache-vcs-dir' => '{$cache-dir}/vcs', 'cache-ttl' => 15552000, // 6 months 'cache-files-ttl' => null, // fallback to cache-ttl 'cache-files-maxsize' => '300MiB', 'bin-compat' => 'auto', 'discard-changes' => false, 'autoloader-suffix' => null, 'sort-packages' => false, 'optimize-autoloader' => false, 'classmap-authoritative' => false, 'prepend-autoloader' => true, 'github-domains' => array('github.com'), 'disable-tls' => false, 'secure-http' => true, 'cafile' => null, 'capath' => null, 'github-expose-hostname' => true, 'gitlab-domains' => array('gitlab.com'), 'store-auths' => 'prompt', 'platform' => array(), 'archive-format' => 'tar', 'archive-dir' => '.', // valid keys without defaults (auth config stuff): // github-oauth // gitlab-oauth // http-basic ); public static $defaultRepositories = array( 'packagist' => array( 'type' => 'composer', 'url' => 'https?://packagist.org', 'allow_ssl_downgrade' => true, ), ); private $config; private $baseDir; private $repositories; private $configSource; private $authConfigSource; private $useEnvironment; /** * @param bool $useEnvironment Use COMPOSER_ environment variables to replace config settings */ public function __construct($useEnvironment = true, $baseDir = null) { // load defaults $this->config = static::$defaultConfig; $this->repositories = static::$defaultRepositories; $this->useEnvironment = (bool) $useEnvironment; $this->baseDir = $baseDir; } public function setConfigSource(ConfigSourceInterface $source) { $this->configSource = $source; } public function getConfigSource() { return $this->configSource; } public function setAuthConfigSource(ConfigSourceInterface $source) { $this->authConfigSource = $source; } public function getAuthConfigSource() { return $this->authConfigSource; } /** * Merges new config values with the existing ones (overriding) * * @param array $config */ public function merge($config) { // override defaults with given config if (!empty($config['config']) && is_array($config['config'])) { foreach ($config['config'] as $key => $val) { if (in_array($key, array('github-oauth', 'gitlab-oauth', 'http-basic')) && isset($this->config[$key])) { $this->config[$key] = array_merge($this->config[$key], $val); } elseif ('preferred-install' === $key && isset($this->config[$key])) { if (is_array($val) || is_array($this->config[$key])) { if (is_string($val)) { $val = array('*' => $val); } if (is_string($this->config[$key])) { $this->config[$key] = array('*' => $this->config[$key]); } $this->config[$key] = array_merge($this->config[$key], $val); // the full match pattern needs to be last if (isset($this->config[$key]['*'])) { $wildcard = $this->config[$key]['*']; unset($this->config[$key]['*']); $this->config[$key]['*'] = $wildcard; } } else { $this->config[$key] = $val; } } else { $this->config[$key] = $val; } } } if (!empty($config['repositories']) && is_array($config['repositories'])) { $this->repositories = array_reverse($this->repositories, true); $newRepos = array_reverse($config['repositories'], true); foreach ($newRepos as $name => $repository) { // disable a repository by name if (false === $repository) { unset($this->repositories[$name]); continue; } // disable a repository with an anonymous {"name": false} repo if (is_array($repository) && 1 === count($repository) && false === current($repository)) { unset($this->repositories[key($repository)]); continue; } // store repo if (is_int($name)) { $this->repositories[] = $repository; } else { $this->repositories[$name] = $repository; } } $this->repositories = array_reverse($this->repositories, true); } } /** * @return array */ public function getRepositories() { return $this->repositories; } /** * Returns a setting * * @param string $key * @param int $flags Options (see class constants) * @throws \RuntimeException * @return mixed */ public function get($key, $flags = 0) { switch ($key) { case 'vendor-dir': case 'bin-dir': case 'process-timeout': case 'data-dir': case 'cache-dir': case 'cache-files-dir': case 'cache-repo-dir': case 'cache-vcs-dir': case 'cafile': case 'capath': // convert foo-bar to COMPOSER_FOO_BAR and check if it exists since it overrides the local config $env = 'COMPOSER_' . strtoupper(strtr($key, '-', '_')); $val = rtrim($this->process($this->getComposerEnv($env) ?: $this->config[$key], $flags), '/\\'); $val = preg_replace('#^(\$HOME|~)(/|$)#', rtrim(getenv('HOME') ?: getenv('USERPROFILE'), '/\\') . '/', $val); if (substr($key, -4) !== '-dir') { return $val; } return (($flags & self::RELATIVE_PATHS) == self::RELATIVE_PATHS) ? $val : $this->realpath($val); case 'cache-ttl': return (int) $this->config[$key]; case 'cache-files-maxsize': if (!preg_match('/^\s*([0-9.]+)\s*(?:([kmg])(?:i?b)?)?\s*$/i', $this->config[$key], $matches)) { throw new \RuntimeException( "Could not parse the value of 'cache-files-maxsize': {$this->config[$key]}" ); } $size = $matches[1]; if (isset($matches[2])) { switch (strtolower($matches[2])) { case 'g': $size *= 1024; // intentional fallthrough case 'm': $size *= 1024; // intentional fallthrough case 'k': $size *= 1024; break; } } return $size; case 'cache-files-ttl': if (isset($this->config[$key])) { return (int) $this->config[$key]; } return (int) $this->config['cache-ttl']; case 'home': $val = preg_replace('#^(\$HOME|~)(/|$)#', rtrim(getenv('HOME') ?: getenv('USERPROFILE'), '/\\') . '/', $this->config[$key]); return rtrim($this->process($val, $flags), '/\\'); case 'bin-compat': $value = $this->getComposerEnv('COMPOSER_BIN_COMPAT') ?: $this->config[$key]; if (!in_array($value, array('auto', 'full'))) { throw new \RuntimeException( "Invalid value for 'bin-compat': {$value}. Expected auto, full" ); } return $value; case 'discard-changes': if ($env = $this->getComposerEnv('COMPOSER_DISCARD_CHANGES')) { if (!in_array($env, array('stash', 'true', 'false', '1', '0'), true)) { throw new \RuntimeException( "Invalid value for COMPOSER_DISCARD_CHANGES: {$env}. Expected 1, 0, true, false or stash" ); } if ('stash' === $env) { return 'stash'; } // convert string value to bool return $env !== 'false' && (bool) $env; } if (!in_array($this->config[$key], array(true, false, 'stash'), true)) { throw new \RuntimeException( "Invalid value for 'discard-changes': {$this->config[$key]}. Expected true, false or stash" ); } return $this->config[$key]; case 'github-protocols': $protos = $this->config['github-protocols']; if ($this->config['secure-http'] && false !== ($index = array_search('git', $protos))) { unset($protos[$index]); } if (reset($protos) === 'http') { throw new \RuntimeException('The http protocol for github is not available anymore, update your config\'s github-protocols to use "https", "git" or "ssh"'); } return $protos; case 'disable-tls': return $this->config[$key] !== 'false' && (bool) $this->config[$key]; case 'secure-http': return $this->config[$key] !== 'false' && (bool) $this->config[$key]; default: if (!isset($this->config[$key])) { return null; } return $this->process($this->config[$key], $flags); } } public function all($flags = 0) { $all = array( 'repositories' => $this->getRepositories(), ); foreach (array_keys($this->config) as $key) { $all['config'][$key] = $this->get($key, $flags); } return $all; } public function raw() { return array( 'repositories' => $this->getRepositories(), 'config' => $this->config, ); } /** * Checks whether a setting exists * * @param string $key * @return bool */ public function has($key) { return array_key_exists($key, $this->config); } /** * Replaces {$refs} inside a config string * * @param string $value a config string that can contain {$refs-to-other-config} * @param int $flags Options (see class constants) * @return string */ private function process($value, $flags) { $config = $this; if (!is_string($value)) { return $value; } return preg_replace_callback('#\{\$(.+)\}#', function ($match) use ($config, $flags) { return $config->get($match[1], $flags); }, $value); } /** * Turns relative paths in absolute paths without realpath() * * Since the dirs might not exist yet we can not call realpath or it will fail. * * @param string $path * @return string */ private function realpath($path) { if (preg_match('{^(?:/|[a-z]:|[a-z0-9.]+://)}i', $path)) { return $path; } return $this->baseDir . '/' . $path; } /** * Reads the value of a Composer environment variable * * This should be used to read COMPOSER_ environment variables * that overload config values. * * @param string $var * @return string|bool */ private function getComposerEnv($var) { if ($this->useEnvironment) { return getenv($var); } return false; } } composer-1.0.0-beta2/src/Composer/Config/000077500000000000000000000000001267577262200201355ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/Config/ConfigSourceInterface.php000066400000000000000000000032411267577262200250550ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Config; /** * Configuration Source Interface * * @author Jordi Boggiano * @author Beau Simensen */ interface ConfigSourceInterface { /** * Add a repository * * @param string $name Name * @param array $config Configuration */ public function addRepository($name, $config); /** * Remove a repository * * @param string $name */ public function removeRepository($name); /** * Add a config setting * * @param string $name Name * @param string $value Value */ public function addConfigSetting($name, $value); /** * Remove a config setting * * @param string $name */ public function removeConfigSetting($name); /** * Add a package link * * @param string $type Type (require, require-dev, provide, suggest, replace, conflict) * @param string $name Name * @param string $value Value */ public function addLink($type, $name, $value); /** * Remove a package link * * @param string $type Type (require, require-dev, provide, suggest, replace, conflict) * @param string $name Name */ public function removeLink($type, $name); /** * Gives a user-friendly name to this source (file path or so) * * @return string */ public function getName(); } composer-1.0.0-beta2/src/Composer/Config/JsonConfigSource.php000066400000000000000000000133431267577262200240720ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Config; use Composer\Json\JsonFile; use Composer\Json\JsonManipulator; use Composer\Util\Silencer; /** * JSON Configuration Source * * @author Jordi Boggiano * @author Beau Simensen */ class JsonConfigSource implements ConfigSourceInterface { /** * @var JsonFile */ private $file; /** * @var bool */ private $authConfig; /** * Constructor * * @param JsonFile $file * @param bool $authConfig */ public function __construct(JsonFile $file, $authConfig = false) { $this->file = $file; $this->authConfig = $authConfig; } /** * {@inheritdoc} */ public function getName() { return $this->file->getPath(); } /** * {@inheritdoc} */ public function addRepository($name, $config) { $this->manipulateJson('addRepository', $name, $config, function (&$config, $repo, $repoConfig) { $config['repositories'][$repo] = $repoConfig; }); } /** * {@inheritdoc} */ public function removeRepository($name) { $this->manipulateJson('removeRepository', $name, function (&$config, $repo) { unset($config['repositories'][$repo]); }); } /** * {@inheritdoc} */ public function addConfigSetting($name, $value) { $authConfig = $this->authConfig; $this->manipulateJson('addConfigSetting', $name, $value, function (&$config, $key, $val) use ($authConfig) { if (preg_match('{^(github-oauth|gitlab-oauth|http-basic|platform)\.}', $key)) { list($key, $host) = explode('.', $key, 2); if ($authConfig) { $config[$key][$host] = $val; } else { $config['config'][$key][$host] = $val; } } else { $config['config'][$key] = $val; } }); } /** * {@inheritdoc} */ public function removeConfigSetting($name) { $authConfig = $this->authConfig; $this->manipulateJson('removeConfigSetting', $name, function (&$config, $key) use ($authConfig) { if (preg_match('{^(github-oauth|gitlab-oauth|http-basic|platform)\.}', $key)) { list($key, $host) = explode('.', $key, 2); if ($authConfig) { unset($config[$key][$host]); } else { unset($config['config'][$key][$host]); } } else { unset($config['config'][$key]); } }); } /** * {@inheritdoc} */ public function addLink($type, $name, $value) { $this->manipulateJson('addLink', $type, $name, $value, function (&$config, $type, $name, $value) { $config[$type][$name] = $value; }); } /** * {@inheritdoc} */ public function removeLink($type, $name) { $this->manipulateJson('removeSubNode', $type, $name, function (&$config, $type, $name) { unset($config[$type][$name]); }); } protected function manipulateJson($method, $args, $fallback) { $args = func_get_args(); // remove method & fallback array_shift($args); $fallback = array_pop($args); if ($this->file->exists()) { if (!is_writable($this->file->getPath())) { throw new \RuntimeException(sprintf('The file "%s" is not writable.', $this->file->getPath())); } if (!is_readable($this->file->getPath())) { throw new \RuntimeException(sprintf('The file "%s" is not readable.', $this->file->getPath())); } $contents = file_get_contents($this->file->getPath()); } elseif ($this->authConfig) { $contents = "{\n}\n"; } else { $contents = "{\n \"config\": {\n }\n}\n"; } $manipulator = new JsonManipulator($contents); $newFile = !$this->file->exists(); // override manipulator method for auth config files if ($this->authConfig && $method === 'addConfigSetting') { $method = 'addSubNode'; list($mainNode, $name) = explode('.', $args[0], 2); $args = array($mainNode, $name, $args[1]); } elseif ($this->authConfig && $method === 'removeConfigSetting') { $method = 'removeSubNode'; list($mainNode, $name) = explode('.', $args[0], 2); $args = array($mainNode, $name); } // try to update cleanly if (call_user_func_array(array($manipulator, $method), $args)) { file_put_contents($this->file->getPath(), $manipulator->getContents()); } else { // on failed clean update, call the fallback and rewrite the whole file $config = $this->file->read(); $this->arrayUnshiftRef($args, $config); call_user_func_array($fallback, $args); $this->file->write($config); } if ($newFile) { Silencer::call('chmod', $this->file->getPath(), 0600); } } /** * Prepend a reference to an element to the beginning of an array. * * @param array $array * @param mixed $value * @return array */ private function arrayUnshiftRef(&$array, &$value) { $return = array_unshift($array, ''); $array[0] = &$value; return $return; } } composer-1.0.0-beta2/src/Composer/Console/000077500000000000000000000000001267577262200203325ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/Console/Application.php000066400000000000000000000310551267577262200233120ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Console; use Composer\Util\Platform; use Composer\Util\Silencer; use Symfony\Component\Console\Application as BaseApplication; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\ConsoleOutput; use Symfony\Component\Console\Formatter\OutputFormatter; use Composer\Command; use Composer\Composer; use Composer\Factory; use Composer\IO\IOInterface; use Composer\IO\ConsoleIO; use Composer\Json\JsonValidationException; use Composer\Util\ErrorHandler; /** * The console application that handles the commands * * @author Ryan Weaver * @author Jordi Boggiano * @author François Pluchino */ class Application extends BaseApplication { /** * @var Composer */ protected $composer; /** * @var IOInterface */ protected $io; private static $logo = ' ______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ '; public function __construct() { static $shutdownRegistered = false; if (function_exists('ini_set') && extension_loaded('xdebug')) { ini_set('xdebug.show_exception_trace', false); ini_set('xdebug.scream', false); } if (function_exists('date_default_timezone_set') && function_exists('date_default_timezone_get')) { date_default_timezone_set(Silencer::call('date_default_timezone_get')); } if (!$shutdownRegistered) { $shutdownRegistered = true; register_shutdown_function(function () { $lastError = error_get_last(); if ($lastError && $lastError['message'] && (strpos($lastError['message'], 'Allowed memory') !== false /*Zend PHP out of memory error*/ || strpos($lastError['message'], 'exceeded memory') !== false /*HHVM out of memory errors*/)) { echo "\n". 'Check https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors for more info on how to handle out of memory errors.'; } }); } parent::__construct('Composer', Composer::VERSION); } /** * {@inheritDoc} */ public function run(InputInterface $input = null, OutputInterface $output = null) { if (null === $output) { $styles = Factory::createAdditionalStyles(); $formatter = new OutputFormatter(null, $styles); $output = new ConsoleOutput(ConsoleOutput::VERBOSITY_NORMAL, null, $formatter); } return parent::run($input, $output); } /** * {@inheritDoc} */ public function doRun(InputInterface $input, OutputInterface $output) { $io = $this->io = new ConsoleIO($input, $output, $this->getHelperSet()); ErrorHandler::register($io); // determine command name to be executed $commandName = ''; if ($name = $this->getCommandName($input)) { try { $commandName = $this->find($name)->getName(); } catch (\InvalidArgumentException $e) { } } if ($commandName !== 'global') { if (PHP_VERSION_ID < 50302) { $io->writeError('Composer only officially supports PHP 5.3.2 and above, you will most likely encounter problems with your PHP '.PHP_VERSION.', upgrading is strongly recommended.'); } if (extension_loaded('xdebug') && !getenv('COMPOSER_DISABLE_XDEBUG_WARN')) { $io->writeError('You are running composer with xdebug enabled. This has a major impact on runtime performance. See https://getcomposer.org/xdebug'); } if (defined('COMPOSER_DEV_WARNING_TIME') && $commandName !== 'self-update' && $commandName !== 'selfupdate' && time() > COMPOSER_DEV_WARNING_TIME) { $io->writeError(sprintf('Warning: This development build of composer is over 60 days old. It is recommended to update it by running "%s self-update" to get the latest version.', $_SERVER['PHP_SELF'])); } if (getenv('COMPOSER_NO_INTERACTION')) { $input->setInteractive(false); } // switch working dir if ($newWorkDir = $this->getNewWorkingDir($input)) { $oldWorkingDir = getcwd(); chdir($newWorkDir); $io->writeError('Changed CWD to ' . getcwd(), true, IOInterface::DEBUG); } // add non-standard scripts as own commands $file = Factory::getComposerFile(); if (is_file($file) && is_readable($file) && is_array($composer = json_decode(file_get_contents($file), true))) { if (isset($composer['scripts']) && is_array($composer['scripts'])) { foreach ($composer['scripts'] as $script => $dummy) { if (!defined('Composer\Script\ScriptEvents::'.str_replace('-', '_', strtoupper($script)))) { if ($this->has($script)) { $io->writeError('A script named '.$script.' would override a native Composer function and has been skipped'); } else { $this->add(new Command\ScriptAliasCommand($script)); } } } } } } try { if ($input->hasParameterOption('--profile')) { $startTime = microtime(true); $this->io->enableDebugging($startTime); } $result = parent::doRun($input, $output); if (isset($oldWorkingDir)) { chdir($oldWorkingDir); } if (isset($startTime)) { $io->writeError('Memory usage: '.round(memory_get_usage() / 1024 / 1024, 2).'MB (peak: '.round(memory_get_peak_usage() / 1024 / 1024, 2).'MB), time: '.round(microtime(true) - $startTime, 2).'s'); } return $result; } catch (\Exception $e) { $this->hintCommonErrors($e); throw $e; } } /** * @param InputInterface $input * @throws \RuntimeException * @return string */ private function getNewWorkingDir(InputInterface $input) { $workingDir = $input->getParameterOption(array('--working-dir', '-d')); if (false !== $workingDir && !is_dir($workingDir)) { throw new \RuntimeException('Invalid working directory specified, '.$workingDir.' does not exist.'); } return $workingDir; } /** * {@inheritDoc} */ private function hintCommonErrors($exception) { $io = $this->getIO(); Silencer::suppress(); try { $composer = $this->getComposer(false, true); if ($composer) { $config = $composer->getConfig(); $minSpaceFree = 1024 * 1024; if ((($df = disk_free_space($dir = $config->get('home'))) !== false && $df < $minSpaceFree) || (($df = disk_free_space($dir = $config->get('vendor-dir'))) !== false && $df < $minSpaceFree) || (($df = disk_free_space($dir = sys_get_temp_dir())) !== false && $df < $minSpaceFree) ) { $io->writeError('The disk hosting '.$dir.' is full, this may be the cause of the following exception', true, IOInterface::QUIET); } } } catch (\Exception $e) { } Silencer::restore(); if (Platform::isWindows() && false !== strpos($exception->getMessage(), 'The system cannot find the path specified')) { $io->writeError('The following exception may be caused by a stale entry in your cmd.exe AutoRun', true, IOInterface::QUIET); $io->writeError('Check https://getcomposer.org/doc/articles/troubleshooting.md#-the-system-cannot-find-the-path-specified-windows- for details', true, IOInterface::QUIET); } if (false !== strpos($exception->getMessage(), 'fork failed - Cannot allocate memory')) { $io->writeError('The following exception is caused by a lack of memory and not having swap configured', true, IOInterface::QUIET); $io->writeError('Check https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors for details', true, IOInterface::QUIET); } } /** * @param bool $required * @param bool $disablePlugins * @throws JsonValidationException * @return \Composer\Composer */ public function getComposer($required = true, $disablePlugins = false) { if (null === $this->composer) { try { $this->composer = Factory::create($this->io, null, $disablePlugins); } catch (\InvalidArgumentException $e) { if ($required) { $this->io->writeError($e->getMessage()); exit(1); } } catch (JsonValidationException $e) { $errors = ' - ' . implode(PHP_EOL . ' - ', $e->getErrors()); $message = $e->getMessage() . ':' . PHP_EOL . $errors; throw new JsonValidationException($message); } } return $this->composer; } /** * Removes the cached composer instance */ public function resetComposer() { $this->composer = null; } /** * @return IOInterface */ public function getIO() { return $this->io; } public function getHelp() { return self::$logo . parent::getHelp(); } /** * Initializes all the composer commands. */ protected function getDefaultCommands() { $commands = array_merge(parent::getDefaultCommands(), array( new Command\AboutCommand(), new Command\ConfigCommand(), new Command\DependsCommand(), new Command\ProhibitsCommand(), new Command\InitCommand(), new Command\InstallCommand(), new Command\CreateProjectCommand(), new Command\UpdateCommand(), new Command\SearchCommand(), new Command\ValidateCommand(), new Command\ShowCommand(), new Command\SuggestsCommand(), new Command\RequireCommand(), new Command\DumpAutoloadCommand(), new Command\StatusCommand(), new Command\ArchiveCommand(), new Command\DiagnoseCommand(), new Command\RunScriptCommand(), new Command\LicensesCommand(), new Command\GlobalCommand(), new Command\ClearCacheCommand(), new Command\RemoveCommand(), new Command\HomeCommand(), new Command\ExecCommand(), )); if ('phar:' === substr(__FILE__, 0, 5)) { $commands[] = new Command\SelfUpdateCommand(); } return $commands; } /** * {@inheritDoc} */ public function getLongVersion() { if (Composer::BRANCH_ALIAS_VERSION) { return sprintf( '%s version %s (%s) %s', $this->getName(), Composer::BRANCH_ALIAS_VERSION, $this->getVersion(), Composer::RELEASE_DATE ); } return parent::getLongVersion() . ' ' . Composer::RELEASE_DATE; } /** * {@inheritDoc} */ protected function getDefaultInputDefinition() { $definition = parent::getDefaultInputDefinition(); $definition->addOption(new InputOption('--profile', null, InputOption::VALUE_NONE, 'Display timing and memory usage information')); $definition->addOption(new InputOption('--working-dir', '-d', InputOption::VALUE_REQUIRED, 'If specified, use the given directory as working directory.')); return $definition; } } composer-1.0.0-beta2/src/Composer/Console/HtmlOutputFormatter.php000066400000000000000000000050011267577262200250500ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Console; use Symfony\Component\Console\Formatter\OutputFormatter; /** * @author Jordi Boggiano */ class HtmlOutputFormatter extends OutputFormatter { private static $availableForegroundColors = array( 30 => 'black', 31 => 'red', 32 => 'green', 33 => 'yellow', 34 => 'blue', 35 => 'magenta', 36 => 'cyan', 37 => 'white', ); private static $availableBackgroundColors = array( 40 => 'black', 41 => 'red', 42 => 'green', 43 => 'yellow', 44 => 'blue', 45 => 'magenta', 46 => 'cyan', 47 => 'white', ); private static $availableOptions = array( 1 => 'bold', 4 => 'underscore', //5 => 'blink', //7 => 'reverse', //8 => 'conceal' ); /** * @param array $styles Array of "name => FormatterStyle" instances */ public function __construct(array $styles = array()) { parent::__construct(true, $styles); } public function format($message) { $formatted = parent::format($message); $clearEscapeCodes = '(?:39|49|0|22|24|25|27|28)'; return preg_replace_callback("{\033\[([0-9;]+)m(.*?)\033\[(?:".$clearEscapeCodes.";)*?".$clearEscapeCodes."m}s", array($this, 'formatHtml'), $formatted); } private function formatHtml($matches) { $out = ''.$matches[2].''; } } composer-1.0.0-beta2/src/Composer/DependencyResolver/000077500000000000000000000000001267577262200225305ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/DependencyResolver/Decisions.php000066400000000000000000000121471267577262200251660ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver; /** * Stores decisions on installing, removing or keeping packages * * @author Nils Adermann */ class Decisions implements \Iterator, \Countable { const DECISION_LITERAL = 0; const DECISION_REASON = 1; protected $pool; protected $decisionMap; protected $decisionQueue = array(); public function __construct($pool) { $this->pool = $pool; $this->decisionMap = array(); } public function decide($literal, $level, $why) { $this->addDecision($literal, $level); $this->decisionQueue[] = array( self::DECISION_LITERAL => $literal, self::DECISION_REASON => $why, ); } public function satisfy($literal) { $packageId = abs($literal); return ( $literal > 0 && isset($this->decisionMap[$packageId]) && $this->decisionMap[$packageId] > 0 || $literal < 0 && isset($this->decisionMap[$packageId]) && $this->decisionMap[$packageId] < 0 ); } public function conflict($literal) { $packageId = abs($literal); return ( (isset($this->decisionMap[$packageId]) && $this->decisionMap[$packageId] > 0 && $literal < 0) || (isset($this->decisionMap[$packageId]) && $this->decisionMap[$packageId] < 0 && $literal > 0) ); } public function decided($literalOrPackageId) { return !empty($this->decisionMap[abs($literalOrPackageId)]); } public function undecided($literalOrPackageId) { return empty($this->decisionMap[abs($literalOrPackageId)]); } public function decidedInstall($literalOrPackageId) { $packageId = abs($literalOrPackageId); return isset($this->decisionMap[$packageId]) && $this->decisionMap[$packageId] > 0; } public function decisionLevel($literalOrPackageId) { $packageId = abs($literalOrPackageId); if (isset($this->decisionMap[$packageId])) { return abs($this->decisionMap[$packageId]); } return 0; } public function decisionRule($literalOrPackageId) { $packageId = abs($literalOrPackageId); foreach ($this->decisionQueue as $i => $decision) { if ($packageId === abs($decision[self::DECISION_LITERAL])) { return $decision[self::DECISION_REASON]; } } return null; } public function atOffset($queueOffset) { return $this->decisionQueue[$queueOffset]; } public function validOffset($queueOffset) { return $queueOffset >= 0 && $queueOffset < count($this->decisionQueue); } public function lastReason() { return $this->decisionQueue[count($this->decisionQueue) - 1][self::DECISION_REASON]; } public function lastLiteral() { return $this->decisionQueue[count($this->decisionQueue) - 1][self::DECISION_LITERAL]; } public function reset() { while ($decision = array_pop($this->decisionQueue)) { $this->decisionMap[abs($decision[self::DECISION_LITERAL])] = 0; } } public function resetToOffset($offset) { while (count($this->decisionQueue) > $offset + 1) { $decision = array_pop($this->decisionQueue); $this->decisionMap[abs($decision[self::DECISION_LITERAL])] = 0; } } public function revertLast() { $this->decisionMap[abs($this->lastLiteral())] = 0; array_pop($this->decisionQueue); } public function count() { return count($this->decisionQueue); } public function rewind() { end($this->decisionQueue); } public function current() { return current($this->decisionQueue); } public function key() { return key($this->decisionQueue); } public function next() { return prev($this->decisionQueue); } public function valid() { return false !== current($this->decisionQueue); } public function isEmpty() { return count($this->decisionQueue) === 0; } protected function addDecision($literal, $level) { $packageId = abs($literal); $previousDecision = isset($this->decisionMap[$packageId]) ? $this->decisionMap[$packageId] : null; if ($previousDecision != 0) { $literalString = $this->pool->literalToString($literal); $package = $this->pool->literalToPackage($literal); throw new SolverBugException( "Trying to decide $literalString on level $level, even though $package was previously decided as ".(int) $previousDecision."." ); } if ($literal > 0) { $this->decisionMap[$packageId] = $level; } else { $this->decisionMap[$packageId] = -$level; } } } composer-1.0.0-beta2/src/Composer/DependencyResolver/DefaultPolicy.php000066400000000000000000000221711267577262200260100ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver; use Composer\Package\PackageInterface; use Composer\Package\AliasPackage; use Composer\Package\BasePackage; use Composer\Semver\Constraint\Constraint; /** * @author Nils Adermann * @author Jordi Boggiano */ class DefaultPolicy implements PolicyInterface { private $preferStable; private $preferLowest; public function __construct($preferStable = false, $preferLowest = false) { $this->preferStable = $preferStable; $this->preferLowest = $preferLowest; } public function versionCompare(PackageInterface $a, PackageInterface $b, $operator) { if ($this->preferStable && ($stabA = $a->getStability()) !== ($stabB = $b->getStability())) { return BasePackage::$stabilities[$stabA] < BasePackage::$stabilities[$stabB]; } $constraint = new Constraint($operator, $b->getVersion()); $version = new Constraint('==', $a->getVersion()); return $constraint->matchSpecific($version, true); } public function findUpdatePackages(Pool $pool, array $installedMap, PackageInterface $package, $mustMatchName = false) { $packages = array(); foreach ($pool->whatProvides($package->getName(), null, $mustMatchName) as $candidate) { if ($candidate !== $package) { $packages[] = $candidate; } } return $packages; } public function getPriority(Pool $pool, PackageInterface $package) { return $pool->getPriority($package->getRepository()); } public function selectPreferredPackages(Pool $pool, array $installedMap, array $literals, $requiredPackage = null) { $packages = $this->groupLiteralsByNamePreferInstalled($pool, $installedMap, $literals); foreach ($packages as &$literals) { $policy = $this; usort($literals, function ($a, $b) use ($policy, $pool, $installedMap, $requiredPackage) { return $policy->compareByPriorityPreferInstalled($pool, $installedMap, $pool->literalToPackage($a), $pool->literalToPackage($b), $requiredPackage, true); }); } foreach ($packages as &$literals) { $literals = $this->pruneToHighestPriorityOrInstalled($pool, $installedMap, $literals); $literals = $this->pruneToBestVersion($pool, $literals); $literals = $this->pruneRemoteAliases($pool, $literals); } $selected = call_user_func_array('array_merge', $packages); // now sort the result across all packages to respect replaces across packages usort($selected, function ($a, $b) use ($policy, $pool, $installedMap, $requiredPackage) { return $policy->compareByPriorityPreferInstalled($pool, $installedMap, $pool->literalToPackage($a), $pool->literalToPackage($b), $requiredPackage); }); return $selected; } protected function groupLiteralsByNamePreferInstalled(Pool $pool, array $installedMap, $literals) { $packages = array(); foreach ($literals as $literal) { $packageName = $pool->literalToPackage($literal)->getName(); if (!isset($packages[$packageName])) { $packages[$packageName] = array(); } if (isset($installedMap[abs($literal)])) { array_unshift($packages[$packageName], $literal); } else { $packages[$packageName][] = $literal; } } return $packages; } /** * @protected */ public function compareByPriorityPreferInstalled(Pool $pool, array $installedMap, PackageInterface $a, PackageInterface $b, $requiredPackage = null, $ignoreReplace = false) { if ($a->getRepository() === $b->getRepository()) { // prefer aliases to the original package if ($a->getName() === $b->getName()) { $aAliased = $a instanceof AliasPackage; $bAliased = $b instanceof AliasPackage; if ($aAliased && !$bAliased) { return -1; // use a } if (!$aAliased && $bAliased) { return 1; // use b } } if (!$ignoreReplace) { // return original, not replaced if ($this->replaces($a, $b)) { return 1; // use b } if ($this->replaces($b, $a)) { return -1; // use a } // for replacers not replacing each other, put a higher prio on replacing // packages with the same vendor as the required package if ($requiredPackage && false !== ($pos = strpos($requiredPackage, '/'))) { $requiredVendor = substr($requiredPackage, 0, $pos); $aIsSameVendor = substr($a->getName(), 0, $pos) === $requiredVendor; $bIsSameVendor = substr($b->getName(), 0, $pos) === $requiredVendor; if ($bIsSameVendor !== $aIsSameVendor) { return $aIsSameVendor ? -1 : 1; } } } // priority equal, sort by package id to make reproducible if ($a->id === $b->id) { return 0; } return ($a->id < $b->id) ? -1 : 1; } if (isset($installedMap[$a->id])) { return -1; } if (isset($installedMap[$b->id])) { return 1; } return ($this->getPriority($pool, $a) > $this->getPriority($pool, $b)) ? -1 : 1; } /** * Checks if source replaces a package with the same name as target. * * Replace constraints are ignored. This method should only be used for * prioritisation, not for actual constraint verification. * * @param PackageInterface $source * @param PackageInterface $target * @return bool */ protected function replaces(PackageInterface $source, PackageInterface $target) { foreach ($source->getReplaces() as $link) { if ($link->getTarget() === $target->getName() // && (null === $link->getConstraint() || // $link->getConstraint()->matches(new Constraint('==', $target->getVersion())))) { ) { return true; } } return false; } protected function pruneToBestVersion(Pool $pool, $literals) { $operator = $this->preferLowest ? '<' : '>'; $bestLiterals = array($literals[0]); $bestPackage = $pool->literalToPackage($literals[0]); foreach ($literals as $i => $literal) { if (0 === $i) { continue; } $package = $pool->literalToPackage($literal); if ($this->versionCompare($package, $bestPackage, $operator)) { $bestPackage = $package; $bestLiterals = array($literal); } elseif ($this->versionCompare($package, $bestPackage, '==')) { $bestLiterals[] = $literal; } } return $bestLiterals; } /** * Assumes that installed packages come first and then all highest priority packages */ protected function pruneToHighestPriorityOrInstalled(Pool $pool, array $installedMap, array $literals) { $selected = array(); $priority = null; foreach ($literals as $literal) { $package = $pool->literalToPackage($literal); if (isset($installedMap[$package->id])) { $selected[] = $literal; continue; } if (null === $priority) { $priority = $this->getPriority($pool, $package); } if ($this->getPriority($pool, $package) != $priority) { break; } $selected[] = $literal; } return $selected; } /** * Assumes that locally aliased (in root package requires) packages take priority over branch-alias ones * * If no package is a local alias, nothing happens */ protected function pruneRemoteAliases(Pool $pool, array $literals) { $hasLocalAlias = false; foreach ($literals as $literal) { $package = $pool->literalToPackage($literal); if ($package instanceof AliasPackage && $package->isRootPackageAlias()) { $hasLocalAlias = true; break; } } if (!$hasLocalAlias) { return $literals; } $selected = array(); foreach ($literals as $literal) { $package = $pool->literalToPackage($literal); if ($package instanceof AliasPackage && $package->isRootPackageAlias()) { $selected[] = $literal; } } return $selected; } } composer-1.0.0-beta2/src/Composer/DependencyResolver/Operation/000077500000000000000000000000001267577262200244705ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/DependencyResolver/Operation/InstallOperation.php000066400000000000000000000025131267577262200304710ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver\Operation; use Composer\Package\PackageInterface; /** * Solver install operation. * * @author Konstantin Kudryashov */ class InstallOperation extends SolverOperation { protected $package; /** * Initializes operation. * * @param PackageInterface $package package instance * @param string $reason operation reason */ public function __construct(PackageInterface $package, $reason = null) { parent::__construct($reason); $this->package = $package; } /** * Returns package instance. * * @return PackageInterface */ public function getPackage() { return $this->package; } /** * Returns job type. * * @return string */ public function getJobType() { return 'install'; } /** * {@inheritDoc} */ public function __toString() { return 'Installing '.$this->package->getPrettyName().' ('.$this->formatVersion($this->package).')'; } } composer-1.0.0-beta2/src/Composer/DependencyResolver/Operation/MarkAliasInstalledOperation.php000066400000000000000000000027611267577262200325740ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver\Operation; use Composer\Package\AliasPackage; use Composer\Package\PackageInterface; /** * Solver install operation. * * @author Nils Adermann */ class MarkAliasInstalledOperation extends SolverOperation { protected $package; /** * Initializes operation. * * @param AliasPackage $package package instance * @param string $reason operation reason */ public function __construct(AliasPackage $package, $reason = null) { parent::__construct($reason); $this->package = $package; } /** * Returns package instance. * * @return PackageInterface */ public function getPackage() { return $this->package; } /** * Returns job type. * * @return string */ public function getJobType() { return 'markAliasInstalled'; } /** * {@inheritDoc} */ public function __toString() { return 'Marking '.$this->package->getPrettyName().' ('.$this->formatVersion($this->package).') as installed, alias of '.$this->package->getAliasOf()->getPrettyName().' ('.$this->formatVersion($this->package->getAliasOf()).')'; } } composer-1.0.0-beta2/src/Composer/DependencyResolver/Operation/MarkAliasUninstalledOperation.php000066400000000000000000000027671267577262200331450ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver\Operation; use Composer\Package\AliasPackage; use Composer\Package\PackageInterface; /** * Solver install operation. * * @author Nils Adermann */ class MarkAliasUninstalledOperation extends SolverOperation { protected $package; /** * Initializes operation. * * @param AliasPackage $package package instance * @param string $reason operation reason */ public function __construct(AliasPackage $package, $reason = null) { parent::__construct($reason); $this->package = $package; } /** * Returns package instance. * * @return PackageInterface */ public function getPackage() { return $this->package; } /** * Returns job type. * * @return string */ public function getJobType() { return 'markAliasUninstalled'; } /** * {@inheritDoc} */ public function __toString() { return 'Marking '.$this->package->getPrettyName().' ('.$this->formatVersion($this->package).') as uninstalled, alias of '.$this->package->getAliasOf()->getPrettyName().' ('.$this->formatVersion($this->package->getAliasOf()).')'; } } composer-1.0.0-beta2/src/Composer/DependencyResolver/Operation/OperationInterface.php000066400000000000000000000014431267577262200307640ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver\Operation; /** * Solver operation interface. * * @author Konstantin Kudryashov */ interface OperationInterface { /** * Returns job type. * * @return string */ public function getJobType(); /** * Returns operation reason. * * @return string */ public function getReason(); /** * Serializes the operation in a human readable format * * @return string */ public function __toString(); } composer-1.0.0-beta2/src/Composer/DependencyResolver/Operation/SolverOperation.php000066400000000000000000000017741267577262200303450ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver\Operation; use Composer\Package\PackageInterface; /** * Abstract solver operation class. * * @author Konstantin Kudryashov */ abstract class SolverOperation implements OperationInterface { protected $reason; /** * Initializes operation. * * @param string $reason operation reason */ public function __construct($reason = null) { $this->reason = $reason; } /** * Returns operation reason. * * @return string */ public function getReason() { return $this->reason; } protected function formatVersion(PackageInterface $package) { return $package->getFullPrettyVersion(); } } composer-1.0.0-beta2/src/Composer/DependencyResolver/Operation/UninstallOperation.php000066400000000000000000000025231267577262200310350ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver\Operation; use Composer\Package\PackageInterface; /** * Solver uninstall operation. * * @author Konstantin Kudryashov */ class UninstallOperation extends SolverOperation { protected $package; /** * Initializes operation. * * @param PackageInterface $package package instance * @param string $reason operation reason */ public function __construct(PackageInterface $package, $reason = null) { parent::__construct($reason); $this->package = $package; } /** * Returns package instance. * * @return PackageInterface */ public function getPackage() { return $this->package; } /** * Returns job type. * * @return string */ public function getJobType() { return 'uninstall'; } /** * {@inheritDoc} */ public function __toString() { return 'Uninstalling '.$this->package->getPrettyName().' ('.$this->formatVersion($this->package).')'; } } composer-1.0.0-beta2/src/Composer/DependencyResolver/Operation/UpdateOperation.php000066400000000000000000000034571267577262200303150ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver\Operation; use Composer\Package\PackageInterface; /** * Solver update operation. * * @author Konstantin Kudryashov */ class UpdateOperation extends SolverOperation { protected $initialPackage; protected $targetPackage; /** * Initializes update operation. * * @param PackageInterface $initial initial package * @param PackageInterface $target target package (updated) * @param string $reason update reason */ public function __construct(PackageInterface $initial, PackageInterface $target, $reason = null) { parent::__construct($reason); $this->initialPackage = $initial; $this->targetPackage = $target; } /** * Returns initial package. * * @return PackageInterface */ public function getInitialPackage() { return $this->initialPackage; } /** * Returns target package. * * @return PackageInterface */ public function getTargetPackage() { return $this->targetPackage; } /** * Returns job type. * * @return string */ public function getJobType() { return 'update'; } /** * {@inheritDoc} */ public function __toString() { return 'Updating '.$this->initialPackage->getPrettyName().' ('.$this->formatVersion($this->initialPackage).') to '. $this->targetPackage->getPrettyName(). ' ('.$this->formatVersion($this->targetPackage).')'; } } composer-1.0.0-beta2/src/Composer/DependencyResolver/PolicyInterface.php000066400000000000000000000013521267577262200263220ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver; use Composer\Package\PackageInterface; /** * @author Nils Adermann */ interface PolicyInterface { public function versionCompare(PackageInterface $a, PackageInterface $b, $operator); public function findUpdatePackages(Pool $pool, array $installedMap, PackageInterface $package); public function selectPreferredPackages(Pool $pool, array $installedMap, array $literals, $requiredPackage = null); } composer-1.0.0-beta2/src/Composer/DependencyResolver/Pool.php000066400000000000000000000330011267577262200241470ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver; use Composer\Package\BasePackage; use Composer\Package\AliasPackage; use Composer\Package\Version\VersionParser; use Composer\Semver\Constraint\ConstraintInterface; use Composer\Semver\Constraint\Constraint; use Composer\Semver\Constraint\EmptyConstraint; use Composer\Repository\RepositoryInterface; use Composer\Repository\CompositeRepository; use Composer\Repository\ComposerRepository; use Composer\Repository\InstalledRepositoryInterface; use Composer\Repository\PlatformRepository; use Composer\Package\PackageInterface; /** * A package pool contains repositories that provide packages. * * @author Nils Adermann * @author Jordi Boggiano */ class Pool implements \Countable { const MATCH_NAME = -1; const MATCH_NONE = 0; const MATCH = 1; const MATCH_PROVIDE = 2; const MATCH_REPLACE = 3; const MATCH_FILTERED = 4; protected $repositories = array(); protected $providerRepos = array(); protected $packages = array(); protected $packageByName = array(); protected $packageByExactName = array(); protected $acceptableStabilities; protected $stabilityFlags; protected $versionParser; protected $providerCache = array(); protected $filterRequires; protected $whitelist = null; protected $id = 1; public function __construct($minimumStability = 'stable', array $stabilityFlags = array(), array $filterRequires = array()) { $this->versionParser = new VersionParser; $this->acceptableStabilities = array(); foreach (BasePackage::$stabilities as $stability => $value) { if ($value <= BasePackage::$stabilities[$minimumStability]) { $this->acceptableStabilities[$stability] = $value; } } $this->stabilityFlags = $stabilityFlags; $this->filterRequires = $filterRequires; foreach ($filterRequires as $name => $constraint) { if (preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $name)) { unset($this->filterRequires[$name]); } } } public function setWhitelist($whitelist) { $this->whitelist = $whitelist; $this->providerCache = array(); } /** * Adds a repository and its packages to this package pool * * @param RepositoryInterface $repo A package repository * @param array $rootAliases */ public function addRepository(RepositoryInterface $repo, $rootAliases = array()) { if ($repo instanceof CompositeRepository) { $repos = $repo->getRepositories(); } else { $repos = array($repo); } foreach ($repos as $repo) { $this->repositories[] = $repo; $exempt = $repo instanceof PlatformRepository || $repo instanceof InstalledRepositoryInterface; if ($repo instanceof ComposerRepository && $repo->hasProviders()) { $this->providerRepos[] = $repo; $repo->setRootAliases($rootAliases); $repo->resetPackageIds(); } else { foreach ($repo->getPackages() as $package) { $names = $package->getNames(); $stability = $package->getStability(); if ($exempt || $this->isPackageAcceptable($names, $stability)) { $package->setId($this->id++); $this->packages[] = $package; $this->packageByExactName[$package->getName()][$package->id] = $package; foreach ($names as $provided) { $this->packageByName[$provided][] = $package; } // handle root package aliases $name = $package->getName(); if (isset($rootAliases[$name][$package->getVersion()])) { $alias = $rootAliases[$name][$package->getVersion()]; if ($package instanceof AliasPackage) { $package = $package->getAliasOf(); } $aliasPackage = new AliasPackage($package, $alias['alias_normalized'], $alias['alias']); $aliasPackage->setRootPackageAlias(true); $aliasPackage->setId($this->id++); $package->getRepository()->addPackage($aliasPackage); $this->packages[] = $aliasPackage; $this->packageByExactName[$aliasPackage->getName()][$aliasPackage->id] = $aliasPackage; foreach ($aliasPackage->getNames() as $name) { $this->packageByName[$name][] = $aliasPackage; } } } } } } } public function getPriority(RepositoryInterface $repo) { $priority = array_search($repo, $this->repositories, true); if (false === $priority) { throw new \RuntimeException("Could not determine repository priority. The repository was not registered in the pool."); } return -$priority; } /** * Retrieves the package object for a given package id. * * @param int $id * @return PackageInterface */ public function packageById($id) { return $this->packages[$id - 1]; } /** * Returns how many packages have been loaded into the pool */ public function count() { return count($this->packages); } /** * Searches all packages providing the given package name and match the constraint * * @param string $name The package name to be searched for * @param ConstraintInterface $constraint A constraint that all returned * packages must match or null to return all * @param bool $mustMatchName Whether the name of returned packages * must match the given name * @return PackageInterface[] A set of packages */ public function whatProvides($name, ConstraintInterface $constraint = null, $mustMatchName = false) { $key = ((int) $mustMatchName).$constraint; if (isset($this->providerCache[$name][$key])) { return $this->providerCache[$name][$key]; } return $this->providerCache[$name][$key] = $this->computeWhatProvides($name, $constraint, $mustMatchName); } /** * @see whatProvides */ private function computeWhatProvides($name, $constraint, $mustMatchName = false) { $candidates = array(); foreach ($this->providerRepos as $repo) { foreach ($repo->whatProvides($this, $name) as $candidate) { $candidates[] = $candidate; if ($candidate->id < 1) { $candidate->setId($this->id++); $this->packages[$this->id - 2] = $candidate; } } } if ($mustMatchName) { $candidates = array_filter($candidates, function ($candidate) use ($name) { return $candidate->getName() == $name; }); if (isset($this->packageByExactName[$name])) { $candidates = array_merge($candidates, $this->packageByExactName[$name]); } } elseif (isset($this->packageByName[$name])) { $candidates = array_merge($candidates, $this->packageByName[$name]); } $matches = $provideMatches = array(); $nameMatch = false; foreach ($candidates as $candidate) { $aliasOfCandidate = null; // alias packages are not white listed, make sure that the package // being aliased is white listed if ($candidate instanceof AliasPackage) { $aliasOfCandidate = $candidate->getAliasOf(); } if ($this->whitelist !== null && ( (!($candidate instanceof AliasPackage) && !isset($this->whitelist[$candidate->id])) || ($candidate instanceof AliasPackage && !isset($this->whitelist[$aliasOfCandidate->id])) )) { continue; } switch ($this->match($candidate, $name, $constraint)) { case self::MATCH_NONE: break; case self::MATCH_NAME: $nameMatch = true; break; case self::MATCH: $nameMatch = true; $matches[] = $candidate; break; case self::MATCH_PROVIDE: $provideMatches[] = $candidate; break; case self::MATCH_REPLACE: $matches[] = $candidate; break; case self::MATCH_FILTERED: break; default: throw new \UnexpectedValueException('Unexpected match type'); } } // if a package with the required name exists, we ignore providers if ($nameMatch) { return $matches; } return array_merge($matches, $provideMatches); } public function literalToPackage($literal) { $packageId = abs($literal); return $this->packageById($packageId); } public function literalToPrettyString($literal, $installedMap) { $package = $this->literalToPackage($literal); if (isset($installedMap[$package->id])) { $prefix = ($literal > 0 ? 'keep' : 'remove'); } else { $prefix = ($literal > 0 ? 'install' : 'don\'t install'); } return $prefix.' '.$package->getPrettyString(); } public function isPackageAcceptable($name, $stability) { foreach ((array) $name as $n) { // allow if package matches the global stability requirement and has no exception if (!isset($this->stabilityFlags[$n]) && isset($this->acceptableStabilities[$stability])) { return true; } // allow if package matches the package-specific stability flag if (isset($this->stabilityFlags[$n]) && BasePackage::$stabilities[$stability] <= $this->stabilityFlags[$n]) { return true; } } return false; } /** * Checks if the package matches the given constraint directly or through * provided or replaced packages * * @param array|PackageInterface $candidate * @param string $name Name of the package to be matched * @param ConstraintInterface $constraint The constraint to verify * @return int One of the MATCH* constants of this class or 0 if there is no match */ private function match($candidate, $name, ConstraintInterface $constraint = null) { $candidateName = $candidate->getName(); $candidateVersion = $candidate->getVersion(); $isDev = $candidate->getStability() === 'dev'; $isAlias = $candidate instanceof AliasPackage; if (!$isDev && !$isAlias && isset($this->filterRequires[$name])) { $requireFilter = $this->filterRequires[$name]; } else { $requireFilter = new EmptyConstraint; } if ($candidateName === $name) { $pkgConstraint = new Constraint('==', $candidateVersion); if ($constraint === null || $constraint->matches($pkgConstraint)) { return $requireFilter->matches($pkgConstraint) ? self::MATCH : self::MATCH_FILTERED; } return self::MATCH_NAME; } $provides = $candidate->getProvides(); $replaces = $candidate->getReplaces(); // aliases create multiple replaces/provides for one target so they can not use the shortcut below if (isset($replaces[0]) || isset($provides[0])) { foreach ($provides as $link) { if ($link->getTarget() === $name && ($constraint === null || $constraint->matches($link->getConstraint()))) { return $requireFilter->matches($link->getConstraint()) ? self::MATCH_PROVIDE : self::MATCH_FILTERED; } } foreach ($replaces as $link) { if ($link->getTarget() === $name && ($constraint === null || $constraint->matches($link->getConstraint()))) { return $requireFilter->matches($link->getConstraint()) ? self::MATCH_REPLACE : self::MATCH_FILTERED; } } return self::MATCH_NONE; } if (isset($provides[$name]) && ($constraint === null || $constraint->matches($provides[$name]->getConstraint()))) { return $requireFilter->matches($provides[$name]->getConstraint()) ? self::MATCH_PROVIDE : self::MATCH_FILTERED; } if (isset($replaces[$name]) && ($constraint === null || $constraint->matches($replaces[$name]->getConstraint()))) { return $requireFilter->matches($replaces[$name]->getConstraint()) ? self::MATCH_REPLACE : self::MATCH_FILTERED; } return self::MATCH_NONE; } } composer-1.0.0-beta2/src/Composer/DependencyResolver/Problem.php000066400000000000000000000203161267577262200246430ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver; /** * Represents a problem detected while solving dependencies * * @author Nils Adermann */ class Problem { /** * A map containing the id of each rule part of this problem as a key * @var array */ protected $reasonSeen; /** * A set of reasons for the problem, each is a rule or a job and a rule * @var array */ protected $reasons = array(); protected $section = 0; protected $pool; public function __construct(Pool $pool) { $this->pool = $pool; } /** * Add a rule as a reason * * @param Rule $rule A rule which is a reason for this problem */ public function addRule(Rule $rule) { $this->addReason(spl_object_hash($rule), array( 'rule' => $rule, 'job' => $rule->getJob(), )); } /** * Retrieve all reasons for this problem * * @return array The problem's reasons */ public function getReasons() { return $this->reasons; } /** * A human readable textual representation of the problem's reasons * * @param array $installedMap A map of all installed packages * @return string */ public function getPrettyString(array $installedMap = array()) { $reasons = call_user_func_array('array_merge', array_reverse($this->reasons)); if (count($reasons) === 1) { reset($reasons); $reason = current($reasons); $rule = $reason['rule']; $job = $reason['job']; if (isset($job['constraint'])) { $packages = $this->pool->whatProvides($job['packageName'], $job['constraint']); } else { $packages = array(); } if ($job && $job['cmd'] === 'install' && empty($packages)) { // handle php/hhvm if ($job['packageName'] === 'php' || $job['packageName'] === 'php-64bit' || $job['packageName'] === 'hhvm') { $available = $this->pool->whatProvides($job['packageName']); $version = count($available) ? $available[0]->getPrettyVersion() : phpversion(); $msg = "\n - This package requires ".$job['packageName'].$this->constraintToText($job['constraint']).' but '; if (defined('HHVM_VERSION')) { return $msg . 'your HHVM version does not satisfy that requirement.'; } elseif ($job['packageName'] === 'hhvm') { return $msg . 'you are running this with PHP and not HHVM.'; } return $msg . 'your PHP version ('. $version .') does not satisfy that requirement.'; } // handle php extensions if (0 === stripos($job['packageName'], 'ext-')) { $ext = substr($job['packageName'], 4); $error = extension_loaded($ext) ? 'has the wrong version ('.(phpversion($ext) ?: '0').') installed' : 'is missing from your system'; return "\n - The requested PHP extension ".$job['packageName'].$this->constraintToText($job['constraint']).' '.$error.'. Install or enable PHP\'s '.$ext.' extension.'; } // handle linked libs if (0 === stripos($job['packageName'], 'lib-')) { if (strtolower($job['packageName']) === 'lib-icu') { $error = extension_loaded('intl') ? 'has the wrong version installed, try upgrading the intl extension.' : 'is missing from your system, make sure the intl extension is loaded.'; return "\n - The requested linked library ".$job['packageName'].$this->constraintToText($job['constraint']).' '.$error; } return "\n - The requested linked library ".$job['packageName'].$this->constraintToText($job['constraint']).' has the wrong version installed or is missing from your system, make sure to load the extension providing it.'; } if (!preg_match('{^[A-Za-z0-9_./-]+$}', $job['packageName'])) { $illegalChars = preg_replace('{[A-Za-z0-9_./-]+}', '', $job['packageName']); return "\n - The requested package ".$job['packageName'].' could not be found, it looks like its name is invalid, "'.$illegalChars.'" is not allowed in package names.'; } if (!$this->pool->whatProvides($job['packageName'])) { return "\n - The requested package ".$job['packageName'].' could not be found in any version, there may be a typo in the package name.'; } return "\n - The requested package ".$job['packageName'].$this->constraintToText($job['constraint']).' could not be found.'; } } $messages = array(); foreach ($reasons as $reason) { $rule = $reason['rule']; $job = $reason['job']; if ($job) { $messages[] = $this->jobToText($job); } elseif ($rule) { if ($rule instanceof Rule) { $messages[] = $rule->getPrettyString($this->pool, $installedMap); } } } return "\n - ".implode("\n - ", $messages); } /** * Store a reason descriptor but ignore duplicates * * @param string $id A canonical identifier for the reason * @param string $reason The reason descriptor */ protected function addReason($id, $reason) { if (!isset($this->reasonSeen[$id])) { $this->reasonSeen[$id] = true; $this->reasons[$this->section][] = $reason; } } public function nextSection() { $this->section++; } /** * Turns a job into a human readable description * * @param array $job * @return string */ protected function jobToText($job) { switch ($job['cmd']) { case 'install': $packages = $this->pool->whatProvides($job['packageName'], $job['constraint']); if (!$packages) { return 'No package found to satisfy install request for '.$job['packageName'].$this->constraintToText($job['constraint']); } return 'Installation request for '.$job['packageName'].$this->constraintToText($job['constraint']).' -> satisfiable by '.$this->getPackageList($packages).'.'; case 'update': return 'Update request for '.$job['packageName'].$this->constraintToText($job['constraint']).'.'; case 'remove': return 'Removal request for '.$job['packageName'].$this->constraintToText($job['constraint']).''; } if (isset($job['constraint'])) { $packages = $this->pool->whatProvides($job['packageName'], $job['constraint']); } else { $packages = array(); } return 'Job(cmd='.$job['cmd'].', target='.$job['packageName'].', packages=['.$this->getPackageList($packages).'])'; } protected function getPackageList($packages) { $prepared = array(); foreach ($packages as $package) { $prepared[$package->getName()]['name'] = $package->getPrettyName(); $prepared[$package->getName()]['versions'][$package->getVersion()] = $package->getPrettyVersion(); } foreach ($prepared as $name => $package) { $prepared[$name] = $package['name'].'['.implode(', ', $package['versions']).']'; } return implode(', ', $prepared); } /** * Turns a constraint into text usable in a sentence describing a job * * @param \Composer\Semver\Constraint\ConstraintInterface $constraint * @return string */ protected function constraintToText($constraint) { return ($constraint) ? ' '.$constraint->getPrettyString() : ''; } } composer-1.0.0-beta2/src/Composer/DependencyResolver/Request.php000066400000000000000000000034631267577262200246770ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver; use Composer\Semver\Constraint\ConstraintInterface; /** * @author Nils Adermann */ class Request { protected $jobs; public function __construct() { $this->jobs = array(); } public function install($packageName, ConstraintInterface $constraint = null) { $this->addJob($packageName, 'install', $constraint); } public function update($packageName, ConstraintInterface $constraint = null) { $this->addJob($packageName, 'update', $constraint); } public function remove($packageName, ConstraintInterface $constraint = null) { $this->addJob($packageName, 'remove', $constraint); } /** * Mark an existing package as being installed and having to remain installed * * These jobs will not be tempered with by the solver */ public function fix($packageName, ConstraintInterface $constraint = null) { $this->addJob($packageName, 'install', $constraint, true); } protected function addJob($packageName, $cmd, ConstraintInterface $constraint = null, $fixed = false) { $packageName = strtolower($packageName); $this->jobs[] = array( 'cmd' => $cmd, 'packageName' => $packageName, 'constraint' => $constraint, 'fixed' => $fixed, ); } public function updateAll() { $this->jobs[] = array('cmd' => 'update-all'); } public function getJobs() { return $this->jobs; } } composer-1.0.0-beta2/src/Composer/DependencyResolver/Rule.php000066400000000000000000000230541267577262200241540ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver; use Composer\Package\CompletePackage; /** * @author Nils Adermann */ class Rule { const RULE_INTERNAL_ALLOW_UPDATE = 1; const RULE_JOB_INSTALL = 2; const RULE_JOB_REMOVE = 3; const RULE_PACKAGE_CONFLICT = 6; const RULE_PACKAGE_REQUIRES = 7; const RULE_PACKAGE_OBSOLETES = 8; const RULE_INSTALLED_PACKAGE_OBSOLETES = 9; const RULE_PACKAGE_SAME_NAME = 10; const RULE_PACKAGE_IMPLICIT_OBSOLETES = 11; const RULE_LEARNED = 12; const RULE_PACKAGE_ALIAS = 13; const BITFIELD_TYPE = 0; const BITFIELD_REASON = 8; const BITFIELD_DISABLED = 16; /** * READ-ONLY: The literals this rule consists of. * @var array */ public $literals; protected $bitfield; protected $reasonData; public function __construct(array $literals, $reason, $reasonData, $job = null) { // sort all packages ascending by id sort($literals); $this->literals = $literals; $this->reasonData = $reasonData; if ($job) { $this->job = $job; } $this->bitfield = (0 << self::BITFIELD_DISABLED) | ($reason << self::BITFIELD_REASON) | (255 << self::BITFIELD_TYPE); } public function getHash() { $data = unpack('ihash', md5(implode(',', $this->literals), true)); return $data['hash']; } public function getJob() { return isset($this->job) ? $this->job : null; } public function getReason() { return ($this->bitfield & (255 << self::BITFIELD_REASON)) >> self::BITFIELD_REASON; } public function getReasonData() { return $this->reasonData; } public function getRequiredPackage() { if ($this->getReason() === self::RULE_JOB_INSTALL) { return $this->reasonData; } if ($this->getReason() === self::RULE_PACKAGE_REQUIRES) { return $this->reasonData->getTarget(); } } /** * Checks if this rule is equal to another one * * Ignores whether either of the rules is disabled. * * @param Rule $rule The rule to check against * @return bool Whether the rules are equal */ public function equals(Rule $rule) { if (count($this->literals) != count($rule->literals)) { return false; } for ($i = 0, $n = count($this->literals); $i < $n; $i++) { if ($this->literals[$i] !== $rule->literals[$i]) { return false; } } return true; } public function setType($type) { $this->bitfield = ($this->bitfield & ~(255 << self::BITFIELD_TYPE)) | ((255 & $type) << self::BITFIELD_TYPE); } public function getType() { return ($this->bitfield & (255 << self::BITFIELD_TYPE)) >> self::BITFIELD_TYPE; } public function disable() { $this->bitfield = ($this->bitfield & ~(255 << self::BITFIELD_DISABLED)) | (1 << self::BITFIELD_DISABLED); } public function enable() { $this->bitfield = $this->bitfield & ~(255 << self::BITFIELD_DISABLED); } public function isDisabled() { return (bool) (($this->bitfield & (255 << self::BITFIELD_DISABLED)) >> self::BITFIELD_DISABLED); } public function isEnabled() { return !(($this->bitfield & (255 << self::BITFIELD_DISABLED)) >> self::BITFIELD_DISABLED); } public function isAssertion() { return 1 === count($this->literals); } public function getPrettyString(Pool $pool, array $installedMap = array()) { $ruleText = ''; foreach ($this->literals as $i => $literal) { if ($i != 0) { $ruleText .= '|'; } $ruleText .= $pool->literalToPrettyString($literal, $installedMap); } switch ($this->getReason()) { case self::RULE_INTERNAL_ALLOW_UPDATE: return $ruleText; case self::RULE_JOB_INSTALL: return "Install command rule ($ruleText)"; case self::RULE_JOB_REMOVE: return "Remove command rule ($ruleText)"; case self::RULE_PACKAGE_CONFLICT: $package1 = $pool->literalToPackage($this->literals[0]); $package2 = $pool->literalToPackage($this->literals[1]); return $package1->getPrettyString().' conflicts with '.$this->formatPackagesUnique($pool, array($package2)).'.'; case self::RULE_PACKAGE_REQUIRES: $literals = $this->literals; $sourceLiteral = array_shift($literals); $sourcePackage = $pool->literalToPackage($sourceLiteral); $requires = array(); foreach ($literals as $literal) { $requires[] = $pool->literalToPackage($literal); } $text = $this->reasonData->getPrettyString($sourcePackage); if ($requires) { $text .= ' -> satisfiable by ' . $this->formatPackagesUnique($pool, $requires) . '.'; } else { $targetName = $this->reasonData->getTarget(); if ($targetName === 'php' || $targetName === 'php-64bit' || $targetName === 'hhvm') { // handle php/hhvm if (defined('HHVM_VERSION')) { return $text . ' -> your HHVM version does not satisfy that requirement.'; } elseif ($targetName === 'hhvm') { return $text . ' -> you are running this with PHP and not HHVM.'; } else { $packages = $pool->whatProvides($targetName); $package = count($packages) ? current($packages) : phpversion(); if (!($package instanceof CompletePackage)) { return $text . ' -> your PHP version ('.phpversion().') does not satisfy that requirement.'; } $extra = $package->getExtra(); if (!empty($extra['config.platform'])) { $text .= ' -> your PHP version ('.phpversion().') overriden by "config.platform.php" version ('.$package->getPrettyVersion().') does not satisfy that requirement.'; } else { $text .= ' -> your PHP version ('.$package->getPrettyVersion().') does not satisfy that requirement.'; } return $text; } } elseif (0 === strpos($targetName, 'ext-')) { // handle php extensions $ext = substr($targetName, 4); $error = extension_loaded($ext) ? 'has the wrong version ('.(phpversion($ext) ?: '0').') installed' : 'is missing from your system'; return $text . ' -> the requested PHP extension '.$ext.' '.$error.'.'; } elseif (0 === strpos($targetName, 'lib-')) { // handle linked libs $lib = substr($targetName, 4); return $text . ' -> the requested linked library '.$lib.' has the wrong version installed or is missing from your system, make sure to have the extension providing it.'; } else { return $text . ' -> no matching package found.'; } } return $text; case self::RULE_PACKAGE_OBSOLETES: return $ruleText; case self::RULE_INSTALLED_PACKAGE_OBSOLETES: return $ruleText; case self::RULE_PACKAGE_SAME_NAME: return 'Can only install one of: ' . $this->formatPackagesUnique($pool, $this->literals) . '.'; case self::RULE_PACKAGE_IMPLICIT_OBSOLETES: return $ruleText; case self::RULE_LEARNED: return 'Conclusion: '.$ruleText; case self::RULE_PACKAGE_ALIAS: return $ruleText; default: return '('.$ruleText.')'; } } protected function formatPackagesUnique($pool, array $packages) { $prepared = array(); foreach ($packages as $package) { if (!is_object($package)) { $package = $pool->literalToPackage($package); } $prepared[$package->getName()]['name'] = $package->getPrettyName(); $prepared[$package->getName()]['versions'][$package->getVersion()] = $package->getPrettyVersion(); } foreach ($prepared as $name => $package) { $prepared[$name] = $package['name'].'['.implode(', ', $package['versions']).']'; } return implode(', ', $prepared); } /** * Formats a rule as a string of the format (Literal1|Literal2|...) * * @return string */ public function __toString() { $result = ($this->isDisabled()) ? 'disabled(' : '('; foreach ($this->literals as $i => $literal) { if ($i != 0) { $result .= '|'; } $result .= $literal; } $result .= ')'; return $result; } } composer-1.0.0-beta2/src/Composer/DependencyResolver/RuleSet.php000066400000000000000000000073651267577262200246370ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver; /** * @author Nils Adermann */ class RuleSet implements \IteratorAggregate, \Countable { // highest priority => lowest number const TYPE_PACKAGE = 0; const TYPE_JOB = 1; const TYPE_LEARNED = 4; /** * READ-ONLY: Lookup table for rule id to rule object * * @var Rule[] */ public $ruleById; protected static $types = array( 255 => 'UNKNOWN', self::TYPE_PACKAGE => 'PACKAGE', self::TYPE_JOB => 'JOB', self::TYPE_LEARNED => 'LEARNED', ); protected $rules; protected $nextRuleId; protected $rulesByHash; public function __construct() { $this->nextRuleId = 0; foreach ($this->getTypes() as $type) { $this->rules[$type] = array(); } $this->rulesByHash = array(); } public function add(Rule $rule, $type) { if (!isset(self::$types[$type])) { throw new \OutOfBoundsException('Unknown rule type: ' . $type); } if (!isset($this->rules[$type])) { $this->rules[$type] = array(); } $this->rules[$type][] = $rule; $this->ruleById[$this->nextRuleId] = $rule; $rule->setType($type); $this->nextRuleId++; $hash = $rule->getHash(); if (!isset($this->rulesByHash[$hash])) { $this->rulesByHash[$hash] = array($rule); } else { $this->rulesByHash[$hash][] = $rule; } } public function count() { return $this->nextRuleId; } public function ruleById($id) { return $this->ruleById[$id]; } public function getRules() { return $this->rules; } public function getIterator() { return new RuleSetIterator($this->getRules()); } public function getIteratorFor($types) { if (!is_array($types)) { $types = array($types); } $allRules = $this->getRules(); $rules = array(); foreach ($types as $type) { $rules[$type] = $allRules[$type]; } return new RuleSetIterator($rules); } public function getIteratorWithout($types) { if (!is_array($types)) { $types = array($types); } $rules = $this->getRules(); foreach ($types as $type) { unset($rules[$type]); } return new RuleSetIterator($rules); } public function getTypes() { $types = self::$types; unset($types[255]); return array_keys($types); } public function containsEqual($rule) { if (isset($this->rulesByHash[$rule->getHash()])) { $potentialDuplicates = $this->rulesByHash[$rule->getHash()]; foreach ($potentialDuplicates as $potentialDuplicate) { if ($rule->equals($potentialDuplicate)) { return true; } } } return false; } public function getPrettyString(Pool $pool = null) { $string = "\n"; foreach ($this->rules as $type => $rules) { $string .= str_pad(self::$types[$type], 8, ' ') . ": "; foreach ($rules as $rule) { $string .= ($pool ? $rule->getPrettyString($pool) : $rule)."\n"; } $string .= "\n\n"; } return $string; } public function __toString() { return $this->getPrettyString(null); } } composer-1.0.0-beta2/src/Composer/DependencyResolver/RuleSetGenerator.php000066400000000000000000000306621267577262200265020ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver; use Composer\Package\PackageInterface; use Composer\Package\AliasPackage; use Composer\Repository\PlatformRepository; /** * @author Nils Adermann */ class RuleSetGenerator { protected $policy; protected $pool; protected $rules; protected $jobs; protected $installedMap; protected $whitelistedMap; protected $addedMap; public function __construct(PolicyInterface $policy, Pool $pool) { $this->policy = $policy; $this->pool = $pool; } /** * Creates a new rule for the requirements of a package * * This rule is of the form (-A|B|C), where B and C are the providers of * one requirement of the package A. * * @param PackageInterface $package The package with a requirement * @param array $providers The providers of the requirement * @param int $reason A RULE_* constant describing the * reason for generating this rule * @param mixed $reasonData Any data, e.g. the requirement name, * that goes with the reason * @return Rule The generated rule or null if tautological */ protected function createRequireRule(PackageInterface $package, array $providers, $reason, $reasonData = null) { $literals = array(-$package->id); foreach ($providers as $provider) { // self fulfilling rule? if ($provider === $package) { return null; } $literals[] = $provider->id; } return new Rule($literals, $reason, $reasonData); } /** * Creates a rule to install at least one of a set of packages * * The rule is (A|B|C) with A, B and C different packages. If the given * set of packages is empty an impossible rule is generated. * * @param array $packages The set of packages to choose from * @param int $reason A RULE_* constant describing the reason for * generating this rule * @param array $job The job this rule was created from * @return Rule The generated rule */ protected function createInstallOneOfRule(array $packages, $reason, $job) { $literals = array(); foreach ($packages as $package) { $literals[] = $package->id; } return new Rule($literals, $reason, $job['packageName'], $job); } /** * Creates a rule to remove a package * * The rule for a package A is (-A). * * @param PackageInterface $package The package to be removed * @param int $reason A RULE_* constant describing the * reason for generating this rule * @param array $job The job this rule was created from * @return Rule The generated rule */ protected function createRemoveRule(PackageInterface $package, $reason, $job) { return new Rule(array(-$package->id), $reason, $job['packageName'], $job); } /** * Creates a rule for two conflicting packages * * The rule for conflicting packages A and B is (-A|-B). A is called the issuer * and B the provider. * * @param PackageInterface $issuer The package declaring the conflict * @param PackageInterface $provider The package causing the conflict * @param int $reason A RULE_* constant describing the * reason for generating this rule * @param mixed $reasonData Any data, e.g. the package name, that * goes with the reason * @return Rule The generated rule */ protected function createConflictRule(PackageInterface $issuer, PackageInterface $provider, $reason, $reasonData = null) { // ignore self conflict if ($issuer === $provider) { return null; } return new Rule(array(-$issuer->id, -$provider->id), $reason, $reasonData); } /** * Adds a rule unless it duplicates an existing one of any type * * To be able to directly pass in the result of one of the rule creation * methods null is allowed which will not insert a rule. * * @param int $type A TYPE_* constant defining the rule type * @param Rule $newRule The rule about to be added */ private function addRule($type, Rule $newRule = null) { if (!$newRule || $this->rules->containsEqual($newRule)) { return; } $this->rules->add($newRule, $type); } protected function whitelistFromPackage(PackageInterface $package) { $workQueue = new \SplQueue; $workQueue->enqueue($package); while (!$workQueue->isEmpty()) { $package = $workQueue->dequeue(); if (isset($this->whitelistedMap[$package->id])) { continue; } $this->whitelistedMap[$package->id] = true; foreach ($package->getRequires() as $link) { $possibleRequires = $this->pool->whatProvides($link->getTarget(), $link->getConstraint(), true); foreach ($possibleRequires as $require) { $workQueue->enqueue($require); } } $obsoleteProviders = $this->pool->whatProvides($package->getName(), null, true); foreach ($obsoleteProviders as $provider) { if ($provider === $package) { continue; } if (($package instanceof AliasPackage) && $package->getAliasOf() === $provider) { $workQueue->enqueue($provider); } } } } protected function addRulesForPackage(PackageInterface $package, $ignorePlatformReqs) { $workQueue = new \SplQueue; $workQueue->enqueue($package); while (!$workQueue->isEmpty()) { $package = $workQueue->dequeue(); if (isset($this->addedMap[$package->id])) { continue; } $this->addedMap[$package->id] = true; foreach ($package->getRequires() as $link) { if ($ignorePlatformReqs && preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $link->getTarget())) { continue; } $possibleRequires = $this->pool->whatProvides($link->getTarget(), $link->getConstraint()); $this->addRule(RuleSet::TYPE_PACKAGE, $rule = $this->createRequireRule($package, $possibleRequires, Rule::RULE_PACKAGE_REQUIRES, $link)); foreach ($possibleRequires as $require) { $workQueue->enqueue($require); } } foreach ($package->getConflicts() as $link) { $possibleConflicts = $this->pool->whatProvides($link->getTarget(), $link->getConstraint()); foreach ($possibleConflicts as $conflict) { $this->addRule(RuleSet::TYPE_PACKAGE, $this->createConflictRule($package, $conflict, Rule::RULE_PACKAGE_CONFLICT, $link)); } } // check obsoletes and implicit obsoletes of a package $isInstalled = (isset($this->installedMap[$package->id])); foreach ($package->getReplaces() as $link) { $obsoleteProviders = $this->pool->whatProvides($link->getTarget(), $link->getConstraint()); foreach ($obsoleteProviders as $provider) { if ($provider === $package) { continue; } if (!$this->obsoleteImpossibleForAlias($package, $provider)) { $reason = ($isInstalled) ? Rule::RULE_INSTALLED_PACKAGE_OBSOLETES : Rule::RULE_PACKAGE_OBSOLETES; $this->addRule(RuleSet::TYPE_PACKAGE, $this->createConflictRule($package, $provider, $reason, $link)); } } } $obsoleteProviders = $this->pool->whatProvides($package->getName(), null); foreach ($obsoleteProviders as $provider) { if ($provider === $package) { continue; } if (($package instanceof AliasPackage) && $package->getAliasOf() === $provider) { $this->addRule(RuleSet::TYPE_PACKAGE, $rule = $this->createRequireRule($package, array($provider), Rule::RULE_PACKAGE_ALIAS, $package)); } elseif (!$this->obsoleteImpossibleForAlias($package, $provider)) { $reason = ($package->getName() == $provider->getName()) ? Rule::RULE_PACKAGE_SAME_NAME : Rule::RULE_PACKAGE_IMPLICIT_OBSOLETES; $this->addRule(RuleSet::TYPE_PACKAGE, $rule = $this->createConflictRule($package, $provider, $reason, $package)); } } } } protected function obsoleteImpossibleForAlias($package, $provider) { $packageIsAlias = $package instanceof AliasPackage; $providerIsAlias = $provider instanceof AliasPackage; $impossible = ( ($packageIsAlias && $package->getAliasOf() === $provider) || ($providerIsAlias && $provider->getAliasOf() === $package) || ($packageIsAlias && $providerIsAlias && $provider->getAliasOf() === $package->getAliasOf()) ); return $impossible; } protected function whitelistFromJobs() { foreach ($this->jobs as $job) { switch ($job['cmd']) { case 'install': $packages = $this->pool->whatProvides($job['packageName'], $job['constraint'], true); foreach ($packages as $package) { $this->whitelistFromPackage($package); } break; } } } protected function addRulesForJobs($ignorePlatformReqs) { foreach ($this->jobs as $job) { switch ($job['cmd']) { case 'install': if (!$job['fixed'] && $ignorePlatformReqs && preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $job['packageName'])) { continue; } $packages = $this->pool->whatProvides($job['packageName'], $job['constraint']); if ($packages) { foreach ($packages as $package) { if (!isset($this->installedMap[$package->id])) { $this->addRulesForPackage($package, $ignorePlatformReqs); } } $rule = $this->createInstallOneOfRule($packages, Rule::RULE_JOB_INSTALL, $job); $this->addRule(RuleSet::TYPE_JOB, $rule); } break; case 'remove': // remove all packages with this name including uninstalled // ones to make sure none of them are picked as replacements $packages = $this->pool->whatProvides($job['packageName'], $job['constraint']); foreach ($packages as $package) { $rule = $this->createRemoveRule($package, Rule::RULE_JOB_REMOVE, $job); $this->addRule(RuleSet::TYPE_JOB, $rule); } break; } } } public function getRulesFor($jobs, $installedMap, $ignorePlatformReqs = false) { $this->jobs = $jobs; $this->rules = new RuleSet; $this->installedMap = $installedMap; $this->whitelistedMap = array(); foreach ($this->installedMap as $package) { $this->whitelistFromPackage($package); } $this->whitelistFromJobs(); $this->pool->setWhitelist($this->whitelistedMap); $this->addedMap = array(); foreach ($this->installedMap as $package) { $this->addRulesForPackage($package, $ignorePlatformReqs); } $this->addRulesForJobs($ignorePlatformReqs); return $this->rules; } } composer-1.0.0-beta2/src/Composer/DependencyResolver/RuleSetIterator.php000066400000000000000000000044401267577262200263400ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver; /** * @author Nils Adermann */ class RuleSetIterator implements \Iterator { protected $rules; protected $types; protected $currentOffset; protected $currentType; protected $currentTypeOffset; public function __construct(array $rules) { $this->rules = $rules; $this->types = array_keys($rules); sort($this->types); $this->rewind(); } public function current() { return $this->rules[$this->currentType][$this->currentOffset]; } public function key() { return $this->currentType; } public function next() { $this->currentOffset++; if (!isset($this->rules[$this->currentType])) { return; } if ($this->currentOffset >= sizeof($this->rules[$this->currentType])) { $this->currentOffset = 0; do { $this->currentTypeOffset++; if (!isset($this->types[$this->currentTypeOffset])) { $this->currentType = -1; break; } $this->currentType = $this->types[$this->currentTypeOffset]; } while (isset($this->types[$this->currentTypeOffset]) && !sizeof($this->rules[$this->currentType])); } } public function rewind() { $this->currentOffset = 0; $this->currentTypeOffset = -1; $this->currentType = -1; do { $this->currentTypeOffset++; if (!isset($this->types[$this->currentTypeOffset])) { $this->currentType = -1; break; } $this->currentType = $this->types[$this->currentTypeOffset]; } while (isset($this->types[$this->currentTypeOffset]) && !sizeof($this->rules[$this->currentType])); } public function valid() { return isset($this->rules[$this->currentType]) && isset($this->rules[$this->currentType][$this->currentOffset]); } } composer-1.0.0-beta2/src/Composer/DependencyResolver/RuleWatchChain.php000066400000000000000000000025721267577262200261100ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver; /** * An extension of SplDoublyLinkedList with seek and removal of current element * * SplDoublyLinkedList only allows deleting a particular offset and has no * method to set the internal iterator to a particular offset. * * @author Nils Adermann */ class RuleWatchChain extends \SplDoublyLinkedList { protected $offset = 0; /** * Moves the internal iterator to the specified offset * * @param int $offset The offset to seek to. */ public function seek($offset) { $this->rewind(); for ($i = 0; $i < $offset; $i++, $this->next()); } /** * Removes the current element from the list * * As SplDoublyLinkedList only allows deleting a particular offset and * incorrectly sets the internal iterator if you delete the current value * this method sets the internal iterator back to the following element * using the seek method. */ public function remove() { $offset = $this->key(); $this->offsetUnset($offset); $this->seek($offset); } } composer-1.0.0-beta2/src/Composer/DependencyResolver/RuleWatchGraph.php000066400000000000000000000123101267577262200261160ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver; /** * The RuleWatchGraph efficiently propagates decisions to other rules * * All rules generated for solving a SAT problem should be inserted into the * graph. When a decision on a literal is made, the graph can be used to * propagate the decision to all other rules involving the literal, leading to * other trivial decisions resulting from unit clauses. * * @author Nils Adermann */ class RuleWatchGraph { protected $watchChains = array(); /** * Inserts a rule node into the appropriate chains within the graph * * The node is prepended to the watch chains for each of the two literals it * watches. * * Assertions are skipped because they only depend on a single package and * have no alternative literal that could be true, so there is no need to * watch changes in any literals. * * @param RuleWatchNode $node The rule node to be inserted into the graph */ public function insert(RuleWatchNode $node) { if ($node->getRule()->isAssertion()) { return; } foreach (array($node->watch1, $node->watch2) as $literal) { if (!isset($this->watchChains[$literal])) { $this->watchChains[$literal] = new RuleWatchChain; } $this->watchChains[$literal]->unshift($node); } } /** * Propagates a decision on a literal to all rules watching the literal * * If a decision, e.g. +A has been made, then all rules containing -A, e.g. * (-A|+B|+C) now need to satisfy at least one of the other literals, so * that the rule as a whole becomes true, since with +A applied the rule * is now (false|+B|+C) so essentially (+B|+C). * * This means that all rules watching the literal -A need to be updated to * watch 2 other literals which can still be satisfied instead. So literals * that conflict with previously made decisions are not an option. * * Alternatively it can occur that a unit clause results: e.g. if in the * above example the rule was (-A|+B), then A turning true means that * B must now be decided true as well. * * @param int $decidedLiteral The literal which was decided (A in our example) * @param int $level The level at which the decision took place and at which * all resulting decisions should be made. * @param Decisions $decisions Used to check previous decisions and to * register decisions resulting from propagation * @return Rule|null If a conflict is found the conflicting rule is returned */ public function propagateLiteral($decidedLiteral, $level, $decisions) { // we invert the decided literal here, example: // A was decided => (-A|B) now requires B to be true, so we look for // rules which are fulfilled by -A, rather than A. $literal = -$decidedLiteral; if (!isset($this->watchChains[$literal])) { return null; } $chain = $this->watchChains[$literal]; $chain->rewind(); while ($chain->valid()) { $node = $chain->current(); $otherWatch = $node->getOtherWatch($literal); if (!$node->getRule()->isDisabled() && !$decisions->satisfy($otherWatch)) { $ruleLiterals = $node->getRule()->literals; $alternativeLiterals = array_filter($ruleLiterals, function ($ruleLiteral) use ($literal, $otherWatch, $decisions) { return $literal !== $ruleLiteral && $otherWatch !== $ruleLiteral && !$decisions->conflict($ruleLiteral); }); if ($alternativeLiterals) { reset($alternativeLiterals); $this->moveWatch($literal, current($alternativeLiterals), $node); continue; } if ($decisions->conflict($otherWatch)) { return $node->getRule(); } $decisions->decide($otherWatch, $level, $node->getRule()); } $chain->next(); } return null; } /** * Moves a rule node from one watch chain to another * * The rule node's watched literals are updated accordingly. * * @param $fromLiteral mixed A literal the node used to watch * @param $toLiteral mixed A literal the node should watch now * @param $node mixed The rule node to be moved */ protected function moveWatch($fromLiteral, $toLiteral, $node) { if (!isset($this->watchChains[$toLiteral])) { $this->watchChains[$toLiteral] = new RuleWatchChain; } $node->moveWatch($fromLiteral, $toLiteral); $this->watchChains[$fromLiteral]->remove(); $this->watchChains[$toLiteral]->unshift($node); } } composer-1.0.0-beta2/src/Composer/DependencyResolver/RuleWatchNode.php000066400000000000000000000053021267577262200257450ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver; /** * Wrapper around a Rule which keeps track of the two literals it watches * * Used by RuleWatchGraph to store rules in two RuleWatchChains. * * @author Nils Adermann */ class RuleWatchNode { public $watch1; public $watch2; protected $rule; /** * Creates a new node watching the first and second literals of the rule. * * @param Rule $rule The rule to wrap */ public function __construct($rule) { $this->rule = $rule; $literals = $rule->literals; $this->watch1 = count($literals) > 0 ? $literals[0] : 0; $this->watch2 = count($literals) > 1 ? $literals[1] : 0; } /** * Places the second watch on the rule's literal, decided at the highest level * * Useful for learned rules where the literal for the highest rule is most * likely to quickly lead to further decisions. * * @param Decisions $decisions The decisions made so far by the solver */ public function watch2OnHighest(Decisions $decisions) { $literals = $this->rule->literals; // if there are only 2 elements, both are being watched anyway if (count($literals) < 3) { return; } $watchLevel = 0; foreach ($literals as $literal) { $level = $decisions->decisionLevel($literal); if ($level > $watchLevel) { $this->watch2 = $literal; $watchLevel = $level; } } } /** * Returns the rule this node wraps * * @return Rule */ public function getRule() { return $this->rule; } /** * Given one watched literal, this method returns the other watched literal * * @param int $literal The watched literal that should not be returned * @return int A literal */ public function getOtherWatch($literal) { if ($this->watch1 == $literal) { return $this->watch2; } else { return $this->watch1; } } /** * Moves a watch from one literal to another * * @param int $from The previously watched literal * @param int $to The literal to be watched now */ public function moveWatch($from, $to) { if ($this->watch1 == $from) { $this->watch1 = $to; } else { $this->watch2 = $to; } } } composer-1.0.0-beta2/src/Composer/DependencyResolver/Solver.php000066400000000000000000000640251267577262200245220ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver; use Composer\IO\IOInterface; use Composer\Repository\RepositoryInterface; use Composer\Repository\PlatformRepository; /** * @author Nils Adermann */ class Solver { const BRANCH_LITERALS = 0; const BRANCH_LEVEL = 1; /** @var PolicyInterface */ protected $policy; /** @var Pool */ protected $pool; /** @var RepositoryInterface */ protected $installed; /** @var Ruleset */ protected $rules; /** @var RuleSetGenerator */ protected $ruleSetGenerator; /** @var array */ protected $jobs; /** @var int[] */ protected $updateMap = array(); /** @var RuleWatchGraph */ protected $watchGraph; /** @var Decisions */ protected $decisions; /** @var int[] */ protected $installedMap; /** @var int */ protected $propagateIndex; /** @var array[] */ protected $branches = array(); /** @var Problem[] */ protected $problems = array(); /** @var array */ protected $learnedPool = array(); /** @var array */ protected $learnedWhy = array(); /** @var IOInterface */ protected $io; /** * @param PolicyInterface $policy * @param Pool $pool * @param RepositoryInterface $installed * @param IOInterface $io */ public function __construct(PolicyInterface $policy, Pool $pool, RepositoryInterface $installed, IOInterface $io) { $this->io = $io; $this->policy = $policy; $this->pool = $pool; $this->installed = $installed; $this->ruleSetGenerator = new RuleSetGenerator($policy, $pool); } /** * @return int */ public function getRuleSetSize() { return count($this->rules); } // aka solver_makeruledecisions private function makeAssertionRuleDecisions() { $decisionStart = count($this->decisions) - 1; $rulesCount = count($this->rules); for ($ruleIndex = 0; $ruleIndex < $rulesCount; $ruleIndex++) { $rule = $this->rules->ruleById[$ruleIndex]; if (!$rule->isAssertion() || $rule->isDisabled()) { continue; } $literals = $rule->literals; $literal = $literals[0]; if (!$this->decisions->decided(abs($literal))) { $this->decisions->decide($literal, 1, $rule); continue; } if ($this->decisions->satisfy($literal)) { continue; } // found a conflict if (RuleSet::TYPE_LEARNED === $rule->getType()) { $rule->disable(); continue; } $conflict = $this->decisions->decisionRule($literal); if ($conflict && RuleSet::TYPE_PACKAGE === $conflict->getType()) { $problem = new Problem($this->pool); $problem->addRule($rule); $problem->addRule($conflict); $this->disableProblem($rule); $this->problems[] = $problem; continue; } // conflict with another job $problem = new Problem($this->pool); $problem->addRule($rule); $problem->addRule($conflict); // push all of our rules (can only be job rules) // asserting this literal on the problem stack foreach ($this->rules->getIteratorFor(RuleSet::TYPE_JOB) as $assertRule) { if ($assertRule->isDisabled() || !$assertRule->isAssertion()) { continue; } $assertRuleLiterals = $assertRule->literals; $assertRuleLiteral = $assertRuleLiterals[0]; if (abs($literal) !== abs($assertRuleLiteral)) { continue; } $problem->addRule($assertRule); $this->disableProblem($assertRule); } $this->problems[] = $problem; $this->decisions->resetToOffset($decisionStart); $ruleIndex = -1; } } protected function setupInstalledMap() { $this->installedMap = array(); foreach ($this->installed->getPackages() as $package) { $this->installedMap[$package->id] = $package; } } /** * @param bool $ignorePlatformReqs */ protected function checkForRootRequireProblems($ignorePlatformReqs) { foreach ($this->jobs as $job) { switch ($job['cmd']) { case 'update': $packages = $this->pool->whatProvides($job['packageName'], $job['constraint']); foreach ($packages as $package) { if (isset($this->installedMap[$package->id])) { $this->updateMap[$package->id] = true; } } break; case 'update-all': foreach ($this->installedMap as $package) { $this->updateMap[$package->id] = true; } break; case 'install': if ($ignorePlatformReqs && preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $job['packageName'])) { break; } if (!$this->pool->whatProvides($job['packageName'], $job['constraint'])) { $problem = new Problem($this->pool); $problem->addRule(new Rule(array(), null, null, $job)); $this->problems[] = $problem; } break; } } } /** * @param Request $request * @param bool $ignorePlatformReqs * @return array */ public function solve(Request $request, $ignorePlatformReqs = false) { $this->jobs = $request->getJobs(); $this->setupInstalledMap(); $this->rules = $this->ruleSetGenerator->getRulesFor($this->jobs, $this->installedMap, $ignorePlatformReqs); $this->checkForRootRequireProblems($ignorePlatformReqs); $this->decisions = new Decisions($this->pool); $this->watchGraph = new RuleWatchGraph; foreach ($this->rules as $rule) { $this->watchGraph->insert(new RuleWatchNode($rule)); } /* make decisions based on job/update assertions */ $this->makeAssertionRuleDecisions(); $this->io->writeError('Resolving dependencies through SAT', true, IOInterface::DEBUG); $before = microtime(true); $this->runSat(true); $this->io->writeError(sprintf('Dependency resolution completed in %.3f seconds', microtime(true) - $before), true, IOInterface::VERBOSE); // decide to remove everything that's installed and undecided foreach ($this->installedMap as $packageId => $void) { if ($this->decisions->undecided($packageId)) { $this->decisions->decide(-$packageId, 1, null); } } if ($this->problems) { throw new SolverProblemsException($this->problems, $this->installedMap); } $transaction = new Transaction($this->policy, $this->pool, $this->installedMap, $this->decisions); return $transaction->getOperations(); } /** * Makes a decision and propagates it to all rules. * * Evaluates each term affected by the decision (linked through watches) * If we find unit rules we make new decisions based on them * * @param int $level * @return Rule|null A rule on conflict, otherwise null. */ protected function propagate($level) { while ($this->decisions->validOffset($this->propagateIndex)) { $decision = $this->decisions->atOffset($this->propagateIndex); $conflict = $this->watchGraph->propagateLiteral( $decision[Decisions::DECISION_LITERAL], $level, $this->decisions ); $this->propagateIndex++; if ($conflict) { return $conflict; } } return null; } /** * Reverts a decision at the given level. * * @param int $level */ private function revert($level) { while (!$this->decisions->isEmpty()) { $literal = $this->decisions->lastLiteral(); if ($this->decisions->undecided($literal)) { break; } $decisionLevel = $this->decisions->decisionLevel($literal); if ($decisionLevel <= $level) { break; } $this->decisions->revertLast(); $this->propagateIndex = count($this->decisions); } while (!empty($this->branches) && $this->branches[count($this->branches) - 1][self::BRANCH_LEVEL] >= $level) { array_pop($this->branches); } } /** * setpropagatelearn * * add free decision (a positive literal) to decision queue * increase level and propagate decision * return if no conflict. * * in conflict case, analyze conflict rule, add resulting * rule to learnt rule set, make decision from learnt * rule (always unit) and re-propagate. * * returns the new solver level or 0 if unsolvable * * @param int $level * @param string|int $literal * @param bool $disableRules * @param Rule $rule * @return int */ private function setPropagateLearn($level, $literal, $disableRules, Rule $rule) { $level++; $this->decisions->decide($literal, $level, $rule); while (true) { $rule = $this->propagate($level); if (!$rule) { break; } if ($level == 1) { return $this->analyzeUnsolvable($rule, $disableRules); } // conflict list($learnLiteral, $newLevel, $newRule, $why) = $this->analyze($level, $rule); if ($newLevel <= 0 || $newLevel >= $level) { throw new SolverBugException( "Trying to revert to invalid level ".(int) $newLevel." from level ".(int) $level."." ); } elseif (!$newRule) { throw new SolverBugException( "No rule was learned from analyzing $rule at level $level." ); } $level = $newLevel; $this->revert($level); $this->rules->add($newRule, RuleSet::TYPE_LEARNED); $this->learnedWhy[spl_object_hash($newRule)] = $why; $ruleNode = new RuleWatchNode($newRule); $ruleNode->watch2OnHighest($this->decisions); $this->watchGraph->insert($ruleNode); $this->decisions->decide($learnLiteral, $level, $newRule); } return $level; } /** * @param int $level * @param array $decisionQueue * @param bool $disableRules * @param Rule $rule * @return int */ private function selectAndInstall($level, array $decisionQueue, $disableRules, Rule $rule) { // choose best package to install from decisionQueue $literals = $this->policy->selectPreferredPackages($this->pool, $this->installedMap, $decisionQueue, $rule->getRequiredPackage()); $selectedLiteral = array_shift($literals); // if there are multiple candidates, then branch if (count($literals)) { $this->branches[] = array($literals, $level); } return $this->setPropagateLearn($level, $selectedLiteral, $disableRules, $rule); } /** * @param int $level * @param Rule $rule * @return array */ protected function analyze($level, Rule $rule) { $analyzedRule = $rule; $ruleLevel = 1; $num = 0; $l1num = 0; $seen = array(); $learnedLiterals = array(null); $decisionId = count($this->decisions); $this->learnedPool[] = array(); while (true) { $this->learnedPool[count($this->learnedPool) - 1][] = $rule; foreach ($rule->literals as $literal) { // skip the one true literal if ($this->decisions->satisfy($literal)) { continue; } if (isset($seen[abs($literal)])) { continue; } $seen[abs($literal)] = true; $l = $this->decisions->decisionLevel($literal); if (1 === $l) { $l1num++; } elseif ($level === $l) { $num++; } else { // not level1 or conflict level, add to new rule $learnedLiterals[] = $literal; if ($l > $ruleLevel) { $ruleLevel = $l; } } } $l1retry = true; while ($l1retry) { $l1retry = false; if (!$num && !--$l1num) { // all level 1 literals done break 2; } while (true) { if ($decisionId <= 0) { throw new SolverBugException( "Reached invalid decision id $decisionId while looking through $rule for a literal present in the analyzed rule $analyzedRule." ); } $decisionId--; $decision = $this->decisions->atOffset($decisionId); $literal = $decision[Decisions::DECISION_LITERAL]; if (isset($seen[abs($literal)])) { break; } } unset($seen[abs($literal)]); if ($num && 0 === --$num) { $learnedLiterals[0] = -abs($literal); if (!$l1num) { break 2; } foreach ($learnedLiterals as $i => $learnedLiteral) { if ($i !== 0) { unset($seen[abs($learnedLiteral)]); } } // only level 1 marks left $l1num++; $l1retry = true; } } $decision = $this->decisions->atOffset($decisionId); $rule = $decision[Decisions::DECISION_REASON]; } $why = count($this->learnedPool) - 1; if (!$learnedLiterals[0]) { throw new SolverBugException( "Did not find a learnable literal in analyzed rule $analyzedRule." ); } $newRule = new Rule($learnedLiterals, Rule::RULE_LEARNED, $why); return array($learnedLiterals[0], $ruleLevel, $newRule, $why); } /** * @param Problem $problem * @param Rule $conflictRule */ private function analyzeUnsolvableRule(Problem $problem, Rule $conflictRule) { $why = spl_object_hash($conflictRule); if ($conflictRule->getType() == RuleSet::TYPE_LEARNED) { $learnedWhy = $this->learnedWhy[$why]; $problemRules = $this->learnedPool[$learnedWhy]; foreach ($problemRules as $problemRule) { $this->analyzeUnsolvableRule($problem, $problemRule); } return; } if ($conflictRule->getType() == RuleSet::TYPE_PACKAGE) { // package rules cannot be part of a problem return; } $problem->nextSection(); $problem->addRule($conflictRule); } /** * @param Rule $conflictRule * @param bool $disableRules * @return int */ private function analyzeUnsolvable(Rule $conflictRule, $disableRules) { $problem = new Problem($this->pool); $problem->addRule($conflictRule); $this->analyzeUnsolvableRule($problem, $conflictRule); $this->problems[] = $problem; $seen = array(); $literals = $conflictRule->literals; foreach ($literals as $literal) { // skip the one true literal if ($this->decisions->satisfy($literal)) { continue; } $seen[abs($literal)] = true; } foreach ($this->decisions as $decision) { $literal = $decision[Decisions::DECISION_LITERAL]; // skip literals that are not in this rule if (!isset($seen[abs($literal)])) { continue; } $why = $decision[Decisions::DECISION_REASON]; $problem->addRule($why); $this->analyzeUnsolvableRule($problem, $why); $literals = $why->literals; foreach ($literals as $literal) { // skip the one true literal if ($this->decisions->satisfy($literal)) { continue; } $seen[abs($literal)] = true; } } if ($disableRules) { foreach ($this->problems[count($this->problems) - 1] as $reason) { $this->disableProblem($reason['rule']); } $this->resetSolver(); return 1; } return 0; } /** * @param Rule $why */ private function disableProblem(Rule $why) { $job = $why->getJob(); if (!$job) { $why->disable(); return; } // disable all rules of this job foreach ($this->rules as $rule) { /** @var Rule $rule */ if ($job === $rule->getJob()) { $rule->disable(); } } } private function resetSolver() { $this->decisions->reset(); $this->propagateIndex = 0; $this->branches = array(); $this->enableDisableLearnedRules(); $this->makeAssertionRuleDecisions(); } /** * enable/disable learnt rules * * we have enabled or disabled some of our rules. We now re-enable all * of our learnt rules except the ones that were learnt from rules that * are now disabled. */ private function enableDisableLearnedRules() { foreach ($this->rules->getIteratorFor(RuleSet::TYPE_LEARNED) as $rule) { $why = $this->learnedWhy[spl_object_hash($rule)]; $problemRules = $this->learnedPool[$why]; $foundDisabled = false; foreach ($problemRules as $problemRule) { if ($problemRule->isDisabled()) { $foundDisabled = true; break; } } if ($foundDisabled && $rule->isEnabled()) { $rule->disable(); } elseif (!$foundDisabled && $rule->isDisabled()) { $rule->enable(); } } } /** * @param bool $disableRules */ private function runSat($disableRules = true) { $this->propagateIndex = 0; /* * here's the main loop: * 1) propagate new decisions (only needed once) * 2) fulfill jobs * 3) fulfill all unresolved rules * 4) minimalize solution if we had choices * if we encounter a problem, we rewind to a safe level and restart * with step 1 */ $decisionQueue = array(); $decisionSupplementQueue = array(); /** * @todo this makes $disableRules always false; determine the rationale and possibly remove dead code? */ $disableRules = array(); $level = 1; $systemLevel = $level + 1; $installedPos = 0; while (true) { if (1 === $level) { $conflictRule = $this->propagate($level); if (null !== $conflictRule) { if ($this->analyzeUnsolvable($conflictRule, $disableRules)) { continue; } return; } } // handle job rules if ($level < $systemLevel) { $iterator = $this->rules->getIteratorFor(RuleSet::TYPE_JOB); foreach ($iterator as $rule) { if ($rule->isEnabled()) { $decisionQueue = array(); $noneSatisfied = true; foreach ($rule->literals as $literal) { if ($this->decisions->satisfy($literal)) { $noneSatisfied = false; break; } if ($literal > 0 && $this->decisions->undecided($literal)) { $decisionQueue[] = $literal; } } if ($noneSatisfied && count($decisionQueue)) { // prune all update packages until installed version // except for requested updates if (count($this->installed) != count($this->updateMap)) { $prunedQueue = array(); foreach ($decisionQueue as $literal) { if (isset($this->installedMap[abs($literal)])) { $prunedQueue[] = $literal; if (isset($this->updateMap[abs($literal)])) { $prunedQueue = $decisionQueue; break; } } } $decisionQueue = $prunedQueue; } } if ($noneSatisfied && count($decisionQueue)) { $oLevel = $level; $level = $this->selectAndInstall($level, $decisionQueue, $disableRules, $rule); if (0 === $level) { return; } if ($level <= $oLevel) { break; } } } } $systemLevel = $level + 1; // jobs left $iterator->next(); if ($iterator->valid()) { continue; } } if ($level < $systemLevel) { $systemLevel = $level; } for ($i = 0, $n = 0; $n < count($this->rules); $i++, $n++) { if ($i == count($this->rules)) { $i = 0; } $rule = $this->rules->ruleById[$i]; $literals = $rule->literals; if ($rule->isDisabled()) { continue; } $decisionQueue = array(); // make sure that // * all negative literals are installed // * no positive literal is installed // i.e. the rule is not fulfilled and we // just need to decide on the positive literals // foreach ($literals as $literal) { if ($literal <= 0) { if (!$this->decisions->decidedInstall(abs($literal))) { continue 2; // next rule } } else { if ($this->decisions->decidedInstall(abs($literal))) { continue 2; // next rule } if ($this->decisions->undecided(abs($literal))) { $decisionQueue[] = $literal; } } } // need to have at least 2 item to pick from if (count($decisionQueue) < 2) { continue; } $level = $this->selectAndInstall($level, $decisionQueue, $disableRules, $rule); if (0 === $level) { return; } // something changed, so look at all rules again $n = -1; } if ($level < $systemLevel) { continue; } // minimization step if (count($this->branches)) { $lastLiteral = null; $lastLevel = null; $lastBranchIndex = 0; $lastBranchOffset = 0; for ($i = count($this->branches) - 1; $i >= 0; $i--) { list($literals, $l) = $this->branches[$i]; foreach ($literals as $offset => $literal) { if ($literal && $literal > 0 && $this->decisions->decisionLevel($literal) > $l + 1) { $lastLiteral = $literal; $lastBranchIndex = $i; $lastBranchOffset = $offset; $lastLevel = $l; } } } if ($lastLiteral) { unset($this->branches[$lastBranchIndex][self::BRANCH_LITERALS][$lastBranchOffset]); $level = $lastLevel; $this->revert($level); $why = $this->decisions->lastReason(); $level = $this->setPropagateLearn($level, $lastLiteral, $disableRules, $why); if ($level == 0) { return; } continue; } } break; } } } composer-1.0.0-beta2/src/Composer/DependencyResolver/SolverBugException.php000066400000000000000000000013651267577262200270350ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver; /** * @author Nils Adermann */ class SolverBugException extends \RuntimeException { public function __construct($message) { parent::__construct( $message."\nThis exception was most likely caused by a bug in Composer.\n". "Please report the command you ran, the exact error you received, and your composer.json on https://github.com/composer/composer/issues - thank you!\n"); } } composer-1.0.0-beta2/src/Composer/DependencyResolver/SolverProblemsException.php000066400000000000000000000055441267577262200301060ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver; /** * @author Nils Adermann */ class SolverProblemsException extends \RuntimeException { protected $problems; protected $installedMap; public function __construct(array $problems, array $installedMap) { $this->problems = $problems; $this->installedMap = $installedMap; parent::__construct($this->createMessage(), 2); } protected function createMessage() { $text = "\n"; $hasExtensionProblems = false; foreach ($this->problems as $i => $problem) { $text .= " Problem ".($i + 1).$problem->getPrettyString($this->installedMap)."\n"; if (!$hasExtensionProblems && $this->hasExtensionProblems($problem->getReasons())) { $hasExtensionProblems = true; } } if (strpos($text, 'could not be found') || strpos($text, 'no matching package found')) { $text .= "\nPotential causes:\n - A typo in the package name\n - The package is not available in a stable-enough version according to your minimum-stability setting\n see for more details.\n\nRead for further common problems."; } if ($hasExtensionProblems) { $text .= $this->createExtensionHint(); } return $text; } public function getProblems() { return $this->problems; } private function createExtensionHint() { $paths = array(); if (($iniPath = php_ini_loaded_file()) !== false) { $paths[] = $iniPath; } if (!defined('HHVM_VERSION') && $additionalIniPaths = php_ini_scanned_files()) { $paths = array_merge($paths, array_map("trim", explode(",", $additionalIniPaths))); } if (count($paths) === 0) { return ''; } $text = "\n To enable extensions, verify that they are enabled in those .ini files:\n - "; $text .= implode("\n - ", $paths); $text .= "\n You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode."; return $text; } private function hasExtensionProblems(array $reasonSets) { foreach ($reasonSets as $reasonSet) { foreach ($reasonSet as $reason) { if (isset($reason["rule"]) && 0 === strpos($reason["rule"]->getRequiredPackage(), 'ext-')) { return true; } } } return false; } } composer-1.0.0-beta2/src/Composer/DependencyResolver/Transaction.php000066400000000000000000000170751267577262200255400ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\DependencyResolver; use Composer\Package\AliasPackage; /** * @author Nils Adermann */ class Transaction { protected $policy; protected $pool; protected $installedMap; protected $decisions; protected $transaction; public function __construct($policy, $pool, $installedMap, $decisions) { $this->policy = $policy; $this->pool = $pool; $this->installedMap = $installedMap; $this->decisions = $decisions; $this->transaction = array(); } public function getOperations() { $installMeansUpdateMap = $this->findUpdates(); $updateMap = array(); $installMap = array(); $uninstallMap = array(); foreach ($this->decisions as $i => $decision) { $literal = $decision[Decisions::DECISION_LITERAL]; $reason = $decision[Decisions::DECISION_REASON]; $package = $this->pool->literalToPackage($literal); // wanted & installed || !wanted & !installed if (($literal > 0) == (isset($this->installedMap[$package->id]))) { continue; } if ($literal > 0) { if (isset($installMeansUpdateMap[abs($literal)]) && !$package instanceof AliasPackage) { $source = $installMeansUpdateMap[abs($literal)]; $updateMap[$package->id] = array( 'package' => $package, 'source' => $source, 'reason' => $reason, ); // avoid updates to one package from multiple origins unset($installMeansUpdateMap[abs($literal)]); $ignoreRemove[$source->id] = true; } else { $installMap[$package->id] = array( 'package' => $package, 'reason' => $reason, ); } } } foreach ($this->decisions as $i => $decision) { $literal = $decision[Decisions::DECISION_LITERAL]; $reason = $decision[Decisions::DECISION_REASON]; $package = $this->pool->literalToPackage($literal); if ($literal <= 0 && isset($this->installedMap[$package->id]) && !isset($ignoreRemove[$package->id])) { $uninstallMap[$package->id] = array( 'package' => $package, 'reason' => $reason, ); } } $this->transactionFromMaps($installMap, $updateMap, $uninstallMap); return $this->transaction; } protected function transactionFromMaps($installMap, $updateMap, $uninstallMap) { $queue = array_map(function ($operation) { return $operation['package']; }, $this->findRootPackages($installMap, $updateMap) ); $visited = array(); while (!empty($queue)) { $package = array_pop($queue); $packageId = $package->id; if (!isset($visited[$packageId])) { array_push($queue, $package); if ($package instanceof AliasPackage) { array_push($queue, $package->getAliasOf()); } else { foreach ($package->getRequires() as $link) { $possibleRequires = $this->pool->whatProvides($link->getTarget(), $link->getConstraint()); foreach ($possibleRequires as $require) { array_push($queue, $require); } } } $visited[$package->id] = true; } else { if (isset($installMap[$packageId])) { $this->install( $installMap[$packageId]['package'], $installMap[$packageId]['reason'] ); unset($installMap[$packageId]); } if (isset($updateMap[$packageId])) { $this->update( $updateMap[$packageId]['source'], $updateMap[$packageId]['package'], $updateMap[$packageId]['reason'] ); unset($updateMap[$packageId]); } } } foreach ($uninstallMap as $uninstall) { $this->uninstall($uninstall['package'], $uninstall['reason']); } } protected function findRootPackages($installMap, $updateMap) { $packages = $installMap + $updateMap; $roots = $packages; foreach ($packages as $packageId => $operation) { $package = $operation['package']; if (!isset($roots[$packageId])) { continue; } foreach ($package->getRequires() as $link) { $possibleRequires = $this->pool->whatProvides($link->getTarget(), $link->getConstraint()); foreach ($possibleRequires as $require) { if ($require !== $package) { unset($roots[$require->id]); } } } } return $roots; } protected function findUpdates() { $installMeansUpdateMap = array(); foreach ($this->decisions as $i => $decision) { $literal = $decision[Decisions::DECISION_LITERAL]; $package = $this->pool->literalToPackage($literal); if ($package instanceof AliasPackage) { continue; } // !wanted & installed if ($literal <= 0 && isset($this->installedMap[$package->id])) { $updates = $this->policy->findUpdatePackages($this->pool, $this->installedMap, $package); $literals = array($package->id); foreach ($updates as $update) { $literals[] = $update->id; } foreach ($literals as $updateLiteral) { if ($updateLiteral !== $literal) { $installMeansUpdateMap[abs($updateLiteral)] = $package; } } } } return $installMeansUpdateMap; } protected function install($package, $reason) { if ($package instanceof AliasPackage) { return $this->markAliasInstalled($package, $reason); } $this->transaction[] = new Operation\InstallOperation($package, $reason); } protected function update($from, $to, $reason) { $this->transaction[] = new Operation\UpdateOperation($from, $to, $reason); } protected function uninstall($package, $reason) { if ($package instanceof AliasPackage) { return $this->markAliasUninstalled($package, $reason); } $this->transaction[] = new Operation\UninstallOperation($package, $reason); } protected function markAliasInstalled($package, $reason) { $this->transaction[] = new Operation\MarkAliasInstalledOperation($package, $reason); } protected function markAliasUninstalled($package, $reason) { $this->transaction[] = new Operation\MarkAliasUninstalledOperation($package, $reason); } } composer-1.0.0-beta2/src/Composer/Downloader/000077500000000000000000000000001267577262200210265ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/Downloader/ArchiveDownloader.php000066400000000000000000000142131267577262200251400ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Downloader; use Composer\Package\PackageInterface; use Symfony\Component\Finder\Finder; use Composer\IO\IOInterface; /** * Base downloader for archives * * @author Kirill chEbba Chebunin * @author Jordi Boggiano * @author François Pluchino */ abstract class ArchiveDownloader extends FileDownloader { /** * {@inheritDoc} */ public function download(PackageInterface $package, $path) { $temporaryDir = $this->config->get('vendor-dir').'/composer/'.substr(md5(uniqid('', true)), 0, 8); $retries = 3; while ($retries--) { $fileName = parent::download($package, $path); $this->io->writeError(' Extracting archive', true, IOInterface::VERBOSE); try { $this->filesystem->ensureDirectoryExists($temporaryDir); try { $this->extract($fileName, $temporaryDir); } catch (\Exception $e) { // remove cache if the file was corrupted parent::clearLastCacheWrite($package); throw $e; } $this->filesystem->unlink($fileName); $contentDir = $this->getFolderContent($temporaryDir); // only one dir in the archive, extract its contents out of it if (1 === count($contentDir) && is_dir(reset($contentDir))) { $contentDir = $this->getFolderContent((string) reset($contentDir)); } // move files back out of the temp dir foreach ($contentDir as $file) { $file = (string) $file; $this->filesystem->rename($file, $path . '/' . basename($file)); } $this->filesystem->removeDirectory($temporaryDir); if ($this->filesystem->isDirEmpty($this->config->get('vendor-dir').'/composer/')) { $this->filesystem->removeDirectory($this->config->get('vendor-dir').'/composer/'); } if ($this->filesystem->isDirEmpty($this->config->get('vendor-dir'))) { $this->filesystem->removeDirectory($this->config->get('vendor-dir')); } } catch (\Exception $e) { // clean up $this->filesystem->removeDirectory($path); $this->filesystem->removeDirectory($temporaryDir); // retry downloading if we have an invalid zip file if ($retries && $e instanceof \UnexpectedValueException && class_exists('ZipArchive') && $e->getCode() === \ZipArchive::ER_NOZIP) { if ($this->io->isDebug()) { $this->io->writeError(' Invalid zip file ('.$e->getMessage().'), retrying...'); } else { $this->io->writeError(' Invalid zip file, retrying...'); } usleep(500000); continue; } throw $e; } break; } $this->io->writeError(''); } /** * {@inheritdoc} */ protected function getFileName(PackageInterface $package, $path) { return rtrim($path.'/'.md5($path.spl_object_hash($package)).'.'.pathinfo(parse_url($package->getDistUrl(), PHP_URL_PATH), PATHINFO_EXTENSION), '.'); } /** * {@inheritdoc} */ protected function processUrl(PackageInterface $package, $url) { if ($package->getDistReference() && strpos($url, 'github.com')) { if (preg_match('{^https?://(?:www\.)?github\.com/([^/]+)/([^/]+)/(zip|tar)ball/(.+)$}i', $url, $match)) { // update legacy github archives to API calls with the proper reference $url = 'https://api.github.com/repos/' . $match[1] . '/'. $match[2] . '/' . $match[3] . 'ball/' . $package->getDistReference(); } elseif ($package->getDistReference() && preg_match('{^https?://(?:www\.)?github\.com/([^/]+)/([^/]+)/archive/.+\.(zip|tar)(?:\.gz)?$}i', $url, $match)) { // update current github web archives to API calls with the proper reference $url = 'https://api.github.com/repos/' . $match[1] . '/'. $match[2] . '/' . $match[3] . 'ball/' . $package->getDistReference(); } elseif ($package->getDistReference() && preg_match('{^https?://api\.github\.com/repos/([^/]+)/([^/]+)/(zip|tar)ball(?:/.+)?$}i', $url, $match)) { // update api archives to the proper reference $url = 'https://api.github.com/repos/' . $match[1] . '/'. $match[2] . '/' . $match[3] . 'ball/' . $package->getDistReference(); } } elseif ($package->getDistReference() && strpos($url, 'bitbucket.org')) { if (preg_match('{^https?://(?:www\.)?bitbucket\.org/([^/]+)/([^/]+)/get/(.+)\.(zip|tar\.gz|tar\.bz2)$}i', $url, $match)) { // update Bitbucket archives to the proper reference $url = 'https://bitbucket.org/' . $match[1] . '/'. $match[2] . '/get/' . $package->getDistReference() . '.' . $match[4]; } } return parent::processUrl($package, $url); } /** * Extract file to directory * * @param string $file Extracted file * @param string $path Directory * * @throws \UnexpectedValueException If can not extract downloaded file to path */ abstract protected function extract($file, $path); /** * Returns the folder content, excluding dotfiles * * @param string $dir Directory * @return \SplFileInfo[] */ private function getFolderContent($dir) { $finder = Finder::create() ->ignoreVCS(false) ->ignoreDotFiles(false) ->depth(0) ->in($dir); return iterator_to_array($finder); } } composer-1.0.0-beta2/src/Composer/Downloader/ChangeReportInterface.php000066400000000000000000000013761267577262200257500ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Downloader; use Composer\Package\PackageInterface; /** * ChangeReport interface. * * @author Sascha Egerer */ interface ChangeReportInterface { /** * Checks for changes to the local copy * * @param PackageInterface $package package instance * @param string $path package directory * @return string|null changes or null */ public function getLocalChanges(PackageInterface $package, $path); } composer-1.0.0-beta2/src/Composer/Downloader/DownloadManager.php000066400000000000000000000244301267577262200246040ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Downloader; use Composer\Package\PackageInterface; use Composer\IO\IOInterface; use Composer\Util\Filesystem; /** * Downloaders manager. * * @author Konstantin Kudryashov */ class DownloadManager { private $io; private $preferDist = false; private $preferSource = false; private $packagePreferences = array(); private $filesystem; private $downloaders = array(); /** * Initializes download manager. * * @param IOInterface $io The Input Output Interface * @param bool $preferSource prefer downloading from source * @param Filesystem|null $filesystem custom Filesystem object */ public function __construct(IOInterface $io, $preferSource = false, Filesystem $filesystem = null) { $this->io = $io; $this->preferSource = $preferSource; $this->filesystem = $filesystem ?: new Filesystem(); } /** * Makes downloader prefer source installation over the dist. * * @param bool $preferSource prefer downloading from source * @return DownloadManager */ public function setPreferSource($preferSource) { $this->preferSource = $preferSource; return $this; } /** * Makes downloader prefer dist installation over the source. * * @param bool $preferDist prefer downloading from dist * @return DownloadManager */ public function setPreferDist($preferDist) { $this->preferDist = $preferDist; return $this; } /** * Sets fine tuned preference settings for package level source/dist selection. * * @param array $preferences array of preferences by package patterns * @return DownloadManager */ public function setPreferences(array $preferences) { $this->packagePreferences = $preferences; return $this; } /** * Sets whether to output download progress information for all registered * downloaders * * @param bool $outputProgress * @return DownloadManager */ public function setOutputProgress($outputProgress) { foreach ($this->downloaders as $downloader) { $downloader->setOutputProgress($outputProgress); } return $this; } /** * Sets installer downloader for a specific installation type. * * @param string $type installation type * @param DownloaderInterface $downloader downloader instance * @return DownloadManager */ public function setDownloader($type, DownloaderInterface $downloader) { $type = strtolower($type); $this->downloaders[$type] = $downloader; return $this; } /** * Returns downloader for a specific installation type. * * @param string $type installation type * @throws \InvalidArgumentException if downloader for provided type is not registered * @return DownloaderInterface */ public function getDownloader($type) { $type = strtolower($type); if (!isset($this->downloaders[$type])) { throw new \InvalidArgumentException(sprintf('Unknown downloader type: %s. Available types: %s.', $type, implode(', ', array_keys($this->downloaders)))); } return $this->downloaders[$type]; } /** * Returns downloader for already installed package. * * @param PackageInterface $package package instance * @throws \InvalidArgumentException if package has no installation source specified * @throws \LogicException if specific downloader used to load package with * wrong type * @return DownloaderInterface|null */ public function getDownloaderForInstalledPackage(PackageInterface $package) { $installationSource = $package->getInstallationSource(); if ('metapackage' === $package->getType()) { return; } if ('dist' === $installationSource) { $downloader = $this->getDownloader($package->getDistType()); } elseif ('source' === $installationSource) { $downloader = $this->getDownloader($package->getSourceType()); } else { throw new \InvalidArgumentException( 'Package '.$package.' seems not been installed properly' ); } if ($installationSource !== $downloader->getInstallationSource()) { throw new \LogicException(sprintf( 'Downloader "%s" is a %s type downloader and can not be used to download %s', get_class($downloader), $downloader->getInstallationSource(), $installationSource )); } return $downloader; } /** * Downloads package into target dir. * * @param PackageInterface $package package instance * @param string $targetDir target dir * @param bool $preferSource prefer installation from source * * @throws \InvalidArgumentException if package have no urls to download from * @throws \RuntimeException */ public function download(PackageInterface $package, $targetDir, $preferSource = null) { $preferSource = null !== $preferSource ? $preferSource : $this->preferSource; $sourceType = $package->getSourceType(); $distType = $package->getDistType(); $sources = array(); if ($sourceType) { $sources[] = 'source'; } if ($distType) { $sources[] = 'dist'; } if (empty($sources)) { throw new \InvalidArgumentException('Package '.$package.' must have a source or dist specified'); } if (!$preferSource && ($this->preferDist || 'dist' === $this->resolvePackageInstallPreference($package))) { $sources = array_reverse($sources); } $this->filesystem->ensureDirectoryExists($targetDir); foreach ($sources as $i => $source) { if (isset($e)) { $this->io->writeError(' Now trying to download from ' . $source . ''); } $package->setInstallationSource($source); try { $downloader = $this->getDownloaderForInstalledPackage($package); if ($downloader) { $downloader->download($package, $targetDir); } break; } catch (\RuntimeException $e) { if ($i === count($sources) - 1) { throw $e; } $this->io->writeError( ' Failed to download '. $package->getPrettyName(). ' from ' . $source . ': '. $e->getMessage().'' ); } } } /** * Updates package from initial to target version. * * @param PackageInterface $initial initial package version * @param PackageInterface $target target package version * @param string $targetDir target dir * * @throws \InvalidArgumentException if initial package is not installed */ public function update(PackageInterface $initial, PackageInterface $target, $targetDir) { $downloader = $this->getDownloaderForInstalledPackage($initial); if (!$downloader) { return; } $installationSource = $initial->getInstallationSource(); if ('dist' === $installationSource) { $initialType = $initial->getDistType(); $targetType = $target->getDistType(); } else { $initialType = $initial->getSourceType(); $targetType = $target->getSourceType(); } // upgrading from a dist stable package to a dev package, force source reinstall if ($target->isDev() && 'dist' === $installationSource) { $downloader->remove($initial, $targetDir); $this->download($target, $targetDir); return; } if ($initialType === $targetType) { $target->setInstallationSource($installationSource); try { $downloader->update($initial, $target, $targetDir); return; } catch (\RuntimeException $e) { if (!$this->io->isInteractive()) { throw $e; } $this->io->writeError(' Update failed ('.$e->getMessage().')'); if (!$this->io->askConfirmation(' Would you like to try reinstalling the package instead [yes]? ', true)) { throw $e; } } } $downloader->remove($initial, $targetDir); $this->download($target, $targetDir, 'source' === $installationSource); } /** * Removes package from target dir. * * @param PackageInterface $package package instance * @param string $targetDir target dir */ public function remove(PackageInterface $package, $targetDir) { $downloader = $this->getDownloaderForInstalledPackage($package); if ($downloader) { $downloader->remove($package, $targetDir); } } /** * Determines the install preference of a package * * @param PackageInterface $package package instance * * @return string */ protected function resolvePackageInstallPreference(PackageInterface $package) { foreach ($this->packagePreferences as $pattern => $preference) { $pattern = '{^'.str_replace('\\*', '.*', preg_quote($pattern)).'$}i'; if (preg_match($pattern, $package->getName())) { if ('dist' === $preference || (!$package->isDev() && 'auto' === $preference)) { return 'dist'; } return 'source'; } } return $package->isDev() ? 'source' : 'dist'; } } composer-1.0.0-beta2/src/Composer/Downloader/DownloaderInterface.php000066400000000000000000000033651267577262200254650ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Downloader; use Composer\Package\PackageInterface; /** * Downloader interface. * * @author Konstantin Kudryashov * @author Jordi Boggiano */ interface DownloaderInterface { /** * Returns installation source (either source or dist). * * @return string "source" or "dist" */ public function getInstallationSource(); /** * Downloads specific package into specific folder. * * @param PackageInterface $package package instance * @param string $path download path */ public function download(PackageInterface $package, $path); /** * Updates specific package in specific folder from initial to target version. * * @param PackageInterface $initial initial package * @param PackageInterface $target updated package * @param string $path download path */ public function update(PackageInterface $initial, PackageInterface $target, $path); /** * Removes specific package from specific folder. * * @param PackageInterface $package package instance * @param string $path download path */ public function remove(PackageInterface $package, $path); /** * Sets whether to output download progress information or not * * @param bool $outputProgress * @return DownloaderInterface */ public function setOutputProgress($outputProgress); } composer-1.0.0-beta2/src/Composer/Downloader/DvcsDownloaderInterface.php000066400000000000000000000014161267577262200263000ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Downloader; use Composer\Package\PackageInterface; /** * DVCS Downloader interface. * * @author James Titcumb */ interface DvcsDownloaderInterface { /** * Checks for unpushed changes to a current branch * * @param PackageInterface $package package directory * @param string $path package directory * @return string|null changes or null */ public function getUnpushedChanges(PackageInterface $package, $path); } composer-1.0.0-beta2/src/Composer/Downloader/FileDownloader.php000066400000000000000000000217031267577262200244400ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Downloader; use Composer\Config; use Composer\Cache; use Composer\Factory; use Composer\IO\IOInterface; use Composer\Package\PackageInterface; use Composer\Plugin\PluginEvents; use Composer\Plugin\PreFileDownloadEvent; use Composer\EventDispatcher\EventDispatcher; use Composer\Util\Filesystem; use Composer\Util\RemoteFilesystem; /** * Base downloader for files * * @author Kirill chEbba Chebunin * @author Jordi Boggiano * @author François Pluchino * @author Nils Adermann */ class FileDownloader implements DownloaderInterface { protected $io; protected $config; protected $rfs; protected $filesystem; protected $cache; protected $outputProgress = true; private $lastCacheWrites = array(); private $eventDispatcher; /** * Constructor. * * @param IOInterface $io The IO instance * @param Config $config The config * @param EventDispatcher $eventDispatcher The event dispatcher * @param Cache $cache Optional cache instance * @param RemoteFilesystem $rfs The remote filesystem * @param Filesystem $filesystem The filesystem */ public function __construct(IOInterface $io, Config $config, EventDispatcher $eventDispatcher = null, Cache $cache = null, RemoteFilesystem $rfs = null, Filesystem $filesystem = null) { $this->io = $io; $this->config = $config; $this->eventDispatcher = $eventDispatcher; $this->rfs = $rfs ?: Factory::createRemoteFilesystem($this->io, $config); $this->filesystem = $filesystem ?: new Filesystem(); $this->cache = $cache; if ($this->cache && $this->cache->gcIsNecessary()) { $this->cache->gc($config->get('cache-files-ttl'), $config->get('cache-files-maxsize')); } } /** * {@inheritDoc} */ public function getInstallationSource() { return 'dist'; } /** * {@inheritDoc} */ public function download(PackageInterface $package, $path) { if (!$package->getDistUrl()) { throw new \InvalidArgumentException('The given package is missing url information'); } $this->io->writeError(" - Installing " . $package->getName() . " (" . $package->getFullPrettyVersion() . ")"); $urls = $package->getDistUrls(); while ($url = array_shift($urls)) { try { return $this->doDownload($package, $path, $url); } catch (\Exception $e) { if ($this->io->isDebug()) { $this->io->writeError(''); $this->io->writeError('Failed: ['.get_class($e).'] '.$e->getCode().': '.$e->getMessage()); } elseif (count($urls)) { $this->io->writeError(''); $this->io->writeError(' Failed, trying the next URL ('.$e->getCode().': '.$e->getMessage().')'); } if (!count($urls)) { throw $e; } } } $this->io->writeError(''); } protected function doDownload(PackageInterface $package, $path, $url) { $this->filesystem->emptyDirectory($path); $fileName = $this->getFileName($package, $path); $processedUrl = $this->processUrl($package, $url); $hostname = parse_url($processedUrl, PHP_URL_HOST); $preFileDownloadEvent = new PreFileDownloadEvent(PluginEvents::PRE_FILE_DOWNLOAD, $this->rfs, $processedUrl); if ($this->eventDispatcher) { $this->eventDispatcher->dispatch($preFileDownloadEvent->getName(), $preFileDownloadEvent); } $rfs = $preFileDownloadEvent->getRemoteFilesystem(); try { $checksum = $package->getDistSha1Checksum(); $cacheKey = $this->getCacheKey($package, $processedUrl); // download if we don't have it in cache or the cache is invalidated if (!$this->cache || ($checksum && $checksum !== $this->cache->sha1($cacheKey)) || !$this->cache->copyTo($cacheKey, $fileName)) { if (!$this->outputProgress) { $this->io->writeError(' Downloading'); } // try to download 3 times then fail hard $retries = 3; while ($retries--) { try { $rfs->copy($hostname, $processedUrl, $fileName, $this->outputProgress, $package->getTransportOptions()); break; } catch (TransportException $e) { // if we got an http response with a proper code, then requesting again will probably not help, abort if ((0 !== $e->getCode() && !in_array($e->getCode(), array(500, 502, 503, 504))) || !$retries) { throw $e; } $this->io->writeError(' Download failed, retrying...', true, IOInterface::VERBOSE); usleep(500000); } } if ($this->cache) { $this->lastCacheWrites[$package->getName()] = $cacheKey; $this->cache->copyFrom($cacheKey, $fileName); } } else { $this->io->writeError(' Loading from cache'); } if (!file_exists($fileName)) { throw new \UnexpectedValueException($url.' could not be saved to '.$fileName.', make sure the' .' directory is writable and you have internet connectivity'); } if ($checksum && hash_file('sha1', $fileName) !== $checksum) { throw new \UnexpectedValueException('The checksum verification of the file failed (downloaded from '.$url.')'); } } catch (\Exception $e) { // clean up $this->filesystem->removeDirectory($path); $this->clearLastCacheWrite($package); throw $e; } return $fileName; } /** * {@inheritDoc} */ public function setOutputProgress($outputProgress) { $this->outputProgress = $outputProgress; return $this; } protected function clearLastCacheWrite(PackageInterface $package) { if ($this->cache && isset($this->lastCacheWrites[$package->getName()])) { $this->cache->remove($this->lastCacheWrites[$package->getName()]); unset($this->lastCacheWrites[$package->getName()]); } } /** * {@inheritDoc} */ public function update(PackageInterface $initial, PackageInterface $target, $path) { $this->remove($initial, $path); $this->download($target, $path); } /** * {@inheritDoc} */ public function remove(PackageInterface $package, $path) { $this->io->writeError(" - Removing " . $package->getName() . " (" . $package->getFullPrettyVersion() . ")"); if (!$this->filesystem->removeDirectory($path)) { throw new \RuntimeException('Could not completely delete '.$path.', aborting.'); } } /** * Gets file name for specific package * * @param PackageInterface $package package instance * @param string $path download path * @return string file name */ protected function getFileName(PackageInterface $package, $path) { return $path.'/'.pathinfo(parse_url($package->getDistUrl(), PHP_URL_PATH), PATHINFO_BASENAME); } /** * Process the download url * * @param PackageInterface $package package the url is coming from * @param string $url download url * @throws \RuntimeException If any problem with the url * @return string url */ protected function processUrl(PackageInterface $package, $url) { if (!extension_loaded('openssl') && 0 === strpos($url, 'https:')) { throw new \RuntimeException('You must enable the openssl extension to download files via https'); } return $url; } private function getCacheKey(PackageInterface $package, $processedUrl) { // we use the complete download url here to avoid conflicting entries // from different packages, which would potentially allow a given package // in a third party repo to pre-populate the cache for the same package in // packagist for example. $cacheKey = sha1($processedUrl); return $package->getName().'/'.$cacheKey.'.'.$package->getDistType(); } } composer-1.0.0-beta2/src/Composer/Downloader/FilesystemException.php000066400000000000000000000012401267577262200255370ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Downloader; /** * Exception thrown when issues exist on local filesystem * * @author Javier Spagnoletti */ class FilesystemException extends \Exception { public function __construct($message = '', $code = 0, \Exception $previous = null) { parent::__construct("Filesystem exception: \n".$message, $code, $previous); } } composer-1.0.0-beta2/src/Composer/Downloader/GitDownloader.php000066400000000000000000000420271267577262200243060ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Downloader; use Composer\Package\PackageInterface; use Composer\Util\Git as GitUtil; use Composer\Util\Platform; use Composer\Util\ProcessExecutor; use Composer\IO\IOInterface; use Composer\Util\Filesystem; use Composer\Config; /** * @author Jordi Boggiano */ class GitDownloader extends VcsDownloader implements DvcsDownloaderInterface { private $hasStashedChanges = false; private $hasDiscardedChanges = false; private $gitUtil; public function __construct(IOInterface $io, Config $config, ProcessExecutor $process = null, Filesystem $fs = null) { parent::__construct($io, $config, $process, $fs); $this->gitUtil = new GitUtil($this->io, $this->config, $this->process, $this->filesystem); } /** * {@inheritDoc} */ public function doDownload(PackageInterface $package, $path, $url) { GitUtil::cleanEnv(); $path = $this->normalizePath($path); $ref = $package->getSourceReference(); $flag = Platform::isWindows() ? '/D ' : ''; $command = 'git clone --no-checkout %s %s && cd '.$flag.'%2$s && git remote add composer %1$s && git fetch composer'; $this->io->writeError(" Cloning ".$ref); $commandCallable = function ($url) use ($ref, $path, $command) { return sprintf($command, ProcessExecutor::escape($url), ProcessExecutor::escape($path), ProcessExecutor::escape($ref)); }; $this->gitUtil->runCommand($commandCallable, $url, $path, true); if ($url !== $package->getSourceUrl()) { $url = $package->getSourceUrl(); $this->process->execute(sprintf('git remote set-url origin %s', ProcessExecutor::escape($url)), $output, $path); } $this->setPushUrl($path, $url); if ($newRef = $this->updateToCommit($path, $ref, $package->getPrettyVersion(), $package->getReleaseDate())) { if ($package->getDistReference() === $package->getSourceReference()) { $package->setDistReference($newRef); } $package->setSourceReference($newRef); } } /** * {@inheritDoc} */ public function doUpdate(PackageInterface $initial, PackageInterface $target, $path, $url) { GitUtil::cleanEnv(); if (!$this->hasMetadataRepository($path)) { throw new \RuntimeException('The .git directory is missing from '.$path.', see https://getcomposer.org/commit-deps for more information'); } $ref = $target->getSourceReference(); $this->io->writeError(" Checking out ".$ref); $command = 'git remote set-url composer %s && git fetch composer && git fetch --tags composer'; $commandCallable = function ($url) use ($command) { return sprintf($command, ProcessExecutor::escape($url)); }; $this->gitUtil->runCommand($commandCallable, $url, $path); if ($newRef = $this->updateToCommit($path, $ref, $target->getPrettyVersion(), $target->getReleaseDate())) { if ($target->getDistReference() === $target->getSourceReference()) { $target->setDistReference($newRef); } $target->setSourceReference($newRef); } } /** * {@inheritDoc} */ public function getLocalChanges(PackageInterface $package, $path) { GitUtil::cleanEnv(); if (!$this->hasMetadataRepository($path)) { return; } $command = 'git status --porcelain --untracked-files=no'; if (0 !== $this->process->execute($command, $output, $path)) { throw new \RuntimeException('Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput()); } return trim($output) ?: null; } public function getUnpushedChanges(PackageInterface $package, $path) { GitUtil::cleanEnv(); $path = $this->normalizePath($path); if (!$this->hasMetadataRepository($path)) { return; } $command = 'git show-ref --head -d'; if (0 !== $this->process->execute($command, $output, $path)) { throw new \RuntimeException('Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput()); } $refs = trim($output); if (!preg_match('{^([a-f0-9]+) HEAD$}mi', $refs, $match)) { // could not match the HEAD for some reason return; } $headRef = $match[1]; if (!preg_match_all('{^'.$headRef.' refs/heads/(.+)$}mi', $refs, $matches)) { // not on a branch, we are either on a not-modified tag or some sort of detached head, so skip this return; } // use the first match as branch name for now $branch = $matches[1][0]; $unpushedChanges = null; // do two passes, as if we find anything we want to fetch and then re-try for ($i = 0; $i <= 1; $i++) { // try to find the a matching branch name in the composer remote foreach ($matches[1] as $candidate) { if (preg_match('{^[a-f0-9]+ refs/remotes/((?:composer|origin)/'.preg_quote($candidate).')$}mi', $refs, $match)) { $branch = $candidate; $remoteBranch = $match[1]; break; } } // if it doesn't exist, then we assume it is an unpushed branch // this is bad as we have no reference point to do a diff so we just bail listing // the branch as being unpushed if (!isset($remoteBranch)) { $unpushedChanges = 'Branch ' . $branch . ' could not be found on the origin remote and appears to be unpushed'; } else { $command = sprintf('git diff --name-status %s...%s --', $remoteBranch, $branch); if (0 !== $this->process->execute($command, $output, $path)) { throw new \RuntimeException('Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput()); } $unpushedChanges = trim($output) ?: null; } // first pass and we found unpushed changes, fetch from both remotes to make sure we have up to date // remotes and then try again as outdated remotes can sometimes cause false-positives if ($unpushedChanges && $i === 0) { $this->process->execute('git fetch composer && git fetch origin', $output, $path); } // abort after first pass if we didn't find anything if (!$unpushedChanges) { break; } } return $unpushedChanges; } /** * {@inheritDoc} */ protected function cleanChanges(PackageInterface $package, $path, $update) { GitUtil::cleanEnv(); $path = $this->normalizePath($path); $unpushed = $this->getUnpushedChanges($package, $path); if ($unpushed && ($this->io->isInteractive() || $this->config->get('discard-changes') !== true)) { throw new \RuntimeException('Source directory ' . $path . ' has unpushed changes on the current branch: '."\n".$unpushed); } if (!$changes = $this->getLocalChanges($package, $path)) { return; } if (!$this->io->isInteractive()) { $discardChanges = $this->config->get('discard-changes'); if (true === $discardChanges) { return $this->discardChanges($path); } if ('stash' === $discardChanges) { if (!$update) { return parent::cleanChanges($package, $path, $update); } return $this->stashChanges($path); } return parent::cleanChanges($package, $path, $update); } $changes = array_map(function ($elem) { return ' '.$elem; }, preg_split('{\s*\r?\n\s*}', $changes)); $this->io->writeError(' The package has modified files:'); $this->io->writeError(array_slice($changes, 0, 10)); if (count($changes) > 10) { $this->io->writeError(' '.count($changes) - 10 . ' more files modified, choose "v" to view the full list'); } while (true) { switch ($this->io->ask(' Discard changes [y,n,v,d,'.($update ? 's,' : '').'?]? ', '?')) { case 'y': $this->discardChanges($path); break 2; case 's': if (!$update) { goto help; } $this->stashChanges($path); break 2; case 'n': throw new \RuntimeException('Update aborted'); case 'v': $this->io->writeError($changes); break; case 'd': $this->viewDiff($path); break; case '?': default: help: $this->io->writeError(array( ' y - discard changes and apply the '.($update ? 'update' : 'uninstall'), ' n - abort the '.($update ? 'update' : 'uninstall').' and let you manually clean things up', ' v - view modified files', ' d - view local modifications (diff)', )); if ($update) { $this->io->writeError(' s - stash changes and try to reapply them after the update'); } $this->io->writeError(' ? - print help'); break; } } } /** * {@inheritDoc} */ protected function reapplyChanges($path) { $path = $this->normalizePath($path); if ($this->hasStashedChanges) { $this->hasStashedChanges = false; $this->io->writeError(' Re-applying stashed changes'); if (0 !== $this->process->execute('git stash pop', $output, $path)) { throw new \RuntimeException("Failed to apply stashed changes:\n\n".$this->process->getErrorOutput()); } } $this->hasDiscardedChanges = false; } /** * Updates the given path to the given commit ref * * @param string $path * @param string $reference * @param string $branch * @param \DateTime $date * @throws \RuntimeException * @return null|string if a string is returned, it is the commit reference that was checked out if the original could not be found */ protected function updateToCommit($path, $reference, $branch, $date) { $force = $this->hasDiscardedChanges || $this->hasStashedChanges ? '-f ' : ''; // This uses the "--" sequence to separate branch from file parameters. // // Otherwise git tries the branch name as well as file name. // If the non-existent branch is actually the name of a file, the file // is checked out. $template = 'git checkout '.$force.'%s -- && git reset --hard %1$s --'; $branch = preg_replace('{(?:^dev-|(?:\.x)?-dev$)}i', '', $branch); $branches = null; if (0 === $this->process->execute('git branch -r', $output, $path)) { $branches = $output; } // check whether non-commitish are branches or tags, and fetch branches with the remote name $gitRef = $reference; if (!preg_match('{^[a-f0-9]{40}$}', $reference) && $branches && preg_match('{^\s+composer/'.preg_quote($reference).'$}m', $branches) ) { $command = sprintf('git checkout '.$force.'-B %s %s -- && git reset --hard %2$s --', ProcessExecutor::escape($branch), ProcessExecutor::escape('composer/'.$reference)); if (0 === $this->process->execute($command, $output, $path)) { return; } } // try to checkout branch by name and then reset it so it's on the proper branch name if (preg_match('{^[a-f0-9]{40}$}', $reference)) { // add 'v' in front of the branch if it was stripped when generating the pretty name if (!preg_match('{^\s+composer/'.preg_quote($branch).'$}m', $branches) && preg_match('{^\s+composer/v'.preg_quote($branch).'$}m', $branches)) { $branch = 'v' . $branch; } $command = sprintf('git checkout %s --', ProcessExecutor::escape($branch)); $fallbackCommand = sprintf('git checkout '.$force.'-B %s %s --', ProcessExecutor::escape($branch), ProcessExecutor::escape('composer/'.$branch)); if (0 === $this->process->execute($command, $output, $path) || 0 === $this->process->execute($fallbackCommand, $output, $path) ) { $command = sprintf('git reset --hard %s --', ProcessExecutor::escape($reference)); if (0 === $this->process->execute($command, $output, $path)) { return; } } } $command = sprintf($template, ProcessExecutor::escape($gitRef)); if (0 === $this->process->execute($command, $output, $path)) { return; } // reference was not found (prints "fatal: reference is not a tree: $ref") if (false !== strpos($this->process->getErrorOutput(), $reference)) { $this->io->writeError(' '.$reference.' is gone (history was rewritten?)'); } throw new \RuntimeException('Failed to execute ' . GitUtil::sanitizeUrl($command) . "\n\n" . $this->process->getErrorOutput()); } protected function setPushUrl($path, $url) { // set push url for github projects if (preg_match('{^(?:https?|git)://'.GitUtil::getGitHubDomainsRegex($this->config).'/([^/]+)/([^/]+?)(?:\.git)?$}', $url, $match)) { $protocols = $this->config->get('github-protocols'); $pushUrl = 'git@'.$match[1].':'.$match[2].'/'.$match[3].'.git'; if (!in_array('ssh', $protocols, true)) { $pushUrl = 'https://' . $match[1] . '/'.$match[2].'/'.$match[3].'.git'; } $cmd = sprintf('git remote set-url --push origin %s', ProcessExecutor::escape($pushUrl)); $this->process->execute($cmd, $ignoredOutput, $path); } } /** * {@inheritDoc} */ protected function getCommitLogs($fromReference, $toReference, $path) { $path = $this->normalizePath($path); $command = sprintf('git log %s..%s --pretty=format:"%%h - %%an: %%s"', $fromReference, $toReference); if (0 !== $this->process->execute($command, $output, $path)) { throw new \RuntimeException('Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput()); } return $output; } /** * @param $path * @throws \RuntimeException */ protected function discardChanges($path) { $path = $this->normalizePath($path); if (0 !== $this->process->execute('git reset --hard', $output, $path)) { throw new \RuntimeException("Could not reset changes\n\n:".$this->process->getErrorOutput()); } $this->hasDiscardedChanges = true; } /** * @param $path * @throws \RuntimeException */ protected function stashChanges($path) { $path = $this->normalizePath($path); if (0 !== $this->process->execute('git stash --include-untracked', $output, $path)) { throw new \RuntimeException("Could not stash changes\n\n:".$this->process->getErrorOutput()); } $this->hasStashedChanges = true; } /** * @param $path * @throws \RuntimeException */ protected function viewDiff($path) { $path = $this->normalizePath($path); if (0 !== $this->process->execute('git diff HEAD', $output, $path)) { throw new \RuntimeException("Could not view diff\n\n:".$this->process->getErrorOutput()); } $this->io->writeError($output); } protected function normalizePath($path) { if (Platform::isWindows() && strlen($path) > 0) { $basePath = $path; $removed = array(); while (!is_dir($basePath) && $basePath !== '\\') { array_unshift($removed, basename($basePath)); $basePath = dirname($basePath); } if ($basePath === '\\') { return $path; } $path = rtrim(realpath($basePath) . '/' . implode('/', $removed), '/'); } return $path; } /** * {@inheritDoc} */ protected function hasMetadataRepository($path) { $path = $this->normalizePath($path); return is_dir($path.'/.git'); } } composer-1.0.0-beta2/src/Composer/Downloader/GzipDownloader.php000066400000000000000000000050401267577262200244660ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Downloader; use Composer\Config; use Composer\Cache; use Composer\EventDispatcher\EventDispatcher; use Composer\Package\PackageInterface; use Composer\Util\Platform; use Composer\Util\ProcessExecutor; use Composer\Util\RemoteFilesystem; use Composer\IO\IOInterface; /** * GZip archive downloader. * * @author Pavel Puchkin */ class GzipDownloader extends ArchiveDownloader { protected $process; public function __construct(IOInterface $io, Config $config, EventDispatcher $eventDispatcher = null, Cache $cache = null, ProcessExecutor $process = null, RemoteFilesystem $rfs = null) { $this->process = $process ?: new ProcessExecutor($io); parent::__construct($io, $config, $eventDispatcher, $cache, $rfs); } protected function extract($file, $path) { $targetFilepath = $path . DIRECTORY_SEPARATOR . basename(substr($file, 0, -3)); // Try to use gunzip on *nix if (!Platform::isWindows()) { $command = 'gzip -cd ' . ProcessExecutor::escape($file) . ' > ' . ProcessExecutor::escape($targetFilepath); if (0 === $this->process->execute($command, $ignoredOutput)) { return; } if (extension_loaded('zlib')) { // Fallback to using the PHP extension. $this->extractUsingExt($file, $targetFilepath); return; } $processError = 'Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput(); throw new \RuntimeException($processError); } // Windows version of PHP has built-in support of gzip functions $this->extractUsingExt($file, $targetFilepath); } /** * {@inheritdoc} */ protected function getFileName(PackageInterface $package, $path) { return $path.'/'.pathinfo(parse_url($package->getDistUrl(), PHP_URL_PATH), PATHINFO_BASENAME); } private function extractUsingExt($file, $targetFilepath) { $archiveFile = gzopen($file, 'rb'); $targetFile = fopen($targetFilepath, 'wb'); while ($string = gzread($archiveFile, 4096)) { fwrite($targetFile, $string, strlen($string)); } gzclose($archiveFile); fclose($targetFile); } } composer-1.0.0-beta2/src/Composer/Downloader/HgDownloader.php000066400000000000000000000066031267577262200241210ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Downloader; use Composer\Package\PackageInterface; use Composer\Util\ProcessExecutor; /** * @author Per Bernhardt */ class HgDownloader extends VcsDownloader { /** * {@inheritDoc} */ public function doDownload(PackageInterface $package, $path, $url) { $this->checkSecureHttp($url); $url = ProcessExecutor::escape($url); $ref = ProcessExecutor::escape($package->getSourceReference()); $this->io->writeError(" Cloning ".$package->getSourceReference()); $command = sprintf('hg clone %s %s', $url, ProcessExecutor::escape($path)); if (0 !== $this->process->execute($command, $ignoredOutput)) { throw new \RuntimeException('Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput()); } $command = sprintf('hg up %s', $ref); if (0 !== $this->process->execute($command, $ignoredOutput, realpath($path))) { throw new \RuntimeException('Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput()); } } /** * {@inheritDoc} */ public function doUpdate(PackageInterface $initial, PackageInterface $target, $path, $url) { $this->checkSecureHttp($url); $url = ProcessExecutor::escape($url); $ref = ProcessExecutor::escape($target->getSourceReference()); $this->io->writeError(" Updating to ".$target->getSourceReference()); if (!$this->hasMetadataRepository($path)) { throw new \RuntimeException('The .hg directory is missing from '.$path.', see https://getcomposer.org/commit-deps for more information'); } $command = sprintf('hg pull %s && hg up %s', $url, $ref); if (0 !== $this->process->execute($command, $ignoredOutput, realpath($path))) { throw new \RuntimeException('Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput()); } } /** * {@inheritDoc} */ public function getLocalChanges(PackageInterface $package, $path) { if (!is_dir($path.'/.hg')) { return; } $this->process->execute('hg st', $output, realpath($path)); return trim($output) ?: null; } /** * {@inheritDoc} */ protected function getCommitLogs($fromReference, $toReference, $path) { $command = sprintf('hg log -r %s:%s --style compact', $fromReference, $toReference); if (0 !== $this->process->execute($command, $output, realpath($path))) { throw new \RuntimeException('Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput()); } return $output; } protected function checkSecureHttp($url) { if (preg_match('{^http:}i', $url) && $this->config->get('secure-http')) { throw new TransportException("Your configuration does not allow connection to $url. See https://getcomposer.org/doc/06-config.md#secure-http for details."); } } /** * {@inheritDoc} */ protected function hasMetadataRepository($path) { return is_dir($path . '/.hg'); } } composer-1.0.0-beta2/src/Composer/Downloader/PathDownloader.php000066400000000000000000000121701267577262200244530ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Downloader; use Composer\Package\PackageInterface; use Composer\Util\Platform; use Symfony\Component\Filesystem\Exception\IOException; use Symfony\Component\Filesystem\Filesystem; /** * Download a package from a local path. * * @author Samuel Roze * @author Johann Reinke */ class PathDownloader extends FileDownloader { const STRATEGY_SYMLINK = 10; const STRATEGY_MIRROR = 20; /** * {@inheritdoc} */ public function download(PackageInterface $package, $path) { $url = $package->getDistUrl(); $realUrl = realpath($url); if (false === $realUrl || !file_exists($realUrl) || !is_dir($realUrl)) { throw new \RuntimeException(sprintf( 'Source path "%s" is not found for package %s', $url, $package->getName() )); } if (strpos(realpath($path) . DIRECTORY_SEPARATOR, $realUrl . DIRECTORY_SEPARATOR) === 0) { throw new \RuntimeException(sprintf( 'Package %s cannot install to "%s" inside its source at "%s"', $package->getName(), realpath($path), $realUrl )); } // Get the transport options with default values $transportOptions = $package->getTransportOptions() + array('symlink' => null); // When symlink transport option is null, both symlink and mirror are allowed $currentStrategy = self::STRATEGY_SYMLINK; $allowedStrategies = array(self::STRATEGY_SYMLINK, self::STRATEGY_MIRROR); if (true === $transportOptions['symlink']) { $currentStrategy = self::STRATEGY_SYMLINK; $allowedStrategies = array(self::STRATEGY_SYMLINK); } elseif (false === $transportOptions['symlink']) { $currentStrategy = self::STRATEGY_MIRROR; $allowedStrategies = array(self::STRATEGY_MIRROR); } $fileSystem = new Filesystem(); $this->filesystem->removeDirectory($path); $this->io->writeError(sprintf( ' - Installing %s (%s)', $package->getName(), $package->getFullPrettyVersion() )); if (self::STRATEGY_SYMLINK == $currentStrategy) { try { if (Platform::isWindows()) { // Implement symlinks as NTFS junctions on Windows $this->filesystem->junction($realUrl, $path); $this->io->writeError(sprintf(' Junctioned from %s', $url)); } else { $absolutePath = $path; if ( ! $this->filesystem->isAbsolutePath($absolutePath)) { $absolutePath = getcwd() . DIRECTORY_SEPARATOR . $path; } $shortestPath = $this->filesystem->findShortestPath($absolutePath, $realUrl); $fileSystem->symlink($shortestPath, $path); $this->io->writeError(sprintf(' Symlinked from %s', $url)); } } catch (IOException $e) { if (in_array(self::STRATEGY_MIRROR, $allowedStrategies)) { $this->io->writeError(' Symlink failed, fallback to use mirroring!'); $currentStrategy = self::STRATEGY_MIRROR; } else { throw new \RuntimeException(sprintf('Symlink from "%s" to "%s" failed!', $realUrl, $path)); } } } // Fallback if symlink failed or if symlink is not allowed for the package if (self::STRATEGY_MIRROR == $currentStrategy) { $fileSystem->mirror($realUrl, $path); $this->io->writeError(sprintf(' Mirrored from %s', $url)); } $this->io->writeError(''); } /** * {@inheritDoc} */ public function remove(PackageInterface $package, $path) { /** * For junctions don't blindly rely on Filesystem::removeDirectory as it may be overzealous. If a process * inadvertently locks the file the removal will fail, but it would fall back to recursive delete which * is disastrous within a junction. So in that case we have no other real choice but to fail hard. */ if (Platform::isWindows() && $this->filesystem->isJunction($path)) { $this->io->writeError(" - Removing junction for " . $package->getName() . " (" . $package->getFullPrettyVersion() . ")"); if (!$this->filesystem->removeJunction($path)) { $this->io->writeError("Could not remove junction at " . $path . " - is another process locking it?"); throw new \RuntimeException('Could not reliably remove junction for package ' . $package->getName()); } } else { parent::remove($package, $path); } } } composer-1.0.0-beta2/src/Composer/Downloader/PearPackageExtractor.php000066400000000000000000000266221267577262200256060ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Downloader; use Composer\Util\Filesystem; /** * Extractor for pear packages. * * Composer cannot rely on tar files structure when place it inside package target dir. Correct source files * disposition must be read from package.xml * This extract pear package source files to target dir. * * @author Alexey Prilipko */ class PearPackageExtractor { private static $rolesWithoutPackageNamePrefix = array('php', 'script', 'www'); /** @var Filesystem */ private $filesystem; private $file; public function __construct($file) { if (!is_file($file)) { throw new \UnexpectedValueException('PEAR package file is not found at '.$file); } $this->filesystem = new Filesystem(); $this->file = $file; } /** * Installs PEAR source files according to package.xml definitions and removes extracted files * * @param string $target target install location. all source installation would be performed relative to target path. * @param array $roles types of files to install. default role for PEAR source files are 'php'. * @param array $vars used for replacement tasks * @throws \RuntimeException * @throws \UnexpectedValueException */ public function extractTo($target, array $roles = array('php' => '/', 'script' => '/bin'), $vars = array()) { $extractionPath = $target.'/tarball'; try { $archive = new \PharData($this->file); $archive->extractTo($extractionPath, null, true); if (!is_file($this->combine($extractionPath, '/package.xml'))) { throw new \RuntimeException('Invalid PEAR package. It must contain package.xml file.'); } $fileCopyActions = $this->buildCopyActions($extractionPath, $roles, $vars); $this->copyFiles($fileCopyActions, $extractionPath, $target, $roles, $vars); $this->filesystem->removeDirectory($extractionPath); } catch (\Exception $exception) { throw new \UnexpectedValueException(sprintf('Failed to extract PEAR package %s to %s. Reason: %s', $this->file, $target, $exception->getMessage()), 0, $exception); } } /** * Perform copy actions on files * * @param array $files array of copy actions ('from', 'to') with relative paths * @param $source string path to source dir. * @param $target string path to destination dir * @param array $roles array [role => roleRoot] relative root for files having that role * @param array $vars list of values can be used for replacement tasks */ private function copyFiles($files, $source, $target, $roles, $vars) { foreach ($files as $file) { $from = $this->combine($source, $file['from']); $to = $this->combine($target, $roles[$file['role']]); $to = $this->combine($to, $file['to']); $tasks = $file['tasks']; $this->copyFile($from, $to, $tasks, $vars); } } private function copyFile($from, $to, $tasks, $vars) { if (!is_file($from)) { throw new \RuntimeException('Invalid PEAR package. package.xml defines file that is not located inside tarball.'); } $this->filesystem->ensureDirectoryExists(dirname($to)); if (0 == count($tasks)) { $copied = copy($from, $to); } else { $content = file_get_contents($from); $replacements = array(); foreach ($tasks as $task) { $pattern = $task['from']; $varName = $task['to']; if (isset($vars[$varName])) { if ($varName === 'php_bin' && false === strpos($to, '.bat')) { $replacements[$pattern] = preg_replace('{\.bat$}', '', $vars[$varName]); } else { $replacements[$pattern] = $vars[$varName]; } } } $content = strtr($content, $replacements); $copied = file_put_contents($to, $content); } if (false === $copied) { throw new \RuntimeException(sprintf('Failed to copy %s to %s', $from, $to)); } } /** * Builds list of copy and list of remove actions that would transform extracted PEAR tarball into installed package. * * @param string $source string path to extracted files * @param array $roles array [role => roleRoot] relative root for files having that role * @param array $vars list of values can be used for replacement tasks * @throws \RuntimeException * @return array array of 'source' => 'target', where source is location of file in the tarball (relative to source * path, and target is destination of file (also relative to $source path) */ private function buildCopyActions($source, array $roles, $vars) { /** @var $package \SimpleXmlElement */ $package = simplexml_load_string(file_get_contents($this->combine($source, 'package.xml'))); if (false === $package) { throw new \RuntimeException('Package definition file is not valid.'); } $packageSchemaVersion = $package['version']; if ('1.0' == $packageSchemaVersion) { $children = $package->release->filelist->children(); $packageName = (string) $package->name; $packageVersion = (string) $package->release->version; $sourceDir = $packageName . '-' . $packageVersion; $result = $this->buildSourceList10($children, $roles, $sourceDir, '', null, $packageName); } elseif ('2.0' == $packageSchemaVersion || '2.1' == $packageSchemaVersion) { $children = $package->contents->children(); $packageName = (string) $package->name; $packageVersion = (string) $package->version->release; $sourceDir = $packageName . '-' . $packageVersion; $result = $this->buildSourceList20($children, $roles, $sourceDir, '', null, $packageName); $namespaces = $package->getNamespaces(); $package->registerXPathNamespace('ns', $namespaces['']); $releaseNodes = $package->xpath('ns:phprelease'); $this->applyRelease($result, $releaseNodes, $vars); } else { throw new \RuntimeException('Unsupported schema version of package definition file.'); } return $result; } private function applyRelease(&$actions, $releaseNodes, $vars) { foreach ($releaseNodes as $releaseNode) { $requiredOs = $releaseNode->installconditions && $releaseNode->installconditions->os && $releaseNode->installconditions->os->name ? (string) $releaseNode->installconditions->os->name : ''; if ($requiredOs && $vars['os'] != $requiredOs) { continue; } if ($releaseNode->filelist) { foreach ($releaseNode->filelist->children() as $action) { if ('install' == $action->getName()) { $name = (string) $action['name']; $as = (string) $action['as']; if (isset($actions[$name])) { $actions[$name]['to'] = $as; } } elseif ('ignore' == $action->getName()) { $name = (string) $action['name']; unset($actions[$name]); } else { // unknown action } } } break; } } private function buildSourceList10($children, $targetRoles, $source, $target, $role, $packageName) { $result = array(); // enumerating files foreach ($children as $child) { /** @var $child \SimpleXMLElement */ if ($child->getName() == 'dir') { $dirSource = $this->combine($source, (string) $child['name']); $dirTarget = $child['baseinstalldir'] ?: $target; $dirRole = $child['role'] ?: $role; $dirFiles = $this->buildSourceList10($child->children(), $targetRoles, $dirSource, $dirTarget, $dirRole, $packageName); $result = array_merge($result, $dirFiles); } elseif ($child->getName() == 'file') { $fileRole = (string) $child['role'] ?: $role; if (isset($targetRoles[$fileRole])) { $fileName = (string) ($child['name'] ?: $child[0]); // $child[0] means text content $fileSource = $this->combine($source, $fileName); $fileTarget = $this->combine((string) $child['baseinstalldir'] ?: $target, $fileName); if (!in_array($fileRole, self::$rolesWithoutPackageNamePrefix)) { $fileTarget = $packageName . '/' . $fileTarget; } $result[(string) $child['name']] = array('from' => $fileSource, 'to' => $fileTarget, 'role' => $fileRole, 'tasks' => array()); } } } return $result; } private function buildSourceList20($children, $targetRoles, $source, $target, $role, $packageName) { $result = array(); // enumerating files foreach ($children as $child) { /** @var $child \SimpleXMLElement */ if ('dir' == $child->getName()) { $dirSource = $this->combine($source, $child['name']); $dirTarget = $child['baseinstalldir'] ?: $target; $dirRole = $child['role'] ?: $role; $dirFiles = $this->buildSourceList20($child->children(), $targetRoles, $dirSource, $dirTarget, $dirRole, $packageName); $result = array_merge($result, $dirFiles); } elseif ('file' == $child->getName()) { $fileRole = (string) $child['role'] ?: $role; if (isset($targetRoles[$fileRole])) { $fileSource = $this->combine($source, (string) $child['name']); $fileTarget = $this->combine((string) ($child['baseinstalldir'] ?: $target), (string) $child['name']); $fileTasks = array(); foreach ($child->children('http://pear.php.net/dtd/tasks-1.0') as $taskNode) { if ('replace' == $taskNode->getName()) { $fileTasks[] = array('from' => (string) $taskNode->attributes()->from, 'to' => (string) $taskNode->attributes()->to); } } if (!in_array($fileRole, self::$rolesWithoutPackageNamePrefix)) { $fileTarget = $packageName . '/' . $fileTarget; } $result[(string) $child['name']] = array('from' => $fileSource, 'to' => $fileTarget, 'role' => $fileRole, 'tasks' => $fileTasks); } } } return $result; } private function combine($left, $right) { return rtrim($left, '/') . '/' . ltrim($right, '/'); } } composer-1.0.0-beta2/src/Composer/Downloader/PerforceDownloader.php000066400000000000000000000055141267577262200253300ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Downloader; use Composer\Package\PackageInterface; use Composer\Repository\VcsRepository; use Composer\Util\Perforce; /** * @author Matt Whittom */ class PerforceDownloader extends VcsDownloader { /** @var Perforce */ protected $perforce; /** * {@inheritDoc} */ public function doDownload(PackageInterface $package, $path, $url) { $ref = $package->getSourceReference(); $label = $this->getLabelFromSourceReference($ref); $this->io->writeError(' Cloning ' . $ref); $this->initPerforce($package, $path, $url); $this->perforce->setStream($ref); $this->perforce->p4Login(); $this->perforce->writeP4ClientSpec(); $this->perforce->connectClient(); $this->perforce->syncCodeBase($label); $this->perforce->cleanupClientSpec(); } private function getLabelFromSourceReference($ref) { $pos = strpos($ref, '@'); if (false !== $pos) { return substr($ref, $pos + 1); } return null; } public function initPerforce(PackageInterface $package, $path, $url) { if (!empty($this->perforce)) { $this->perforce->initializePath($path); return; } $repository = $package->getRepository(); $repoConfig = null; if ($repository instanceof VcsRepository) { $repoConfig = $this->getRepoConfig($repository); } $this->perforce = Perforce::create($repoConfig, $url, $path, $this->process, $this->io); } private function getRepoConfig(VcsRepository $repository) { return $repository->getRepoConfig(); } /** * {@inheritDoc} */ public function doUpdate(PackageInterface $initial, PackageInterface $target, $path, $url) { $this->doDownload($target, $path, $url); } /** * {@inheritDoc} */ public function getLocalChanges(PackageInterface $package, $path) { $this->io->writeError('Perforce driver does not check for local changes before overriding', true); return; } /** * {@inheritDoc} */ protected function getCommitLogs($fromReference, $toReference, $path) { $commitLogs = $this->perforce->getCommitLogs($fromReference, $toReference); return $commitLogs; } public function setPerforce($perforce) { $this->perforce = $perforce; } /** * {@inheritDoc} */ protected function hasMetadataRepository($path) { return true; } } composer-1.0.0-beta2/src/Composer/Downloader/PharDownloader.php000066400000000000000000000016511267577262200244530ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Downloader; /** * Downloader for phar files * * @author Kirill chEbba Chebunin */ class PharDownloader extends ArchiveDownloader { /** * {@inheritDoc} */ protected function extract($file, $path) { // Can throw an UnexpectedValueException $archive = new \Phar($file); $archive->extractTo($path, null, true); /* TODO: handle openssl signed phars * https://github.com/composer/composer/pull/33#issuecomment-2250768 * https://github.com/koto/phar-util * http://blog.kotowicz.net/2010/08/hardening-php-how-to-securely-include.html */ } } composer-1.0.0-beta2/src/Composer/Downloader/RarDownloader.php000066400000000000000000000057611267577262200243130ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Downloader; use Composer\Config; use Composer\Cache; use Composer\EventDispatcher\EventDispatcher; use Composer\Util\Platform; use Composer\Util\ProcessExecutor; use Composer\Util\RemoteFilesystem; use Composer\IO\IOInterface; use RarArchive; /** * RAR archive downloader. * * Based on previous work by Jordi Boggiano ({@see ZipDownloader}). * * @author Derrick Nelson */ class RarDownloader extends ArchiveDownloader { protected $process; public function __construct(IOInterface $io, Config $config, EventDispatcher $eventDispatcher = null, Cache $cache = null, ProcessExecutor $process = null, RemoteFilesystem $rfs = null) { $this->process = $process ?: new ProcessExecutor($io); parent::__construct($io, $config, $eventDispatcher, $cache, $rfs); } protected function extract($file, $path) { $processError = null; // Try to use unrar on *nix if (!Platform::isWindows()) { $command = 'unrar x ' . ProcessExecutor::escape($file) . ' ' . ProcessExecutor::escape($path) . ' && chmod -R u+w ' . ProcessExecutor::escape($path); if (0 === $this->process->execute($command, $ignoredOutput)) { return; } $processError = 'Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput(); } if (!class_exists('RarArchive')) { // php.ini path is added to the error message to help users find the correct file $iniPath = php_ini_loaded_file(); if ($iniPath) { $iniMessage = 'The php.ini used by your command-line PHP is: ' . $iniPath; } else { $iniMessage = 'A php.ini file does not exist. You will have to create one.'; } $error = "Could not decompress the archive, enable the PHP rar extension or install unrar.\n" . $iniMessage . "\n" . $processError; if (!Platform::isWindows()) { $error = "Could not decompress the archive, enable the PHP rar extension.\n" . $iniMessage; } throw new \RuntimeException($error); } $rarArchive = RarArchive::open($file); if (false === $rarArchive) { throw new \UnexpectedValueException('Could not open RAR archive: ' . $file); } $entries = $rarArchive->getEntries(); if (false === $entries) { throw new \RuntimeException('Could not retrieve RAR archive entries'); } foreach ($entries as $entry) { if (false === $entry->extract($path)) { throw new \RuntimeException('Could not extract entry'); } } $rarArchive->close(); } } composer-1.0.0-beta2/src/Composer/Downloader/SvnDownloader.php000066400000000000000000000150751267577262200243340ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Downloader; use Composer\Package\PackageInterface; use Composer\Util\Svn as SvnUtil; use Composer\Repository\VcsRepository; /** * @author Ben Bieker * @author Till Klampaeckel */ class SvnDownloader extends VcsDownloader { protected $cacheCredentials = true; /** * {@inheritDoc} */ public function doDownload(PackageInterface $package, $path, $url) { SvnUtil::cleanEnv(); $ref = $package->getSourceReference(); $repo = $package->getRepository(); if ($repo instanceof VcsRepository) { $repoConfig = $repo->getRepoConfig(); if (array_key_exists('svn-cache-credentials', $repoConfig)) { $this->cacheCredentials = (bool) $repoConfig['svn-cache-credentials']; } } $this->io->writeError(" Checking out ".$package->getSourceReference()); $this->execute($url, "svn co", sprintf("%s/%s", $url, $ref), null, $path); } /** * {@inheritDoc} */ public function doUpdate(PackageInterface $initial, PackageInterface $target, $path, $url) { SvnUtil::cleanEnv(); $ref = $target->getSourceReference(); if (!$this->hasMetadataRepository($path)) { throw new \RuntimeException('The .svn directory is missing from '.$path.', see https://getcomposer.org/commit-deps for more information'); } $flags = ""; if (0 === $this->process->execute('svn --version', $output)) { if (preg_match('{(\d+(?:\.\d+)+)}', $output, $match) && version_compare($match[1], '1.7.0', '>=')) { $flags .= ' --ignore-ancestry'; } } $this->io->writeError(" Checking out " . $ref); $this->execute($url, "svn switch" . $flags, sprintf("%s/%s", $url, $ref), $path); } /** * {@inheritDoc} */ public function getLocalChanges(PackageInterface $package, $path) { if (!$this->hasMetadataRepository($path)) { return; } $this->process->execute('svn status --ignore-externals', $output, $path); return preg_match('{^ *[^X ] +}m', $output) ? $output : null; } /** * Execute an SVN command and try to fix up the process with credentials * if necessary. * * @param string $baseUrl Base URL of the repository * @param string $command SVN command to run * @param string $url SVN url * @param string $cwd Working directory * @param string $path Target for a checkout * @throws \RuntimeException * @return string */ protected function execute($baseUrl, $command, $url, $cwd = null, $path = null) { $util = new SvnUtil($baseUrl, $this->io, $this->config); $util->setCacheCredentials($this->cacheCredentials); try { return $util->execute($command, $url, $cwd, $path, $this->io->isVerbose()); } catch (\RuntimeException $e) { throw new \RuntimeException( 'Package could not be downloaded, '.$e->getMessage() ); } } /** * {@inheritDoc} */ protected function cleanChanges(PackageInterface $package, $path, $update) { if (!$changes = $this->getLocalChanges($package, $path)) { return; } if (!$this->io->isInteractive()) { if (true === $this->config->get('discard-changes')) { return $this->discardChanges($path); } return parent::cleanChanges($package, $path, $update); } $changes = array_map(function ($elem) { return ' '.$elem; }, preg_split('{\s*\r?\n\s*}', $changes)); $this->io->writeError(' The package has modified files:'); $this->io->writeError(array_slice($changes, 0, 10)); if (count($changes) > 10) { $this->io->writeError(' '.count($changes) - 10 . ' more files modified, choose "v" to view the full list'); } while (true) { switch ($this->io->ask(' Discard changes [y,n,v,?]? ', '?')) { case 'y': $this->discardChanges($path); break 2; case 'n': throw new \RuntimeException('Update aborted'); case 'v': $this->io->writeError($changes); break; case '?': default: $this->io->writeError(array( ' y - discard changes and apply the '.($update ? 'update' : 'uninstall'), ' n - abort the '.($update ? 'update' : 'uninstall').' and let you manually clean things up', ' v - view modified files', ' ? - print help', )); break; } } } /** * {@inheritDoc} */ protected function getCommitLogs($fromReference, $toReference, $path) { if (preg_match('{.*@(\d+)$}', $fromReference) && preg_match('{.*@(\d+)$}', $toReference)) { // strip paths from references and only keep the actual revision $fromRevision = preg_replace('{.*@(\d+)$}', '$1', $fromReference); $toRevision = preg_replace('{.*@(\d+)$}', '$1', $toReference); $command = sprintf('svn log -r%s:%s --incremental', $fromRevision, $toRevision); if (0 !== $this->process->execute($command, $output, $path)) { throw new \RuntimeException( 'Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput() ); } } else { $output = "Could not retrieve changes between $fromReference and $toReference due to missing revision information"; } return $output; } protected function discardChanges($path) { if (0 !== $this->process->execute('svn revert -R .', $output, $path)) { throw new \RuntimeException("Could not reset changes\n\n:".$this->process->getErrorOutput()); } } /** * {@inheritDoc} */ protected function hasMetadataRepository($path) { return is_dir($path.'/.svn'); } } composer-1.0.0-beta2/src/Composer/Downloader/TarDownloader.php000066400000000000000000000012711267577262200243050ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Downloader; /** * Downloader for tar files: tar, tar.gz or tar.bz2 * * @author Kirill chEbba Chebunin */ class TarDownloader extends ArchiveDownloader { /** * {@inheritDoc} */ protected function extract($file, $path) { // Can throw an UnexpectedValueException $archive = new \PharData($file); $archive->extractTo($path, null, true); } } composer-1.0.0-beta2/src/Composer/Downloader/TransportException.php000066400000000000000000000017611267577262200254170ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Downloader; /** * @author Jordi Boggiano */ class TransportException extends \RuntimeException { protected $headers; protected $response; protected $statusCode; public function setHeaders($headers) { $this->headers = $headers; } public function getHeaders() { return $this->headers; } public function setResponse($response) { $this->response = $response; } public function getResponse() { return $this->response; } public function setStatusCode($statusCode) { $this->statusCode = $statusCode; } public function getStatusCode() { return $this->statusCode; } } composer-1.0.0-beta2/src/Composer/Downloader/VcsDownloader.php000066400000000000000000000220231267577262200243100ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Downloader; use Composer\Config; use Composer\Package\PackageInterface; use Composer\Util\ProcessExecutor; use Composer\IO\IOInterface; use Composer\Util\Filesystem; /** * @author Jordi Boggiano */ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterface { /** @var IOInterface */ protected $io; /** @var Config */ protected $config; /** @var ProcessExecutor */ protected $process; /** @var Filesystem */ protected $filesystem; public function __construct(IOInterface $io, Config $config, ProcessExecutor $process = null, Filesystem $fs = null) { $this->io = $io; $this->config = $config; $this->process = $process ?: new ProcessExecutor($io); $this->filesystem = $fs ?: new Filesystem($this->process); } /** * {@inheritDoc} */ public function getInstallationSource() { return 'source'; } /** * {@inheritDoc} */ public function download(PackageInterface $package, $path) { if (!$package->getSourceReference()) { throw new \InvalidArgumentException('Package '.$package->getPrettyName().' is missing reference information'); } $this->io->writeError(" - Installing " . $package->getName() . " (" . $package->getFullPrettyVersion() . ")"); $this->filesystem->emptyDirectory($path); $urls = $package->getSourceUrls(); while ($url = array_shift($urls)) { try { if (Filesystem::isLocalPath($url)) { $url = realpath($url); } $this->doDownload($package, $path, $url); break; } catch (\Exception $e) { // rethrow phpunit exceptions to avoid hard to debug bug failures if ($e instanceof \PHPUnit_Framework_Exception) { throw $e; } if ($this->io->isDebug()) { $this->io->writeError('Failed: ['.get_class($e).'] '.$e->getMessage()); } elseif (count($urls)) { $this->io->writeError(' Failed, trying the next URL'); } if (!count($urls)) { throw $e; } } } $this->io->writeError(''); } /** * {@inheritDoc} */ public function update(PackageInterface $initial, PackageInterface $target, $path) { if (!$target->getSourceReference()) { throw new \InvalidArgumentException('Package '.$target->getPrettyName().' is missing reference information'); } $name = $target->getName(); if ($initial->getPrettyVersion() == $target->getPrettyVersion()) { if ($target->getSourceType() === 'svn') { $from = $initial->getSourceReference(); $to = $target->getSourceReference(); } else { $from = substr($initial->getSourceReference(), 0, 7); $to = substr($target->getSourceReference(), 0, 7); } $name .= ' '.$initial->getPrettyVersion(); } else { $from = $initial->getFullPrettyVersion(); $to = $target->getFullPrettyVersion(); } $this->io->writeError(" - Updating " . $name . " (" . $from . " => " . $to . ")"); $this->cleanChanges($initial, $path, true); $urls = $target->getSourceUrls(); $exception = null; while ($url = array_shift($urls)) { try { if (Filesystem::isLocalPath($url)) { $url = realpath($url); } $this->doUpdate($initial, $target, $path, $url); $exception = null; break; } catch (\Exception $exception) { // rethrow phpunit exceptions to avoid hard to debug bug failures if ($exception instanceof \PHPUnit_Framework_Exception) { throw $exception; } if ($this->io->isDebug()) { $this->io->writeError('Failed: ['.get_class($exception).'] '.$exception->getMessage()); } elseif (count($urls)) { $this->io->writeError(' Failed, trying the next URL'); } } } $this->reapplyChanges($path); // print the commit logs if in verbose mode and VCS metadata is present // because in case of missing metadata code would trigger another exception if (!$exception && $this->io->isVerbose() && $this->hasMetadataRepository($path)) { $message = 'Pulling in changes:'; $logs = $this->getCommitLogs($initial->getSourceReference(), $target->getSourceReference(), $path); if (!trim($logs)) { $message = 'Rolling back changes:'; $logs = $this->getCommitLogs($target->getSourceReference(), $initial->getSourceReference(), $path); } if (trim($logs)) { $logs = implode("\n", array_map(function ($line) { return ' ' . $line; }, explode("\n", $logs))); // escape angle brackets for proper output in the console $logs = str_replace('<', '\<', $logs); $this->io->writeError(' '.$message); $this->io->writeError($logs); } } if (!$urls && $exception) { throw $exception; } $this->io->writeError(''); } /** * {@inheritDoc} */ public function remove(PackageInterface $package, $path) { $this->io->writeError(" - Removing " . $package->getName() . " (" . $package->getPrettyVersion() . ")"); $this->cleanChanges($package, $path, false); if (!$this->filesystem->removeDirectory($path)) { throw new \RuntimeException('Could not completely delete '.$path.', aborting.'); } } /** * Download progress information is not available for all VCS downloaders. * {@inheritDoc} */ public function setOutputProgress($outputProgress) { return $this; } /** * Prompt the user to check if changes should be stashed/removed or the operation aborted * * @param PackageInterface $package * @param string $path * @param bool $update if true (update) the changes can be stashed and reapplied after an update, * if false (remove) the changes should be assumed to be lost if the operation is not aborted * @throws \RuntimeException in case the operation must be aborted */ protected function cleanChanges(PackageInterface $package, $path, $update) { // the default implementation just fails if there are any changes, override in child classes to provide stash-ability if (null !== $this->getLocalChanges($package, $path)) { throw new \RuntimeException('Source directory ' . $path . ' has uncommitted changes.'); } } /** * Guarantee that no changes have been made to the local copy * * @param string $path * @throws \RuntimeException in case the operation must be aborted or the patch does not apply cleanly */ protected function reapplyChanges($path) { } /** * Downloads specific package into specific folder. * * @param PackageInterface $package package instance * @param string $path download path * @param string $url package url */ abstract protected function doDownload(PackageInterface $package, $path, $url); /** * Updates specific package in specific folder from initial to target version. * * @param PackageInterface $initial initial package * @param PackageInterface $target updated package * @param string $path download path * @param string $url package url */ abstract protected function doUpdate(PackageInterface $initial, PackageInterface $target, $path, $url); /** * Fetches the commit logs between two commits * * @param string $fromReference the source reference * @param string $toReference the target reference * @param string $path the package path * @return string */ abstract protected function getCommitLogs($fromReference, $toReference, $path); /** * Checks if VCS metadata repository has been initialized * repository example: .git|.svn|.hg * * @param string $path * @return bool */ abstract protected function hasMetadataRepository($path); } composer-1.0.0-beta2/src/Composer/Downloader/XzDownloader.php000066400000000000000000000032631267577262200241630ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Downloader; use Composer\Config; use Composer\Cache; use Composer\EventDispatcher\EventDispatcher; use Composer\Package\PackageInterface; use Composer\Util\ProcessExecutor; use Composer\Util\RemoteFilesystem; use Composer\IO\IOInterface; /** * Xz archive downloader. * * @author Pavel Puchkin * @author Pierre Rudloff */ class XzDownloader extends ArchiveDownloader { protected $process; public function __construct(IOInterface $io, Config $config, EventDispatcher $eventDispatcher = null, Cache $cache = null, ProcessExecutor $process = null, RemoteFilesystem $rfs = null) { $this->process = $process ?: new ProcessExecutor($io); parent::__construct($io, $config, $eventDispatcher, $cache, $rfs); } protected function extract($file, $path) { $command = 'tar -xJf ' . ProcessExecutor::escape($file) . ' -C ' . ProcessExecutor::escape($path); if (0 === $this->process->execute($command, $ignoredOutput)) { return; } $processError = 'Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput(); throw new \RuntimeException($processError); } /** * {@inheritdoc} */ protected function getFileName(PackageInterface $package, $path) { return $path.'/'.pathinfo(parse_url($package->getDistUrl(), PHP_URL_PATH), PATHINFO_BASENAME); } } composer-1.0.0-beta2/src/Composer/Downloader/ZipDownloader.php000066400000000000000000000113751267577262200243270ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Downloader; use Composer\Config; use Composer\Cache; use Composer\EventDispatcher\EventDispatcher; use Composer\Package\PackageInterface; use Composer\Util\Platform; use Composer\Util\ProcessExecutor; use Composer\Util\RemoteFilesystem; use Composer\IO\IOInterface; use Symfony\Component\Process\ExecutableFinder; use ZipArchive; /** * @author Jordi Boggiano */ class ZipDownloader extends ArchiveDownloader { protected $process; protected static $hasSystemUnzip; public function __construct(IOInterface $io, Config $config, EventDispatcher $eventDispatcher = null, Cache $cache = null, ProcessExecutor $process = null, RemoteFilesystem $rfs = null) { $this->process = $process ?: new ProcessExecutor($io); parent::__construct($io, $config, $eventDispatcher, $cache, $rfs); } /** * {@inheritDoc} */ public function download(PackageInterface $package, $path) { if (null === self::$hasSystemUnzip) { $finder = new ExecutableFinder; self::$hasSystemUnzip = (bool) $finder->find('unzip'); } if (!class_exists('ZipArchive') && !self::$hasSystemUnzip) { // php.ini path is added to the error message to help users find the correct file $iniPath = php_ini_loaded_file(); if ($iniPath) { $iniMessage = 'The php.ini used by your command-line PHP is: ' . $iniPath; } else { $iniMessage = 'A php.ini file does not exist. You will have to create one.'; } $error = "The zip extension and unzip command are both missing, skipping.\n" . $iniMessage; throw new \RuntimeException($error); } return parent::download($package, $path); } protected function extract($file, $path) { $processError = null; if (self::$hasSystemUnzip && !(class_exists('ZipArchive') && Platform::isWindows())) { $command = 'unzip '.ProcessExecutor::escape($file).' -d '.ProcessExecutor::escape($path); if (!Platform::isWindows()) { $command .= ' && chmod -R u+w ' . ProcessExecutor::escape($path); } try { if (0 === $this->process->execute($command, $ignoredOutput)) { return; } $processError = 'Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput(); } catch (\Exception $e) { $processError = 'Failed to execute ' . $command . "\n\n" . $e->getMessage(); } if (!class_exists('ZipArchive')) { throw new \RuntimeException($processError); } } $zipArchive = new ZipArchive(); if (true !== ($retval = $zipArchive->open($file))) { throw new \UnexpectedValueException(rtrim($this->getErrorMessage($retval, $file)."\n".$processError), $retval); } if (true !== $zipArchive->extractTo($path)) { throw new \RuntimeException(rtrim("There was an error extracting the ZIP file, it is either corrupted or using an invalid format.\n".$processError)); } $zipArchive->close(); } /** * Give a meaningful error message to the user. * * @param int $retval * @param string $file * @return string */ protected function getErrorMessage($retval, $file) { switch ($retval) { case ZipArchive::ER_EXISTS: return sprintf("File '%s' already exists.", $file); case ZipArchive::ER_INCONS: return sprintf("Zip archive '%s' is inconsistent.", $file); case ZipArchive::ER_INVAL: return sprintf("Invalid argument (%s)", $file); case ZipArchive::ER_MEMORY: return sprintf("Malloc failure (%s)", $file); case ZipArchive::ER_NOENT: return sprintf("No such zip file: '%s'", $file); case ZipArchive::ER_NOZIP: return sprintf("'%s' is not a zip archive.", $file); case ZipArchive::ER_OPEN: return sprintf("Can't open zip file: %s", $file); case ZipArchive::ER_READ: return sprintf("Zip read error (%s)", $file); case ZipArchive::ER_SEEK: return sprintf("Zip seek error (%s)", $file); default: return sprintf("'%s' is not a valid zip archive, got error code: %s", $file, $retval); } } } composer-1.0.0-beta2/src/Composer/EventDispatcher/000077500000000000000000000000001267577262200220205ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/EventDispatcher/Event.php000066400000000000000000000041461267577262200236170ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\EventDispatcher; /** * The base event class * * @author Nils Adermann */ class Event { /** * @var string This event's name */ protected $name; /** * @var array Arguments passed by the user, these will be forwarded to CLI script handlers */ protected $args; /** * @var array Flags usable in PHP script handlers */ protected $flags; /** * @var bool Whether the event should not be passed to more listeners */ private $propagationStopped = false; /** * Constructor. * * @param string $name The event name * @param array $args Arguments passed by the user * @param array $flags Optional flags to pass data not as argument */ public function __construct($name, array $args = array(), array $flags = array()) { $this->name = $name; $this->args = $args; $this->flags = $flags; } /** * Returns the event's name. * * @return string The event name */ public function getName() { return $this->name; } /** * Returns the event's arguments. * * @return array The event arguments */ public function getArguments() { return $this->args; } /** * Returns the event's flags. * * @return array The event flags */ public function getFlags() { return $this->flags; } /** * Checks if stopPropagation has been called * * @return bool Whether propagation has been stopped */ public function isPropagationStopped() { return $this->propagationStopped; } /** * Prevents the event from being passed to further listeners */ public function stopPropagation() { $this->propagationStopped = true; } } composer-1.0.0-beta2/src/Composer/EventDispatcher/EventDispatcher.php000066400000000000000000000375601267577262200256340ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\EventDispatcher; use Composer\DependencyResolver\PolicyInterface; use Composer\DependencyResolver\Pool; use Composer\DependencyResolver\Request; use Composer\Installer\InstallerEvent; use Composer\IO\IOInterface; use Composer\Composer; use Composer\DependencyResolver\Operation\OperationInterface; use Composer\Repository\CompositeRepository; use Composer\Script; use Composer\Script\CommandEvent; use Composer\Script\PackageEvent; use Composer\Util\ProcessExecutor; /** * The Event Dispatcher. * * Example in command: * $dispatcher = new EventDispatcher($this->getComposer(), $this->getApplication()->getIO()); * // ... * $dispatcher->dispatch(ScriptEvents::POST_INSTALL_CMD); * // ... * * @author François Pluchino * @author Jordi Boggiano * @author Nils Adermann */ class EventDispatcher { protected $composer; protected $io; protected $loader; protected $process; protected $listeners; private $eventStack; /** * Constructor. * * @param Composer $composer The composer instance * @param IOInterface $io The IOInterface instance * @param ProcessExecutor $process */ public function __construct(Composer $composer, IOInterface $io, ProcessExecutor $process = null) { $this->composer = $composer; $this->io = $io; $this->process = $process ?: new ProcessExecutor($io); $this->eventStack = array(); } /** * Dispatch an event * * @param string $eventName An event name * @param Event $event * @return int return code of the executed script if any, for php scripts a false return * value is changed to 1, anything else to 0 */ public function dispatch($eventName, Event $event = null) { if (null == $event) { $event = new Event($eventName); } return $this->doDispatch($event); } /** * Dispatch a script event. * * @param string $eventName The constant in ScriptEvents * @param bool $devMode * @param array $additionalArgs Arguments passed by the user * @param array $flags Optional flags to pass data not as argument * @return int return code of the executed script if any, for php scripts a false return * value is changed to 1, anything else to 0 */ public function dispatchScript($eventName, $devMode = false, $additionalArgs = array(), $flags = array()) { return $this->doDispatch(new Script\Event($eventName, $this->composer, $this->io, $devMode, $additionalArgs, $flags)); } /** * Dispatch a package event. * * @param string $eventName The constant in PackageEvents * @param bool $devMode Whether or not we are in dev mode * @param PolicyInterface $policy The policy * @param Pool $pool The pool * @param CompositeRepository $installedRepo The installed repository * @param Request $request The request * @param array $operations The list of operations * @param OperationInterface $operation The package being installed/updated/removed * * @return int return code of the executed script if any, for php scripts a false return * value is changed to 1, anything else to 0 */ public function dispatchPackageEvent($eventName, $devMode, PolicyInterface $policy, Pool $pool, CompositeRepository $installedRepo, Request $request, array $operations, OperationInterface $operation) { return $this->doDispatch(new PackageEvent($eventName, $this->composer, $this->io, $devMode, $policy, $pool, $installedRepo, $request, $operations, $operation)); } /** * Dispatch a installer event. * * @param string $eventName The constant in InstallerEvents * @param bool $devMode Whether or not we are in dev mode * @param PolicyInterface $policy The policy * @param Pool $pool The pool * @param CompositeRepository $installedRepo The installed repository * @param Request $request The request * @param array $operations The list of operations * * @return int return code of the executed script if any, for php scripts a false return * value is changed to 1, anything else to 0 */ public function dispatchInstallerEvent($eventName, $devMode, PolicyInterface $policy, Pool $pool, CompositeRepository $installedRepo, Request $request, array $operations = array()) { return $this->doDispatch(new InstallerEvent($eventName, $this->composer, $this->io, $devMode, $policy, $pool, $installedRepo, $request, $operations)); } /** * Triggers the listeners of an event. * * @param Event $event The event object to pass to the event handlers/listeners. * @param string $additionalArgs * @throws \RuntimeException * @throws \Exception * @return int return code of the executed script if any, for php scripts a false return * value is changed to 1, anything else to 0 */ protected function doDispatch(Event $event) { $pathStr = 'PATH'; if (!isset($_SERVER[$pathStr]) && isset($_SERVER['Path'])) { $pathStr = 'Path'; } // add the bin dir to the PATH to make local binaries of deps usable in scripts $binDir = $this->composer->getConfig()->get('bin-dir'); if (is_dir($binDir)) { $binDir = realpath($binDir); if (isset($_SERVER[$pathStr]) && !preg_match('{(^|'.PATH_SEPARATOR.')'.preg_quote($binDir).'($|'.PATH_SEPARATOR.')}', $_SERVER[$pathStr])) { $_SERVER[$pathStr] = $binDir.PATH_SEPARATOR.getenv($pathStr); putenv($pathStr.'='.$_SERVER[$pathStr]); } } $listeners = $this->getListeners($event); $this->pushEvent($event); $return = 0; foreach ($listeners as $callable) { if (!is_string($callable) && is_callable($callable)) { $event = $this->checkListenerExpectedEvent($callable, $event); $return = false === call_user_func($callable, $event) ? 1 : 0; } elseif ($this->isComposerScript($callable)) { $this->io->writeError(sprintf('> %s: %s', $event->getName(), $callable), true, IOInterface::VERBOSE); $scriptName = substr($callable, 1); $args = $event->getArguments(); $flags = $event->getFlags(); $return = $this->dispatch($scriptName, new Script\Event($scriptName, $event->getComposer(), $event->getIO(), $event->isDevMode(), $args, $flags)); } elseif ($this->isPhpScript($callable)) { $className = substr($callable, 0, strpos($callable, '::')); $methodName = substr($callable, strpos($callable, '::') + 2); if (!class_exists($className)) { $this->io->writeError('Class '.$className.' is not autoloadable, can not call '.$event->getName().' script'); continue; } if (!is_callable($callable)) { $this->io->writeError('Method '.$callable.' is not callable, can not call '.$event->getName().' script'); continue; } try { $return = false === $this->executeEventPhpScript($className, $methodName, $event) ? 1 : 0; } catch (\Exception $e) { $message = "Script %s handling the %s event terminated with an exception"; $this->io->writeError(''.sprintf($message, $callable, $event->getName()).''); throw $e; } } else { $args = implode(' ', array_map(array('Composer\Util\ProcessExecutor', 'escape'), $event->getArguments())); $exec = $callable . ($args === '' ? '' : ' '.$args); if ($this->io->isVerbose()) { $this->io->writeError(sprintf('> %s: %s', $event->getName(), $exec)); } else { $this->io->writeError(sprintf('> %s', $exec)); } if (0 !== ($exitCode = $this->process->execute($exec))) { $this->io->writeError(sprintf('Script %s handling the %s event returned with an error', $callable, $event->getName())); throw new \RuntimeException('Error Output: '.$this->process->getErrorOutput(), $exitCode); } } if ($event->isPropagationStopped()) { break; } } $this->popEvent(); return $return; } /** * @param string $className * @param string $methodName * @param Event $event Event invoking the PHP callable */ protected function executeEventPhpScript($className, $methodName, Event $event) { $event = $this->checkListenerExpectedEvent(array($className, $methodName), $event); if ($this->io->isVerbose()) { $this->io->writeError(sprintf('> %s: %s::%s', $event->getName(), $className, $methodName)); } else { $this->io->writeError(sprintf('> %s::%s', $className, $methodName)); } return $className::$methodName($event); } /** * @param mixed $target * @param Event $event * @return Event|CommandEvent */ protected function checkListenerExpectedEvent($target, Event $event) { try { $reflected = new \ReflectionParameter($target, 0); } catch (\Exception $e) { return $event; } $typehint = $reflected->getClass(); if (!$typehint instanceof \ReflectionClass) { return $event; } $expected = $typehint->getName(); // BC support if (!$event instanceof $expected && $expected === 'Composer\Script\CommandEvent') { $event = new \Composer\Script\CommandEvent( $event->getName(), $event->getComposer(), $event->getIO(), $event->isDevMode(), $event->getArguments() ); } if (!$event instanceof $expected && $expected === 'Composer\Script\PackageEvent') { $event = new \Composer\Script\PackageEvent( $event->getName(), $event->getComposer(), $event->getIO(), $event->isDevMode(), $event->getPolicy(), $event->getPool(), $event->getInstalledRepo(), $event->getRequest(), $event->getOperations(), $event->getOperation() ); } if (!$event instanceof $expected && $expected === 'Composer\Script\Event') { $event = new \Composer\Script\Event( $event->getName(), $event->getComposer(), $event->getIO(), $event->isDevMode(), $event->getArguments(), $event->getFlags() ); } return $event; } /** * Add a listener for a particular event * * @param string $eventName The event name - typically a constant * @param Callable $listener A callable expecting an event argument * @param int $priority A higher value represents a higher priority */ public function addListener($eventName, $listener, $priority = 0) { $this->listeners[$eventName][$priority][] = $listener; } /** * Adds object methods as listeners for the events in getSubscribedEvents * * @see EventSubscriberInterface * * @param EventSubscriberInterface $subscriber */ public function addSubscriber(EventSubscriberInterface $subscriber) { foreach ($subscriber->getSubscribedEvents() as $eventName => $params) { if (is_string($params)) { $this->addListener($eventName, array($subscriber, $params)); } elseif (is_string($params[0])) { $this->addListener($eventName, array($subscriber, $params[0]), isset($params[1]) ? $params[1] : 0); } else { foreach ($params as $listener) { $this->addListener($eventName, array($subscriber, $listener[0]), isset($listener[1]) ? $listener[1] : 0); } } } } /** * Retrieves all listeners for a given event * * @param Event $event * @return array All listeners: callables and scripts */ protected function getListeners(Event $event) { $scriptListeners = $this->getScriptListeners($event); if (!isset($this->listeners[$event->getName()][0])) { $this->listeners[$event->getName()][0] = array(); } krsort($this->listeners[$event->getName()]); $listeners = $this->listeners; $listeners[$event->getName()][0] = array_merge($listeners[$event->getName()][0], $scriptListeners); return call_user_func_array('array_merge', $listeners[$event->getName()]); } /** * Checks if an event has listeners registered * * @param Event $event * @return bool */ public function hasEventListeners(Event $event) { $listeners = $this->getListeners($event); return count($listeners) > 0; } /** * Finds all listeners defined as scripts in the package * * @param Event $event Event object * @return array Listeners */ protected function getScriptListeners(Event $event) { $package = $this->composer->getPackage(); $scripts = $package->getScripts(); if (empty($scripts[$event->getName()])) { return array(); } if ($this->loader) { $this->loader->unregister(); } $generator = $this->composer->getAutoloadGenerator(); $packages = $this->composer->getRepositoryManager()->getLocalRepository()->getCanonicalPackages(); $packageMap = $generator->buildPackageMap($this->composer->getInstallationManager(), $package, $packages); $map = $generator->parseAutoloads($packageMap, $package); $this->loader = $generator->createLoader($map); $this->loader->register(); return $scripts[$event->getName()]; } /** * Checks if string given references a class path and method * * @param string $callable * @return bool */ protected function isPhpScript($callable) { return false === strpos($callable, ' ') && false !== strpos($callable, '::'); } /** * Checks if string given references a composer run-script * * @param string $callable * @return bool */ protected function isComposerScript($callable) { return '@' === substr($callable, 0, 1); } /** * Push an event to the stack of active event * * @param Event $event * @throws \RuntimeException * @return number */ protected function pushEvent(Event $event) { $eventName = $event->getName(); if (in_array($eventName, $this->eventStack)) { throw new \RuntimeException(sprintf("Circular call to script handler '%s' detected", $eventName)); } return array_push($this->eventStack, $eventName); } /** * Pops the active event from the stack * * @return mixed */ protected function popEvent() { return array_pop($this->eventStack); } } composer-1.0.0-beta2/src/Composer/EventDispatcher/EventSubscriberInterface.php000066400000000000000000000030211267577262200274530ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\EventDispatcher; /** * An EventSubscriber knows which events it is interested in. * * If an EventSubscriber is added to an EventDispatcher, the manager invokes * {@link getSubscribedEvents} and registers the subscriber as a listener for all * returned events. * * @author Guilherme Blanco * @author Jonathan Wage * @author Roman Borschel * @author Bernhard Schussek */ interface EventSubscriberInterface { /** * Returns an array of event names this subscriber wants to listen to. * * The array keys are event names and the value can be: * * * The method name to call (priority defaults to 0) * * An array composed of the method name to call and the priority * * An array of arrays composed of the method names to call and respective * priorities, or 0 if unset * * For instance: * * * array('eventName' => 'methodName') * * array('eventName' => array('methodName', $priority)) * * array('eventName' => array(array('methodName1', $priority), array('methodName2')) * * @return array The event names to listen to */ public static function getSubscribedEvents(); } composer-1.0.0-beta2/src/Composer/Factory.php000066400000000000000000000543451267577262200210630ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer; use Composer\Config\JsonConfigSource; use Composer\Json\JsonFile; use Composer\IO\IOInterface; use Composer\Package\Archiver; use Composer\Package\Version\VersionGuesser; use Composer\Repository\RepositoryManager; use Composer\Repository\RepositoryFactory; use Composer\Repository\WritableRepositoryInterface; use Composer\Util\Filesystem; use Composer\Util\Platform; use Composer\Util\ProcessExecutor; use Composer\Util\RemoteFilesystem; use Composer\Util\Silencer; use Symfony\Component\Console\Formatter\OutputFormatterStyle; use Composer\EventDispatcher\EventDispatcher; use Composer\Autoload\AutoloadGenerator; use Composer\Package\Version\VersionParser; use Composer\Downloader\TransportException; use Seld\JsonLint\JsonParser; /** * Creates a configured instance of composer. * * @author Ryan Weaver * @author Jordi Boggiano * @author Igor Wiedler * @author Nils Adermann */ class Factory { /** * @throws \RuntimeException * @return string */ protected static function getHomeDir() { $home = getenv('COMPOSER_HOME'); if ($home) { return $home; } if (Platform::isWindows()) { if (!getenv('APPDATA')) { throw new \RuntimeException('The APPDATA or COMPOSER_HOME environment variable must be set for composer to run correctly'); } return rtrim(strtr(getenv('APPDATA'), '\\', '/'), '/') . '/Composer'; } $userDir = self::getUserDir(); if (is_dir($userDir . '/.composer')) { return $userDir . '/.composer'; } if (self::useXdg()) { // XDG Base Directory Specifications $xdgConfig = getenv('XDG_CONFIG_HOME') ?: $userDir . '/.config'; return $xdgConfig . '/composer'; } return $userDir . '/.composer'; } /** * @param string $home * @return string */ protected static function getCacheDir($home) { $cacheDir = getenv('COMPOSER_CACHE_DIR'); if ($cacheDir) { return $cacheDir; } $homeEnv = getenv('COMPOSER_HOME'); if ($homeEnv) { return $homeEnv . '/cache'; } if (Platform::isWindows()) { if ($cacheDir = getenv('LOCALAPPDATA')) { $cacheDir .= '/Composer'; } else { $cacheDir = $home . '/cache'; } return rtrim(strtr($cacheDir, '\\', '/'), '/'); } $userDir = self::getUserDir(); if ($home === $userDir . '/.composer' && is_dir($home . '/cache')) { return $home . '/cache'; } if (self::useXdg()) { $xdgCache = getenv('XDG_CACHE_HOME') ?: $userDir . '/.cache'; return $xdgCache . '/composer'; } return $home . '/cache'; } /** * @param string $home * @return string */ protected static function getDataDir($home) { $homeEnv = getenv('COMPOSER_HOME'); if ($homeEnv) { return $homeEnv; } if (Platform::isWindows()) { return strtr($home, '\\', '/'); } $userDir = self::getUserDir(); if ($home !== $userDir . '/.composer' && self::useXdg()) { $xdgData = getenv('XDG_DATA_HOME') ?: $userDir . '/.local/share'; return $xdgData . '/composer'; } return $home; } /** * @param IOInterface|null $io * @return Config */ public static function createConfig(IOInterface $io = null, $cwd = null) { $cwd = $cwd ?: getcwd(); $config = new Config(true, $cwd); // determine and add main dirs to the config $home = self::getHomeDir(); $config->merge(array('config' => array( 'home' => $home, 'cache-dir' => self::getCacheDir($home), 'data-dir' => self::getDataDir($home), ))); // Protect directory against web access. Since HOME could be // the www-data's user home and be web-accessible it is a // potential security risk $dirs = array($config->get('home'), $config->get('cache-dir'), $config->get('data-dir')); foreach ($dirs as $dir) { if (!file_exists($dir . '/.htaccess')) { if (!is_dir($dir)) { Silencer::call('mkdir', $dir, 0777, true); } Silencer::call('file_put_contents', $dir . '/.htaccess', 'Deny from all'); } } // load global config $file = new JsonFile($config->get('home').'/config.json'); if ($file->exists()) { if ($io && $io->isDebug()) { $io->writeError('Loading config file ' . $file->getPath()); } $config->merge($file->read()); } $config->setConfigSource(new JsonConfigSource($file)); // load global auth file $file = new JsonFile($config->get('home').'/auth.json'); if ($file->exists()) { if ($io && $io->isDebug()) { $io->writeError('Loading config file ' . $file->getPath()); } $config->merge(array('config' => $file->read())); } $config->setAuthConfigSource(new JsonConfigSource($file, true)); // load COMPOSER_AUTH environment variable if set if ($composerAuthEnv = getenv('COMPOSER_AUTH')) { $authData = json_decode($composerAuthEnv, true); if (is_null($authData)) { throw new \UnexpectedValueException('COMPOSER_AUTH environment variable is malformed, should be a valid JSON object'); } if ($io && $io->isDebug()) { $io->writeError('Loading auth config from COMPOSER_AUTH'); } $config->merge(array('config' => $authData)); } return $config; } public static function getComposerFile() { return trim(getenv('COMPOSER')) ?: './composer.json'; } public static function createAdditionalStyles() { return array( 'highlight' => new OutputFormatterStyle('red'), 'warning' => new OutputFormatterStyle('black', 'yellow'), ); } /** * @deprecated Use Composer\Repository\RepositoryFactory::defaultRepos instead */ public static function createDefaultRepositories(IOInterface $io = null, Config $config = null, RepositoryManager $rm = null) { return RepositoryFactory::defaultRepos($io, $config, $rm); } /** * Creates a Composer instance * * @param IOInterface $io IO instance * @param array|string|null $localConfig either a configuration array or a filename to read from, if null it will * read from the default filename * @param bool $disablePlugins Whether plugins should not be loaded * @param bool $fullLoad Whether to initialize everything or only main project stuff (used when loading the global composer) * @throws \InvalidArgumentException * @throws \UnexpectedValueException * @return Composer */ public function createComposer(IOInterface $io, $localConfig = null, $disablePlugins = false, $cwd = null, $fullLoad = true) { $cwd = $cwd ?: getcwd(); // load Composer configuration if (null === $localConfig) { $localConfig = static::getComposerFile(); } if (is_string($localConfig)) { $composerFile = $localConfig; $file = new JsonFile($localConfig, null, $io); if (!$file->exists()) { if ($localConfig === './composer.json' || $localConfig === 'composer.json') { $message = 'Composer could not find a composer.json file in '.$cwd; } else { $message = 'Composer could not find the config file: '.$localConfig; } $instructions = 'To initialize a project, please create a composer.json file as described in the https://getcomposer.org/ "Getting Started" section'; throw new \InvalidArgumentException($message.PHP_EOL.$instructions); } $file->validateSchema(JsonFile::LAX_SCHEMA); $jsonParser = new JsonParser; try { $jsonParser->parse(file_get_contents($localConfig), JsonParser::DETECT_KEY_CONFLICTS); } catch (\Seld\JsonLint\DuplicateKeyException $e) { $details = $e->getDetails(); $io->writeError('Key '.$details['key'].' is a duplicate in '.$localConfig.' at line '.$details['line'].''); } $localConfig = $file->read(); } // Load config and override with local config/auth config $config = static::createConfig($io, $cwd); $config->merge($localConfig); if (isset($composerFile)) { $io->writeError('Loading config file ' . $composerFile, true, IOInterface::DEBUG); $localAuthFile = new JsonFile(dirname(realpath($composerFile)) . '/auth.json'); if ($localAuthFile->exists()) { $io->writeError('Loading config file ' . $localAuthFile->getPath(), true, IOInterface::DEBUG); $config->merge(array('config' => $localAuthFile->read())); $config->setAuthConfigSource(new JsonConfigSource($localAuthFile, true)); } } $vendorDir = $config->get('vendor-dir'); $binDir = $config->get('bin-dir'); // initialize composer $composer = new Composer(); $composer->setConfig($config); if ($fullLoad) { // load auth configs into the IO instance $io->loadConfiguration($config); } $rfs = self::createRemoteFilesystem($io, $config); // initialize event dispatcher $dispatcher = new EventDispatcher($composer, $io); $composer->setEventDispatcher($dispatcher); // initialize repository manager $rm = RepositoryFactory::manager($io, $config, $dispatcher, $rfs); $composer->setRepositoryManager($rm); // load local repository $this->addLocalRepository($io, $rm, $vendorDir); // force-set the version of the global package if not defined as // guessing it adds no value and only takes time if (!$fullLoad && !isset($localConfig['version'])) { $localConfig['version'] = '1.0.0'; } // load package $parser = new VersionParser; $guesser = new VersionGuesser($config, new ProcessExecutor($io), $parser); $loader = new Package\Loader\RootPackageLoader($rm, $config, $parser, $guesser); $package = $loader->load($localConfig, 'Composer\Package\RootPackage', $cwd); $composer->setPackage($package); // initialize installation manager $im = $this->createInstallationManager(); $composer->setInstallationManager($im); if ($fullLoad) { // initialize download manager $dm = $this->createDownloadManager($io, $config, $dispatcher, $rfs); $composer->setDownloadManager($dm); // initialize autoload generator $generator = new AutoloadGenerator($dispatcher, $io); $composer->setAutoloadGenerator($generator); } // add installers to the manager (must happen after download manager is created since they read it out of $composer) $this->createDefaultInstallers($im, $composer, $io); if ($fullLoad) { $globalComposer = $this->createGlobalComposer($io, $config, $disablePlugins); $pm = $this->createPluginManager($io, $composer, $globalComposer, $disablePlugins); $composer->setPluginManager($pm); $pm->loadInstalledPlugins(); // once we have plugins and custom installers we can // purge packages from local repos if they have been deleted on the filesystem if ($rm->getLocalRepository()) { $this->purgePackages($rm->getLocalRepository(), $im); } } // init locker if possible if ($fullLoad && isset($composerFile)) { $lockFile = "json" === pathinfo($composerFile, PATHINFO_EXTENSION) ? substr($composerFile, 0, -4).'lock' : $composerFile . '.lock'; $locker = new Package\Locker($io, new JsonFile($lockFile, null, $io), $rm, $im, file_get_contents($composerFile)); $composer->setLocker($locker); } return $composer; } /** * @param Repository\RepositoryManager $rm * @param string $vendorDir */ protected function addLocalRepository(IOInterface $io, RepositoryManager $rm, $vendorDir) { $rm->setLocalRepository(new Repository\InstalledFilesystemRepository(new JsonFile($vendorDir.'/composer/installed.json', null, $io))); } /** * @param Config $config * @return Composer|null */ protected function createGlobalComposer(IOInterface $io, Config $config, $disablePlugins) { if (realpath($config->get('home')) === getcwd()) { return; } $composer = null; try { $composer = self::createComposer($io, $config->get('home') . '/composer.json', $disablePlugins, $config->get('home'), false); } catch (\Exception $e) { $io->writeError('Failed to initialize global composer: '.$e->getMessage(), true, IOInterface::DEBUG); } return $composer; } /** * @param IO\IOInterface $io * @param Config $config * @param EventDispatcher $eventDispatcher * @return Downloader\DownloadManager */ public function createDownloadManager(IOInterface $io, Config $config, EventDispatcher $eventDispatcher = null, RemoteFilesystem $rfs = null) { $cache = null; if ($config->get('cache-files-ttl') > 0) { $cache = new Cache($io, $config->get('cache-files-dir'), 'a-z0-9_./'); } $dm = new Downloader\DownloadManager($io); switch ($preferred = $config->get('preferred-install')) { case 'dist': $dm->setPreferDist(true); break; case 'source': $dm->setPreferSource(true); break; case 'auto': default: // noop break; } if (is_array($preferred)) { $dm->setPreferences($preferred); } $executor = new ProcessExecutor($io); $fs = new Filesystem($executor); $dm->setDownloader('git', new Downloader\GitDownloader($io, $config, $executor, $fs)); $dm->setDownloader('svn', new Downloader\SvnDownloader($io, $config, $executor, $fs)); $dm->setDownloader('hg', new Downloader\HgDownloader($io, $config, $executor, $fs)); $dm->setDownloader('perforce', new Downloader\PerforceDownloader($io, $config)); $dm->setDownloader('zip', new Downloader\ZipDownloader($io, $config, $eventDispatcher, $cache, $executor, $rfs)); $dm->setDownloader('rar', new Downloader\RarDownloader($io, $config, $eventDispatcher, $cache, $executor, $rfs)); $dm->setDownloader('tar', new Downloader\TarDownloader($io, $config, $eventDispatcher, $cache, $rfs)); $dm->setDownloader('gzip', new Downloader\GzipDownloader($io, $config, $eventDispatcher, $cache, $executor, $rfs)); $dm->setDownloader('xz', new Downloader\XzDownloader($io, $config, $eventDispatcher, $cache, $executor, $rfs)); $dm->setDownloader('phar', new Downloader\PharDownloader($io, $config, $eventDispatcher, $cache, $rfs)); $dm->setDownloader('file', new Downloader\FileDownloader($io, $config, $eventDispatcher, $cache, $rfs)); $dm->setDownloader('path', new Downloader\PathDownloader($io, $config, $eventDispatcher, $cache, $rfs)); return $dm; } /** * @param Config $config The configuration * @param Downloader\DownloadManager $dm Manager use to download sources * @return Archiver\ArchiveManager */ public function createArchiveManager(Config $config, Downloader\DownloadManager $dm = null) { if (null === $dm) { $io = new IO\NullIO(); $io->loadConfiguration($config); $dm = $this->createDownloadManager($io, $config); } $am = new Archiver\ArchiveManager($dm); $am->addArchiver(new Archiver\ZipArchiver); $am->addArchiver(new Archiver\PharArchiver); return $am; } /** * @param IOInterface $io * @param Composer $composer * @param Composer $globalComposer * @param bool $disablePlugins * @return Plugin\PluginManager */ protected function createPluginManager(IOInterface $io, Composer $composer, Composer $globalComposer = null, $disablePlugins = false) { return new Plugin\PluginManager($io, $composer, $globalComposer, $disablePlugins); } /** * @return Installer\InstallationManager */ protected function createInstallationManager() { return new Installer\InstallationManager(); } /** * @param Installer\InstallationManager $im * @param Composer $composer * @param IO\IOInterface $io */ protected function createDefaultInstallers(Installer\InstallationManager $im, Composer $composer, IOInterface $io) { $im->addInstaller(new Installer\LibraryInstaller($io, $composer, null)); $im->addInstaller(new Installer\PearInstaller($io, $composer, 'pear-library')); $im->addInstaller(new Installer\PluginInstaller($io, $composer)); $im->addInstaller(new Installer\MetapackageInstaller($io)); } /** * @param WritableRepositoryInterface $repo repository to purge packages from * @param Installer\InstallationManager $im manager to check whether packages are still installed */ protected function purgePackages(WritableRepositoryInterface $repo, Installer\InstallationManager $im) { foreach ($repo->getPackages() as $package) { if (!$im->isPackageInstalled($repo, $package)) { $repo->removePackage($package); } } } /** * @param IOInterface $io IO instance * @param mixed $config either a configuration array or a filename to read from, if null it will read from * the default filename * @param bool $disablePlugins Whether plugins should not be loaded * @return Composer */ public static function create(IOInterface $io, $config = null, $disablePlugins = false) { $factory = new static(); return $factory->createComposer($io, $config, $disablePlugins); } /** * @param IOInterface $io IO instance * @param Config $config Config instance * @param array $options Array of options passed directly to RemoteFilesystem constructor * @return RemoteFilesystem */ public static function createRemoteFilesystem(IOInterface $io, Config $config = null, $options = array()) { static $warned = false; $disableTls = false; if ($config && $config->get('disable-tls') === true) { if (!$warned) { $io->write('You are running Composer with SSL/TLS protection disabled.'); } $warned = true; $disableTls = true; } elseif (!extension_loaded('openssl')) { throw new \RuntimeException('The openssl extension is required for SSL/TLS protection but is not available. ' . 'If you can not enable the openssl extension, you can disable this error, at your own risk, by setting the \'disable-tls\' option to true.'); } $remoteFilesystemOptions = array(); if ($disableTls === false) { if ($config && $config->get('cafile')) { $remoteFilesystemOptions['ssl']['cafile'] = $config->get('cafile'); } if ($config && $config->get('capath')) { $remoteFilesystemOptions['ssl']['capath'] = $config->get('capath'); } $remoteFilesystemOptions = array_replace_recursive($remoteFilesystemOptions, $options); } try { $remoteFilesystem = new RemoteFilesystem($io, $config, $remoteFilesystemOptions, $disableTls); } catch (TransportException $e) { if (false !== strpos($e->getMessage(), 'cafile')) { $io->write('Unable to locate a valid CA certificate file. You must set a valid \'cafile\' option.'); $io->write('A valid CA certificate file is required for SSL/TLS protection.'); if (PHP_VERSION_ID < 50600) { $io->write('It is recommended you upgrade to PHP 5.6+ which can detect your system CA file automatically.'); } $io->write('You can disable this error, at your own risk, by setting the \'disable-tls\' option to true.'); } throw $e; } return $remoteFilesystem; } /** * @return bool */ private static function useXdg() { foreach (array_keys($_SERVER) as $key) { if (substr($key, 0, 4) === 'XDG_') { return true; } } return false; } /** * @throws \RuntimeException * @return string */ private static function getUserDir() { $home = getenv('HOME'); if (!$home) { throw new \RuntimeException('The HOME or COMPOSER_HOME environment variable must be set for composer to run correctly'); } return rtrim(strtr($home, '\\', '/'), '/'); } } composer-1.0.0-beta2/src/Composer/IO/000077500000000000000000000000001267577262200172375ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/IO/BaseIO.php000066400000000000000000000065141267577262200210600ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\IO; use Composer\Config; use Composer\Util\ProcessExecutor; abstract class BaseIO implements IOInterface { protected $authentications = array(); /** * {@inheritDoc} */ public function getAuthentications() { return $this->authentications; } /** * {@inheritDoc} */ public function hasAuthentication($repositoryName) { return isset($this->authentications[$repositoryName]); } /** * {@inheritDoc} */ public function getAuthentication($repositoryName) { if (isset($this->authentications[$repositoryName])) { return $this->authentications[$repositoryName]; } return array('username' => null, 'password' => null); } /** * {@inheritDoc} */ public function setAuthentication($repositoryName, $username, $password = null) { $this->authentications[$repositoryName] = array('username' => $username, 'password' => $password); } /** * Check for overwrite and set the authentication information for the repository. * * @param string $repositoryName The unique name of repository * @param string $username The username * @param string $password The password */ protected function checkAndSetAuthentication($repositoryName, $username, $password = null) { if ($this->hasAuthentication($repositoryName)) { $auth = $this->getAuthentication($repositoryName); if ($auth['username'] === $username && $auth['password'] === $password) { return; } $this->writeError( sprintf( "Warning: You should avoid overwriting already defined auth settings for %s.", $repositoryName ) ); } $this->setAuthentication($repositoryName, $username, $password); } /** * {@inheritDoc} */ public function loadConfiguration(Config $config) { $githubOauth = $config->get('github-oauth') ?: array(); $gitlabOauth = $config->get('gitlab-oauth') ?: array(); $httpBasic = $config->get('http-basic') ?: array(); // reload oauth token from config if available foreach ($githubOauth as $domain => $token) { if (!preg_match('{^[a-z0-9]+$}', $token)) { throw new \UnexpectedValueException('Your github oauth token for '.$domain.' contains invalid characters: "'.$token.'"'); } $this->checkAndSetAuthentication($domain, $token, 'x-oauth-basic'); } foreach ($gitlabOauth as $domain => $token) { $this->checkAndSetAuthentication($domain, $token, 'oauth2'); } // reload http basic credentials from config if available foreach ($httpBasic as $domain => $cred) { $this->checkAndSetAuthentication($domain, $cred['username'], $cred['password']); } // setup process timeout ProcessExecutor::setTimeout((int) $config->get('process-timeout')); } } composer-1.0.0-beta2/src/Composer/IO/BufferIO.php000066400000000000000000000034361267577262200214170ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\IO; use Symfony\Component\Console\Output\StreamOutput; use Symfony\Component\Console\Formatter\OutputFormatterInterface; use Symfony\Component\Console\Input\StringInput; use Symfony\Component\Console\Helper\HelperSet; /** * @author Jordi Boggiano */ class BufferIO extends ConsoleIO { /** * @param string $input * @param int $verbosity * @param OutputFormatterInterface $formatter */ public function __construct( $input = '', $verbosity = StreamOutput::VERBOSITY_NORMAL, OutputFormatterInterface $formatter = null ) { $input = new StringInput($input); $input->setInteractive(false); $output = new StreamOutput(fopen('php://memory', 'rw'), $verbosity, $formatter ? $formatter->isDecorated() : false, $formatter); parent::__construct($input, $output, new HelperSet(array())); } public function getOutput() { fseek($this->output->getStream(), 0); $output = stream_get_contents($this->output->getStream()); $output = preg_replace_callback("{(?<=^|\n|\x08)(.+?)(\x08+)}", function ($matches) { $pre = strip_tags($matches[1]); if (strlen($pre) === strlen($matches[2])) { return ''; } // TODO reverse parse the string, skipping span tags and \033\[([0-9;]+)m(.*?)\033\[0m style blobs return rtrim($matches[1])."\n"; }, $output); return $output; } } composer-1.0.0-beta2/src/Composer/IO/ConsoleIO.php000066400000000000000000000206711267577262200216100ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\IO; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\ConsoleOutputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Helper\HelperSet; use Symfony\Component\Console\Question\ConfirmationQuestion; use Symfony\Component\Console\Question\Question; /** * The Input/Output helper. * * @author François Pluchino * @author Jordi Boggiano */ class ConsoleIO extends BaseIO { protected $input; protected $output; protected $helperSet; protected $lastMessage; protected $lastMessageErr; private $startTime; private $verbosityMap; /** * Constructor. * * @param InputInterface $input The input instance * @param OutputInterface $output The output instance * @param HelperSet $helperSet The helperSet instance */ public function __construct(InputInterface $input, OutputInterface $output, HelperSet $helperSet) { $this->input = $input; $this->output = $output; $this->helperSet = $helperSet; $this->verbosityMap = array( self::QUIET => OutputInterface::VERBOSITY_QUIET, self::NORMAL => OutputInterface::VERBOSITY_NORMAL, self::VERBOSE => OutputInterface::VERBOSITY_VERBOSE, self::VERY_VERBOSE => OutputInterface::VERBOSITY_VERY_VERBOSE, self::DEBUG => OutputInterface::VERBOSITY_DEBUG, ); } public function enableDebugging($startTime) { $this->startTime = $startTime; } /** * {@inheritDoc} */ public function isInteractive() { return $this->input->isInteractive(); } /** * {@inheritDoc} */ public function isDecorated() { return $this->output->isDecorated(); } /** * {@inheritDoc} */ public function isVerbose() { return $this->output->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE; } /** * {@inheritDoc} */ public function isVeryVerbose() { return $this->output->getVerbosity() >= OutputInterface::VERBOSITY_VERY_VERBOSE; } /** * {@inheritDoc} */ public function isDebug() { return $this->output->getVerbosity() >= OutputInterface::VERBOSITY_DEBUG; } /** * {@inheritDoc} */ public function write($messages, $newline = true, $verbosity = self::NORMAL) { $this->doWrite($messages, $newline, false, $verbosity); } /** * {@inheritDoc} */ public function writeError($messages, $newline = true, $verbosity = self::NORMAL) { $this->doWrite($messages, $newline, true, $verbosity); } /** * @param array|string $messages * @param bool $newline * @param bool $stderr * @param int $verbosity */ private function doWrite($messages, $newline, $stderr, $verbosity) { $sfVerbosity = $this->verbosityMap[$verbosity]; if ($sfVerbosity > $this->output->getVerbosity()) { return; } // hack to keep our usage BC with symfony<2.8 versions // this removes the quiet output but there is no way around it // see https://github.com/composer/composer/pull/4913 if (OutputInterface::VERBOSITY_QUIET === 0) { $sfVerbosity = OutputInterface::OUTPUT_NORMAL; } if (null !== $this->startTime) { $memoryUsage = memory_get_usage() / 1024 / 1024; $timeSpent = microtime(true) - $this->startTime; $messages = array_map(function ($message) use ($memoryUsage, $timeSpent) { return sprintf('[%.1fMB/%.2fs] %s', $memoryUsage, $timeSpent, $message); }, (array) $messages); } if (true === $stderr && $this->output instanceof ConsoleOutputInterface) { $this->output->getErrorOutput()->write($messages, $newline, $sfVerbosity); $this->lastMessageErr = join($newline ? "\n" : '', (array) $messages); return; } $this->output->write($messages, $newline, $sfVerbosity); $this->lastMessage = join($newline ? "\n" : '', (array) $messages); } /** * {@inheritDoc} */ public function overwrite($messages, $newline = true, $size = null, $verbosity = self::NORMAL) { $this->doOverwrite($messages, $newline, $size, false, $verbosity); } /** * {@inheritDoc} */ public function overwriteError($messages, $newline = true, $size = null, $verbosity = self::NORMAL) { $this->doOverwrite($messages, $newline, $size, true, $verbosity); } /** * @param array|string $messages * @param bool $newline * @param int|null $size * @param bool $stderr * @param int $verbosity */ private function doOverwrite($messages, $newline, $size, $stderr, $verbosity) { // messages can be an array, let's convert it to string anyway $messages = join($newline ? "\n" : '', (array) $messages); // since overwrite is supposed to overwrite last message... if (!isset($size)) { // removing possible formatting of lastMessage with strip_tags $size = strlen(strip_tags($stderr ? $this->lastMessageErr : $this->lastMessage)); } // ...let's fill its length with backspaces $this->doWrite(str_repeat("\x08", $size), false, $stderr, $verbosity); // write the new message $this->doWrite($messages, false, $stderr, $verbosity); $fill = $size - strlen(strip_tags($messages)); if ($fill > 0) { // whitespace whatever has left $this->doWrite(str_repeat(' ', $fill), false, $stderr, $verbosity); // move the cursor back $this->doWrite(str_repeat("\x08", $fill), false, $stderr, $verbosity); } if ($newline) { $this->doWrite('', true, $stderr, $verbosity); } if ($stderr) { $this->lastMessageErr = $messages; } else { $this->lastMessage = $messages; } } /** * {@inheritDoc} */ public function ask($question, $default = null) { /** @var \Symfony\Component\Console\Helper\QuestionHelper $helper */ $helper = $this->helperSet->get('question'); $question = new Question($question, $default); return $helper->ask($this->input, $this->getErrorOutput(), $question); } /** * {@inheritDoc} */ public function askConfirmation($question, $default = true) { /** @var \Symfony\Component\Console\Helper\QuestionHelper $helper */ $helper = $this->helperSet->get('question'); $question = new ConfirmationQuestion($question, $default); return $helper->ask($this->input, $this->getErrorOutput(), $question); } /** * {@inheritDoc} */ public function askAndValidate($question, $validator, $attempts = null, $default = null) { /** @var \Symfony\Component\Console\Helper\QuestionHelper $helper */ $helper = $this->helperSet->get('question'); $question = new Question($question, $default); $question->setValidator($validator); $question->setMaxAttempts($attempts); return $helper->ask($this->input, $this->getErrorOutput(), $question); } /** * {@inheritDoc} */ public function askAndHideAnswer($question) { $this->writeError($question, false); return \Seld\CliPrompt\CliPrompt::hiddenPrompt(true); } /** * {@inheritDoc} */ public function select($question, $choices, $default, $attempts = false, $errorMessage = 'Value "%s" is invalid', $multiselect = false) { if ($this->isInteractive()) { return $this->helperSet->get('dialog')->select($this->getErrorOutput(), $question, $choices, $default, $attempts, $errorMessage, $multiselect); } return $default; } private function getErrorOutput() { if ($this->output instanceof ConsoleOutputInterface) { return $this->output->getErrorOutput(); } return $this->output; } } composer-1.0.0-beta2/src/Composer/IO/IOInterface.php000066400000000000000000000151421267577262200221030ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\IO; use Composer\Config; /** * The Input/Output helper interface. * * @author François Pluchino */ interface IOInterface { const QUIET = 1; const NORMAL = 2; const VERBOSE = 4; const VERY_VERBOSE = 8; const DEBUG = 16; /** * Is this input means interactive? * * @return bool */ public function isInteractive(); /** * Is this output verbose? * * @return bool */ public function isVerbose(); /** * Is the output very verbose? * * @return bool */ public function isVeryVerbose(); /** * Is the output in debug verbosity? * * @return bool */ public function isDebug(); /** * Is this output decorated? * * @return bool */ public function isDecorated(); /** * Writes a message to the output. * * @param string|array $messages The message as an array of lines or a single string * @param bool $newline Whether to add a newline or not * @param int $verbosity Verbosity level from the VERBOSITY_* constants */ public function write($messages, $newline = true, $verbosity = self::NORMAL); /** * Writes a message to the error output. * * @param string|array $messages The message as an array of lines or a single string * @param bool $newline Whether to add a newline or not * @param int $verbosity Verbosity level from the VERBOSITY_* constants */ public function writeError($messages, $newline = true, $verbosity = self::NORMAL); /** * Overwrites a previous message to the output. * * @param string|array $messages The message as an array of lines or a single string * @param bool $newline Whether to add a newline or not * @param int $size The size of line * @param int $verbosity Verbosity level from the VERBOSITY_* constants */ public function overwrite($messages, $newline = true, $size = null, $verbosity = self::NORMAL); /** * Overwrites a previous message to the error output. * * @param string|array $messages The message as an array of lines or a single string * @param bool $newline Whether to add a newline or not * @param int $size The size of line * @param int $verbosity Verbosity level from the VERBOSITY_* constants */ public function overwriteError($messages, $newline = true, $size = null, $verbosity = self::NORMAL); /** * Asks a question to the user. * * @param string|array $question The question to ask * @param string $default The default answer if none is given by the user * * @throws \RuntimeException If there is no data to read in the input stream * @return string The user answer */ public function ask($question, $default = null); /** * Asks a confirmation to the user. * * The question will be asked until the user answers by nothing, yes, or no. * * @param string|array $question The question to ask * @param bool $default The default answer if the user enters nothing * * @return bool true if the user has confirmed, false otherwise */ public function askConfirmation($question, $default = true); /** * Asks for a value and validates the response. * * The validator receives the data to validate. It must return the * validated data when the data is valid and throw an exception * otherwise. * * @param string|array $question The question to ask * @param callback $validator A PHP callback * @param null|int $attempts Max number of times to ask before giving up (default of null means infinite) * @param mixed $default The default answer if none is given by the user * * @throws \Exception When any of the validators return an error * @return mixed */ public function askAndValidate($question, $validator, $attempts = null, $default = null); /** * Asks a question to the user and hide the answer. * * @param string $question The question to ask * * @return string The answer */ public function askAndHideAnswer($question); /** * Asks the user to select a value. * * @param string|array $question The question to ask * @param array $choices List of choices to pick from * @param bool|string $default The default answer if the user enters nothing * @param bool|int $attempts Max number of times to ask before giving up (false by default, which means infinite) * @param string $errorMessage Message which will be shown if invalid value from choice list would be picked * @param bool $multiselect Select more than one value separated by comma * * @throws \InvalidArgumentException * @return int|string|array The selected value or values (the key of the choices array) */ public function select($question, $choices, $default, $attempts = false, $errorMessage = 'Value "%s" is invalid', $multiselect = false); /** * Get all authentication information entered. * * @return array The map of authentication data */ public function getAuthentications(); /** * Verify if the repository has a authentication information. * * @param string $repositoryName The unique name of repository * * @return bool */ public function hasAuthentication($repositoryName); /** * Get the username and password of repository. * * @param string $repositoryName The unique name of repository * * @return array The 'username' and 'password' */ public function getAuthentication($repositoryName); /** * Set the authentication information for the repository. * * @param string $repositoryName The unique name of repository * @param string $username The username * @param string $password The password */ public function setAuthentication($repositoryName, $username, $password = null); /** * Loads authentications from a config instance * * @param Config $config */ public function loadConfiguration(Config $config); } composer-1.0.0-beta2/src/Composer/IO/NullIO.php000066400000000000000000000044071267577262200211170ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\IO; /** * IOInterface that is not interactive and never writes the output * * @author Christophe Coevoet */ class NullIO extends BaseIO { /** * {@inheritDoc} */ public function isInteractive() { return false; } /** * {@inheritDoc} */ public function isVerbose() { return false; } /** * {@inheritDoc} */ public function isVeryVerbose() { return false; } /** * {@inheritDoc} */ public function isDebug() { return false; } /** * {@inheritDoc} */ public function isDecorated() { return false; } /** * {@inheritDoc} */ public function write($messages, $newline = true, $verbosity = self::NORMAL) { } /** * {@inheritDoc} */ public function writeError($messages, $newline = true, $verbosity = self::NORMAL) { } /** * {@inheritDoc} */ public function overwrite($messages, $newline = true, $size = 80, $verbosity = self::NORMAL) { } /** * {@inheritDoc} */ public function overwriteError($messages, $newline = true, $size = 80, $verbosity = self::NORMAL) { } /** * {@inheritDoc} */ public function ask($question, $default = null) { return $default; } /** * {@inheritDoc} */ public function askConfirmation($question, $default = true) { return $default; } /** * {@inheritDoc} */ public function askAndValidate($question, $validator, $attempts = false, $default = null) { return $default; } /** * {@inheritDoc} */ public function askAndHideAnswer($question) { return null; } /** * {@inheritDoc} */ public function select($question, $choices, $default, $attempts = false, $errorMessage = 'Value "%s" is invalid', $multiselect = false) { return $default; } } composer-1.0.0-beta2/src/Composer/Installer.php000066400000000000000000001605121267577262200214030ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer; use Composer\Autoload\AutoloadGenerator; use Composer\DependencyResolver\DefaultPolicy; use Composer\DependencyResolver\Operation\UpdateOperation; use Composer\DependencyResolver\Operation\InstallOperation; use Composer\DependencyResolver\Operation\UninstallOperation; use Composer\DependencyResolver\Operation\OperationInterface; use Composer\DependencyResolver\PolicyInterface; use Composer\DependencyResolver\Pool; use Composer\DependencyResolver\Request; use Composer\DependencyResolver\Rule; use Composer\DependencyResolver\Solver; use Composer\DependencyResolver\SolverProblemsException; use Composer\Downloader\DownloadManager; use Composer\EventDispatcher\EventDispatcher; use Composer\Installer\InstallationManager; use Composer\Installer\InstallerEvents; use Composer\Installer\NoopInstaller; use Composer\Installer\SuggestedPackagesReporter; use Composer\IO\IOInterface; use Composer\Package\AliasPackage; use Composer\Package\CompletePackage; use Composer\Package\Link; use Composer\Semver\Constraint\Constraint; use Composer\Package\Locker; use Composer\Package\PackageInterface; use Composer\Package\RootPackageInterface; use Composer\Repository\CompositeRepository; use Composer\Repository\InstalledArrayRepository; use Composer\Repository\PlatformRepository; use Composer\Repository\RepositoryInterface; use Composer\Repository\RepositoryManager; use Composer\Repository\WritableRepositoryInterface; use Composer\Script\ScriptEvents; /** * @author Jordi Boggiano * @author Beau Simensen * @author Konstantin Kudryashov * @author Nils Adermann */ class Installer { /** * @var IOInterface */ protected $io; /** * @var Config */ protected $config; /** * @var RootPackageInterface */ protected $package; /** * @var DownloadManager */ protected $downloadManager; /** * @var RepositoryManager */ protected $repositoryManager; /** * @var Locker */ protected $locker; /** * @var InstallationManager */ protected $installationManager; /** * @var EventDispatcher */ protected $eventDispatcher; /** * @var AutoloadGenerator */ protected $autoloadGenerator; protected $preferSource = false; protected $preferDist = false; protected $optimizeAutoloader = false; protected $classMapAuthoritative = false; protected $devMode = false; protected $dryRun = false; protected $verbose = false; protected $update = false; protected $dumpAutoloader = true; protected $runScripts = true; protected $ignorePlatformReqs = false; protected $preferStable = false; protected $preferLowest = false; /** * Array of package names/globs flagged for update * * @var array|null */ protected $updateWhitelist = null; protected $whitelistDependencies = false; /** * @var SuggestedPackagesReporter */ protected $suggestedPackagesReporter; /** * @var RepositoryInterface */ protected $additionalInstalledRepository; /** * Constructor * * @param IOInterface $io * @param Config $config * @param RootPackageInterface $package * @param DownloadManager $downloadManager * @param RepositoryManager $repositoryManager * @param Locker $locker * @param InstallationManager $installationManager * @param EventDispatcher $eventDispatcher * @param AutoloadGenerator $autoloadGenerator */ public function __construct(IOInterface $io, Config $config, RootPackageInterface $package, DownloadManager $downloadManager, RepositoryManager $repositoryManager, Locker $locker, InstallationManager $installationManager, EventDispatcher $eventDispatcher, AutoloadGenerator $autoloadGenerator) { $this->io = $io; $this->config = $config; $this->package = $package; $this->downloadManager = $downloadManager; $this->repositoryManager = $repositoryManager; $this->locker = $locker; $this->installationManager = $installationManager; $this->eventDispatcher = $eventDispatcher; $this->autoloadGenerator = $autoloadGenerator; } /** * Run installation (or update) * * @throws \Exception * @return int 0 on success or a positive error code on failure */ public function run() { // Disable GC to save CPU cycles, as the dependency solver can create hundreds of thousands // of PHP objects, the GC can spend quite some time walking the tree of references looking // for stuff to collect while there is nothing to collect. This slows things down dramatically // and turning it off results in much better performance. Do not try this at home however. gc_collect_cycles(); gc_disable(); // Force update if there is no lock file present if (!$this->update && !$this->locker->isLocked()) { $this->update = true; } if ($this->dryRun) { $this->verbose = true; $this->runScripts = false; $this->installationManager->addInstaller(new NoopInstaller); $this->mockLocalRepositories($this->repositoryManager); } if ($this->runScripts) { // dispatch pre event $eventName = $this->update ? ScriptEvents::PRE_UPDATE_CMD : ScriptEvents::PRE_INSTALL_CMD; $this->eventDispatcher->dispatchScript($eventName, $this->devMode); } $this->downloadManager->setPreferSource($this->preferSource); $this->downloadManager->setPreferDist($this->preferDist); // clone root package to have one in the installed repo that does not require anything // we don't want it to be uninstallable, but its requirements should not conflict // with the lock file for example $installedRootPackage = clone $this->package; $installedRootPackage->setRequires(array()); $installedRootPackage->setDevRequires(array()); // create installed repo, this contains all local packages + platform packages (php & extensions) $localRepo = $this->repositoryManager->getLocalRepository(); if ($this->update) { $platformOverrides = $this->config->get('platform') ?: array(); } else { $platformOverrides = $this->locker->getPlatformOverrides(); } $platformRepo = new PlatformRepository(array(), $platformOverrides); $repos = array( $localRepo, new InstalledArrayRepository(array($installedRootPackage)), $platformRepo, ); $installedRepo = new CompositeRepository($repos); if ($this->additionalInstalledRepository) { $installedRepo->addRepository($this->additionalInstalledRepository); } $aliases = $this->getRootAliases(); $this->aliasPlatformPackages($platformRepo, $aliases); if (!$this->suggestedPackagesReporter) { $this->suggestedPackagesReporter = new SuggestedPackagesReporter($this->io); } try { $res = $this->doInstall($localRepo, $installedRepo, $platformRepo, $aliases, $this->devMode); if ($res !== 0) { return $res; } } catch (\Exception $e) { if (!$this->dryRun) { $this->installationManager->notifyInstalls($this->io); } throw $e; } if (!$this->dryRun) { $this->installationManager->notifyInstalls($this->io); } // output suggestions if we're in dev mode if ($this->devMode) { $this->suggestedPackagesReporter->output($installedRepo); } # Find abandoned packages and warn user foreach ($localRepo->getPackages() as $package) { if (!$package instanceof CompletePackage || !$package->isAbandoned()) { continue; } $replacement = (is_string($package->getReplacementPackage())) ? 'Use ' . $package->getReplacementPackage() . ' instead' : 'No replacement was suggested'; $this->io->writeError( sprintf( "Package %s is abandoned, you should avoid using it. %s.", $package->getPrettyName(), $replacement ) ); } if (!$this->dryRun) { // write lock if ($this->update) { $localRepo->reload(); // if this is not run in dev mode and the root has dev requires, the lock must // contain null to prevent dev installs from a non-dev lock $devPackages = ($this->devMode || !$this->package->getDevRequires()) ? array() : null; // split dev and non-dev requirements by checking what would be removed if we update without the dev requirements if ($this->devMode && $this->package->getDevRequires()) { $policy = $this->createPolicy(); $pool = $this->createPool(true); $pool->addRepository($installedRepo, $aliases); // creating requirements request $request = $this->createRequest($this->package, $platformRepo); $request->updateAll(); foreach ($this->package->getRequires() as $link) { $request->install($link->getTarget(), $link->getConstraint()); } $this->eventDispatcher->dispatchInstallerEvent(InstallerEvents::PRE_DEPENDENCIES_SOLVING, false, $policy, $pool, $installedRepo, $request); $solver = new Solver($policy, $pool, $installedRepo, $this->io); $ops = $solver->solve($request, $this->ignorePlatformReqs); $this->eventDispatcher->dispatchInstallerEvent(InstallerEvents::POST_DEPENDENCIES_SOLVING, false, $policy, $pool, $installedRepo, $request, $ops); foreach ($ops as $op) { if ($op->getJobType() === 'uninstall') { $devPackages[] = $op->getPackage(); } } } $platformReqs = $this->extractPlatformRequirements($this->package->getRequires()); $platformDevReqs = $this->devMode ? $this->extractPlatformRequirements($this->package->getDevRequires()) : array(); $updatedLock = $this->locker->setLockData( array_diff($localRepo->getCanonicalPackages(), (array) $devPackages), $devPackages, $platformReqs, $platformDevReqs, $aliases, $this->package->getMinimumStability(), $this->package->getStabilityFlags(), $this->preferStable || $this->package->getPreferStable(), $this->preferLowest, $this->config->get('platform') ?: array() ); if ($updatedLock) { $this->io->writeError('Writing lock file'); } } if ($this->dumpAutoloader) { // write autoloader if ($this->optimizeAutoloader) { $this->io->writeError('Generating optimized autoload files'); } else { $this->io->writeError('Generating autoload files'); } $this->autoloadGenerator->setDevMode($this->devMode); $this->autoloadGenerator->setClassMapAuthoritative($this->classMapAuthoritative); $this->autoloadGenerator->setRunScripts($this->runScripts); $this->autoloadGenerator->dump($this->config, $localRepo, $this->package, $this->installationManager, 'composer', $this->optimizeAutoloader); } if ($this->runScripts) { // dispatch post event $eventName = $this->update ? ScriptEvents::POST_UPDATE_CMD : ScriptEvents::POST_INSTALL_CMD; $this->eventDispatcher->dispatchScript($eventName, $this->devMode); } $vendorDir = $this->config->get('vendor-dir'); if (is_dir($vendorDir)) { // suppress errors as this fails sometimes on OSX for no apparent reason // see https://github.com/composer/composer/issues/4070#issuecomment-129792748 @touch($vendorDir); } } // re-enable GC except on HHVM which triggers a warning here if (!defined('HHVM_VERSION')) { gc_enable(); } return 0; } /** * @param RepositoryInterface $localRepo * @param RepositoryInterface $installedRepo * @param PlatformRepository $platformRepo * @param array $aliases * @param bool $withDevReqs * @return int */ protected function doInstall($localRepo, $installedRepo, $platformRepo, $aliases, $withDevReqs) { // init vars $lockedRepository = null; $repositories = null; // initialize locked repo if we are installing from lock or in a partial update // and a lock file is present as we need to force install non-whitelisted lock file // packages in that case if (!$this->update || (!empty($this->updateWhitelist) && $this->locker->isLocked())) { try { $lockedRepository = $this->locker->getLockedRepository($withDevReqs); } catch (\RuntimeException $e) { // if there are dev requires, then we really can not install if ($this->package->getDevRequires()) { throw $e; } // no require-dev in composer.json and the lock file was created with no dev info, so skip them $lockedRepository = $this->locker->getLockedRepository(); } } $this->whitelistUpdateDependencies( $localRepo, $withDevReqs, $this->package->getRequires(), $this->package->getDevRequires() ); $this->io->writeError('Loading composer repositories with package information'); // creating repository pool $policy = $this->createPolicy(); $pool = $this->createPool($withDevReqs, $this->update ? null : $lockedRepository); $pool->addRepository($installedRepo, $aliases); if ($this->update) { $repositories = $this->repositoryManager->getRepositories(); foreach ($repositories as $repository) { $pool->addRepository($repository, $aliases); } } // Add the locked repository after the others in case we are doing a // partial update so missing packages can be found there still. // For installs from lock it's the only one added so it is first if ($lockedRepository) { $pool->addRepository($lockedRepository, $aliases); } // creating requirements request $request = $this->createRequest($this->package, $platformRepo); if ($this->update) { // remove unstable packages from the localRepo if they don't match the current stability settings $removedUnstablePackages = array(); foreach ($localRepo->getPackages() as $package) { if ( !$pool->isPackageAcceptable($package->getNames(), $package->getStability()) && $this->installationManager->isPackageInstalled($localRepo, $package) ) { $removedUnstablePackages[$package->getName()] = true; $request->remove($package->getName(), new Constraint('=', $package->getVersion())); } } $this->io->writeError('Updating dependencies'.($withDevReqs ? ' (including require-dev)' : '').''); $request->updateAll(); if ($withDevReqs) { $links = array_merge($this->package->getRequires(), $this->package->getDevRequires()); } else { $links = $this->package->getRequires(); } foreach ($links as $link) { $request->install($link->getTarget(), $link->getConstraint()); } // if the updateWhitelist is enabled, packages not in it are also fixed // to the version specified in the lock, or their currently installed version if ($this->updateWhitelist) { $currentPackages = $this->getCurrentPackages($withDevReqs, $installedRepo); // collect packages to fixate from root requirements as well as installed packages $candidates = array(); foreach ($links as $link) { $candidates[$link->getTarget()] = true; } foreach ($localRepo->getPackages() as $package) { $candidates[$package->getName()] = true; } // fix them to the version in lock (or currently installed) if they are not updateable foreach ($candidates as $candidate => $dummy) { foreach ($currentPackages as $curPackage) { if ($curPackage->getName() === $candidate) { if (!$this->isUpdateable($curPackage) && !isset($removedUnstablePackages[$curPackage->getName()])) { $constraint = new Constraint('=', $curPackage->getVersion()); $request->install($curPackage->getName(), $constraint); } break; } } } } } else { $this->io->writeError('Installing dependencies'.($withDevReqs ? ' (including require-dev)' : '').' from lock file'); if (!$this->locker->isFresh()) { $this->io->writeError('Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.', true, IOInterface::QUIET); } foreach ($lockedRepository->getPackages() as $package) { $version = $package->getVersion(); if (isset($aliases[$package->getName()][$version])) { $version = $aliases[$package->getName()][$version]['alias_normalized']; } $constraint = new Constraint('=', $version); $constraint->setPrettyString($package->getPrettyVersion()); $request->install($package->getName(), $constraint); } foreach ($this->locker->getPlatformRequirements($withDevReqs) as $link) { $request->install($link->getTarget(), $link->getConstraint()); } } // force dev packages to have the latest links if we update or install from a (potentially new) lock $this->processDevPackages($localRepo, $pool, $policy, $repositories, $installedRepo, $lockedRepository, $withDevReqs, 'force-links'); // solve dependencies $this->eventDispatcher->dispatchInstallerEvent(InstallerEvents::PRE_DEPENDENCIES_SOLVING, $this->devMode, $policy, $pool, $installedRepo, $request); $solver = new Solver($policy, $pool, $installedRepo, $this->io); try { $operations = $solver->solve($request, $this->ignorePlatformReqs); $this->eventDispatcher->dispatchInstallerEvent(InstallerEvents::POST_DEPENDENCIES_SOLVING, $this->devMode, $policy, $pool, $installedRepo, $request, $operations); } catch (SolverProblemsException $e) { $this->io->writeError('Your requirements could not be resolved to an installable set of packages.', true, IOInterface::QUIET); $this->io->writeError($e->getMessage()); return max(1, $e->getCode()); } $this->io->writeError("Analyzed ".count($pool)." packages to resolve dependencies", true, IOInterface::VERBOSE); $this->io->writeError("Analyzed ".$solver->getRuleSetSize()." rules to resolve dependencies", true, IOInterface::VERBOSE); // force dev packages to be updated if we update or install from a (potentially new) lock $operations = $this->processDevPackages($localRepo, $pool, $policy, $repositories, $installedRepo, $lockedRepository, $withDevReqs, 'force-updates', $operations); // execute operations if (!$operations) { $this->io->writeError('Nothing to install or update'); } $operations = $this->movePluginsToFront($operations); $operations = $this->moveUninstallsToFront($operations); foreach ($operations as $operation) { // collect suggestions if ('install' === $operation->getJobType()) { $this->suggestedPackagesReporter->addSuggestionsFromPackage($operation->getPackage()); } // updating, force dev packages' references if they're in root package refs if ($this->update) { $package = null; if ('update' === $operation->getJobType()) { $package = $operation->getTargetPackage(); } elseif ('install' === $operation->getJobType()) { $package = $operation->getPackage(); } if ($package && $package->isDev()) { $references = $this->package->getReferences(); if (isset($references[$package->getName()])) { $package->setSourceReference($references[$package->getName()]); $package->setDistReference($references[$package->getName()]); } } if ('update' === $operation->getJobType() && $operation->getTargetPackage()->isDev() && $operation->getTargetPackage()->getVersion() === $operation->getInitialPackage()->getVersion() && (!$operation->getTargetPackage()->getSourceReference() || $operation->getTargetPackage()->getSourceReference() === $operation->getInitialPackage()->getSourceReference()) && (!$operation->getTargetPackage()->getDistReference() || $operation->getTargetPackage()->getDistReference() === $operation->getInitialPackage()->getDistReference()) ) { $this->io->writeError(' - Skipping update of '. $operation->getTargetPackage()->getPrettyName().' to the same reference-locked version', true, IOInterface::DEBUG); $this->io->writeError('', true, IOInterface::DEBUG); continue; } } $event = 'Composer\Installer\PackageEvents::PRE_PACKAGE_'.strtoupper($operation->getJobType()); if (defined($event) && $this->runScripts) { $this->eventDispatcher->dispatchPackageEvent(constant($event), $this->devMode, $policy, $pool, $installedRepo, $request, $operations, $operation); } // output non-alias ops in dry run, output alias ops in debug verbosity if ($this->dryRun && false === strpos($operation->getJobType(), 'Alias')) { $this->io->writeError(' - ' . $operation); $this->io->writeError(''); } elseif ($this->io->isDebug() && false !== strpos($operation->getJobType(), 'Alias')) { $this->io->writeError(' - ' . $operation); $this->io->writeError(''); } $this->installationManager->execute($localRepo, $operation); // output reasons why the operation was ran, only for install/update operations if ($this->verbose && $this->io->isVeryVerbose() && in_array($operation->getJobType(), array('install', 'update'))) { $reason = $operation->getReason(); if ($reason instanceof Rule) { switch ($reason->getReason()) { case Rule::RULE_JOB_INSTALL: $this->io->writeError(' REASON: Required by the root package: '.$reason->getPrettyString($pool)); $this->io->writeError(''); break; case Rule::RULE_PACKAGE_REQUIRES: $this->io->writeError(' REASON: '.$reason->getPrettyString($pool)); $this->io->writeError(''); break; } } } $event = 'Composer\Installer\PackageEvents::POST_PACKAGE_'.strtoupper($operation->getJobType()); if (defined($event) && $this->runScripts) { $this->eventDispatcher->dispatchPackageEvent(constant($event), $this->devMode, $policy, $pool, $installedRepo, $request, $operations, $operation); } if (!$this->dryRun) { $localRepo->write(); } } if (!$this->dryRun) { // force source/dist urls to be updated for all packages $this->processPackageUrls($pool, $policy, $localRepo, $repositories); $localRepo->write(); } return 0; } /** * Workaround: if your packages depend on plugins, we must be sure * that those are installed / updated first; else it would lead to packages * being installed multiple times in different folders, when running Composer * twice. * * While this does not fix the root-causes of https://github.com/composer/composer/issues/1147, * it at least fixes the symptoms and makes usage of composer possible (again) * in such scenarios. * * @param OperationInterface[] $operations * @return OperationInterface[] reordered operation list */ private function movePluginsToFront(array $operations) { $installerOps = array(); foreach ($operations as $idx => $op) { if ($op instanceof InstallOperation) { $package = $op->getPackage(); } elseif ($op instanceof UpdateOperation) { $package = $op->getTargetPackage(); } else { continue; } if ($package->getType() === 'composer-plugin' || $package->getType() === 'composer-installer') { // ignore requirements to platform or composer-plugin-api $requires = array_keys($package->getRequires()); foreach ($requires as $index => $req) { if ($req === 'composer-plugin-api' || preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $req)) { unset($requires[$index]); } } // if there are no other requirements, move the plugin to the top of the op list if (!count($requires)) { $installerOps[] = $op; unset($operations[$idx]); } } } return array_merge($installerOps, $operations); } /** * Removals of packages should be executed before installations in * case two packages resolve to the same path (due to custom installers) * * @param OperationInterface[] $operations * @return OperationInterface[] reordered operation list */ private function moveUninstallsToFront(array $operations) { $uninstOps = array(); foreach ($operations as $idx => $op) { if ($op instanceof UninstallOperation) { $uninstOps[] = $op; unset($operations[$idx]); } } return array_merge($uninstOps, $operations); } /** * @param bool $withDevReqs * @param RepositoryInterface|null $lockedRepository * @return Pool */ private function createPool($withDevReqs, RepositoryInterface $lockedRepository = null) { if ($this->update) { $minimumStability = $this->package->getMinimumStability(); $stabilityFlags = $this->package->getStabilityFlags(); $requires = $this->package->getRequires(); if ($withDevReqs) { $requires = array_merge($requires, $this->package->getDevRequires()); } } else { $minimumStability = $this->locker->getMinimumStability(); $stabilityFlags = $this->locker->getStabilityFlags(); $requires = array(); foreach ($lockedRepository->getPackages() as $package) { $constraint = new Constraint('=', $package->getVersion()); $constraint->setPrettyString($package->getPrettyVersion()); $requires[$package->getName()] = $constraint; } } $rootConstraints = array(); foreach ($requires as $req => $constraint) { // skip platform requirements from the root package to avoid filtering out existing platform packages if ($this->ignorePlatformReqs && preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $req)) { continue; } if ($constraint instanceof Link) { $rootConstraints[$req] = $constraint->getConstraint(); } else { $rootConstraints[$req] = $constraint; } } return new Pool($minimumStability, $stabilityFlags, $rootConstraints); } /** * @return DefaultPolicy */ private function createPolicy() { $preferStable = null; $preferLowest = null; if (!$this->update) { $preferStable = $this->locker->getPreferStable(); $preferLowest = $this->locker->getPreferLowest(); } // old lock file without prefer stable/lowest will return null // so in this case we use the composer.json info if (null === $preferStable) { $preferStable = $this->preferStable || $this->package->getPreferStable(); } if (null === $preferLowest) { $preferLowest = $this->preferLowest; } return new DefaultPolicy($preferStable, $preferLowest); } /** * @param RootPackageInterface $rootPackage * @param PlatformRepository $platformRepo * @return Request */ private function createRequest(RootPackageInterface $rootPackage, PlatformRepository $platformRepo) { $request = new Request(); $constraint = new Constraint('=', $rootPackage->getVersion()); $constraint->setPrettyString($rootPackage->getPrettyVersion()); $request->install($rootPackage->getName(), $constraint); $fixedPackages = $platformRepo->getPackages(); if ($this->additionalInstalledRepository) { $additionalFixedPackages = $this->additionalInstalledRepository->getPackages(); $fixedPackages = array_merge($fixedPackages, $additionalFixedPackages); } // fix the version of all platform packages + additionally installed packages // to prevent the solver trying to remove or update those $provided = $rootPackage->getProvides(); foreach ($fixedPackages as $package) { $constraint = new Constraint('=', $package->getVersion()); $constraint->setPrettyString($package->getPrettyVersion()); // skip platform packages that are provided by the root package if ($package->getRepository() !== $platformRepo || !isset($provided[$package->getName()]) || !$provided[$package->getName()]->getConstraint()->matches($constraint) ) { $request->fix($package->getName(), $constraint); } } return $request; } /** * @param WritableRepositoryInterface $localRepo * @param Pool $pool * @param PolicyInterface $policy * @param array $repositories * @param RepositoryInterface $installedRepo * @param RepositoryInterface $lockedRepository * @param bool $withDevReqs * @param string $task * @param array|null $operations * @return array */ private function processDevPackages($localRepo, $pool, $policy, $repositories, $installedRepo, $lockedRepository, $withDevReqs, $task, array $operations = null) { if ($task === 'force-updates' && null === $operations) { throw new \InvalidArgumentException('Missing operations argument'); } if ($task === 'force-links') { $operations = array(); } if ($this->update && $this->updateWhitelist) { $currentPackages = $this->getCurrentPackages($withDevReqs, $installedRepo); } foreach ($localRepo->getCanonicalPackages() as $package) { // skip non-dev packages if (!$package->isDev()) { continue; } // skip packages that will be updated/uninstalled foreach ($operations as $operation) { if (('update' === $operation->getJobType() && $operation->getInitialPackage()->equals($package)) || ('uninstall' === $operation->getJobType() && $operation->getPackage()->equals($package)) ) { continue 2; } } if ($this->update) { // skip package if the whitelist is enabled and it is not in it if ($this->updateWhitelist && !$this->isUpdateable($package)) { // check if non-updateable packages are out of date compared to the lock file to ensure we don't corrupt it foreach ($currentPackages as $curPackage) { if ($curPackage->isDev() && $curPackage->getName() === $package->getName() && $curPackage->getVersion() === $package->getVersion()) { if ($task === 'force-links') { $package->setRequires($curPackage->getRequires()); $package->setConflicts($curPackage->getConflicts()); $package->setProvides($curPackage->getProvides()); $package->setReplaces($curPackage->getReplaces()); } elseif ($task === 'force-updates') { if (($curPackage->getSourceReference() && $curPackage->getSourceReference() !== $package->getSourceReference()) || ($curPackage->getDistReference() && $curPackage->getDistReference() !== $package->getDistReference()) ) { $operations[] = new UpdateOperation($package, $curPackage); } } break; } } continue; } // find similar packages (name/version) in all repositories $matches = $pool->whatProvides($package->getName(), new Constraint('=', $package->getVersion())); foreach ($matches as $index => $match) { // skip local packages if (!in_array($match->getRepository(), $repositories, true)) { unset($matches[$index]); continue; } // skip providers/replacers if ($match->getName() !== $package->getName()) { unset($matches[$index]); continue; } $matches[$index] = $match->getId(); } // select preferred package according to policy rules if ($matches && $matches = $policy->selectPreferredPackages($pool, array(), $matches)) { $newPackage = $pool->literalToPackage($matches[0]); if ($task === 'force-links' && $newPackage) { $package->setRequires($newPackage->getRequires()); $package->setConflicts($newPackage->getConflicts()); $package->setProvides($newPackage->getProvides()); $package->setReplaces($newPackage->getReplaces()); } if ($task === 'force-updates' && $newPackage && ( (($newPackage->getSourceReference() && $newPackage->getSourceReference() !== $package->getSourceReference()) || ($newPackage->getDistReference() && $newPackage->getDistReference() !== $package->getDistReference()) ) )) { $operations[] = new UpdateOperation($package, $newPackage); } } if ($task === 'force-updates') { // force installed package to update to referenced version in root package if it does not match the installed version $references = $this->package->getReferences(); if (isset($references[$package->getName()]) && $references[$package->getName()] !== $package->getSourceReference()) { // changing the source ref to update to will be handled in the operations loop below $operations[] = new UpdateOperation($package, clone $package); } } } else { // force update to locked version if it does not match the installed version foreach ($lockedRepository->findPackages($package->getName()) as $lockedPackage) { if ($lockedPackage->isDev() && $lockedPackage->getVersion() === $package->getVersion()) { if ($task === 'force-links') { $package->setRequires($lockedPackage->getRequires()); $package->setConflicts($lockedPackage->getConflicts()); $package->setProvides($lockedPackage->getProvides()); $package->setReplaces($lockedPackage->getReplaces()); } elseif ($task === 'force-updates') { if (($lockedPackage->getSourceReference() && $lockedPackage->getSourceReference() !== $package->getSourceReference()) || ($lockedPackage->getDistReference() && $lockedPackage->getDistReference() !== $package->getDistReference()) ) { $operations[] = new UpdateOperation($package, $lockedPackage); } } break; } } } } return $operations; } /** * Loads the most "current" list of packages that are installed meaning from lock ideally or from installed repo as fallback * @param bool $withDevReqs * @param RepositoryInterface $installedRepo * @return array */ private function getCurrentPackages($withDevReqs, $installedRepo) { if ($this->locker->isLocked()) { try { return $this->locker->getLockedRepository($withDevReqs)->getPackages(); } catch (\RuntimeException $e) { // fetch only non-dev packages from lock if doing a dev update fails due to a previously incomplete lock file return $this->locker->getLockedRepository()->getPackages(); } } return $installedRepo->getPackages(); } /** * @return array */ private function getRootAliases() { if ($this->update) { $aliases = $this->package->getAliases(); } else { $aliases = $this->locker->getAliases(); } $normalizedAliases = array(); foreach ($aliases as $alias) { $normalizedAliases[$alias['package']][$alias['version']] = array( 'alias' => $alias['alias'], 'alias_normalized' => $alias['alias_normalized'], ); } return $normalizedAliases; } /** * @param Pool $pool * @param PolicyInterface $policy * @param WritableRepositoryInterface $localRepo * @param array $repositories */ private function processPackageUrls($pool, $policy, $localRepo, $repositories) { if (!$this->update) { return; } foreach ($localRepo->getCanonicalPackages() as $package) { // find similar packages (name/version) in all repositories $matches = $pool->whatProvides($package->getName(), new Constraint('=', $package->getVersion())); foreach ($matches as $index => $match) { // skip local packages if (!in_array($match->getRepository(), $repositories, true)) { unset($matches[$index]); continue; } // skip providers/replacers if ($match->getName() !== $package->getName()) { unset($matches[$index]); continue; } $matches[$index] = $match->getId(); } // select preferred package according to policy rules if ($matches && $matches = $policy->selectPreferredPackages($pool, array(), $matches)) { $newPackage = $pool->literalToPackage($matches[0]); // update the dist and source URLs $sourceUrl = $package->getSourceUrl(); $newSourceUrl = $newPackage->getSourceUrl(); if ($sourceUrl !== $newSourceUrl) { $package->setSourceType($newPackage->getSourceType()); $package->setSourceUrl($newSourceUrl); $package->setSourceReference($newPackage->getSourceReference()); } // only update dist url for github/bitbucket dists as they use a combination of dist url + dist reference to install // but for other urls this is ambiguous and could result in bad outcomes if (preg_match('{^https?://(?:(?:www\.)?bitbucket\.org|(api\.)?github\.com)/}', $newPackage->getDistUrl())) { $package->setDistUrl($newPackage->getDistUrl()); } } } } /** * @param PlatformRepository $platformRepo * @param array $aliases */ private function aliasPlatformPackages(PlatformRepository $platformRepo, $aliases) { foreach ($aliases as $package => $versions) { foreach ($versions as $version => $alias) { $packages = $platformRepo->findPackages($package, $version); foreach ($packages as $package) { $aliasPackage = new AliasPackage($package, $alias['alias_normalized'], $alias['alias']); $aliasPackage->setRootPackageAlias(true); $platformRepo->addPackage($aliasPackage); } } } } /** * @param PackageInterface $package * @return bool */ private function isUpdateable(PackageInterface $package) { if (!$this->updateWhitelist) { throw new \LogicException('isUpdateable should only be called when a whitelist is present'); } foreach ($this->updateWhitelist as $whiteListedPattern => $void) { $patternRegexp = $this->packageNameToRegexp($whiteListedPattern); if (preg_match($patternRegexp, $package->getName())) { return true; } } return false; } /** * Build a regexp from a package name, expanding * globs as required * * @param string $whiteListedPattern * @return string */ private function packageNameToRegexp($whiteListedPattern) { $cleanedWhiteListedPattern = str_replace('\\*', '.*', preg_quote($whiteListedPattern)); return "{^" . $cleanedWhiteListedPattern . "$}i"; } /** * @param array $links * @return array */ private function extractPlatformRequirements($links) { $platformReqs = array(); foreach ($links as $link) { if (preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $link->getTarget())) { $platformReqs[$link->getTarget()] = $link->getPrettyConstraint(); } } return $platformReqs; } /** * Adds all dependencies of the update whitelist to the whitelist, too. * * Packages which are listed as requirements in the root package will be * skipped including their dependencies, unless they are listed in the * update whitelist themselves. * * @param RepositoryInterface $localRepo * @param bool $devMode * @param array $rootRequires An array of links to packages in require of the root package * @param array $rootDevRequires An array of links to packages in require-dev of the root package */ private function whitelistUpdateDependencies($localRepo, $devMode, array $rootRequires, array $rootDevRequires) { if (!$this->updateWhitelist) { return; } $requiredPackageNames = array(); foreach (array_merge($rootRequires, $rootDevRequires) as $require) { $requiredPackageNames[] = $require->getTarget(); } if ($devMode) { $rootRequires = array_merge($rootRequires, $rootDevRequires); } $skipPackages = array(); foreach ($rootRequires as $require) { $skipPackages[$require->getTarget()] = true; } $pool = new Pool; $pool->addRepository($localRepo); $seen = array(); $rootRequiredPackageNames = array_keys($rootRequires); foreach ($this->updateWhitelist as $packageName => $void) { $packageQueue = new \SplQueue; $depPackages = $pool->whatProvides($packageName); $nameMatchesRequiredPackage = in_array($packageName, $requiredPackageNames, true); // check if the name is a glob pattern that did not match directly if (!$nameMatchesRequiredPackage) { $whitelistPatternRegexp = $this->packageNameToRegexp($packageName); foreach ($rootRequiredPackageNames as $rootRequiredPackageName) { if (preg_match($whitelistPatternRegexp, $rootRequiredPackageName)) { $nameMatchesRequiredPackage = true; break; } } } if (count($depPackages) == 0 && !$nameMatchesRequiredPackage && !in_array($packageName, array('nothing', 'lock'))) { $this->io->writeError('Package "' . $packageName . '" listed for update is not installed. Ignoring.'); } foreach ($depPackages as $depPackage) { $packageQueue->enqueue($depPackage); } while (!$packageQueue->isEmpty()) { $package = $packageQueue->dequeue(); if (isset($seen[$package->getId()])) { continue; } $seen[$package->getId()] = true; $this->updateWhitelist[$package->getName()] = true; if (!$this->whitelistDependencies) { continue; } $requires = $package->getRequires(); foreach ($requires as $require) { $requirePackages = $pool->whatProvides($require->getTarget()); foreach ($requirePackages as $requirePackage) { if (isset($this->updateWhitelist[$requirePackage->getName()])) { continue; } if (isset($skipPackages[$requirePackage->getName()])) { $this->io->writeError('Dependency "' . $requirePackage->getName() . '" is also a root requirement, but is not explicitly whitelisted. Ignoring.'); continue; } $packageQueue->enqueue($requirePackage); } } } } } /** * Replace local repositories with InstalledArrayRepository instances * * This is to prevent any accidental modification of the existing repos on disk * * @param RepositoryManager $rm */ private function mockLocalRepositories(RepositoryManager $rm) { $packages = array(); foreach ($rm->getLocalRepository()->getPackages() as $package) { $packages[(string) $package] = clone $package; } foreach ($packages as $key => $package) { if ($package instanceof AliasPackage) { $alias = (string) $package->getAliasOf(); $packages[$key] = new AliasPackage($packages[$alias], $package->getVersion(), $package->getPrettyVersion()); } } $rm->setLocalRepository( new InstalledArrayRepository($packages) ); } /** * Create Installer * * @param IOInterface $io * @param Composer $composer * @return Installer */ public static function create(IOInterface $io, Composer $composer) { return new static( $io, $composer->getConfig(), $composer->getPackage(), $composer->getDownloadManager(), $composer->getRepositoryManager(), $composer->getLocker(), $composer->getInstallationManager(), $composer->getEventDispatcher(), $composer->getAutoloadGenerator() ); } /** * @param RepositoryInterface $additionalInstalledRepository * @return $this */ public function setAdditionalInstalledRepository(RepositoryInterface $additionalInstalledRepository) { $this->additionalInstalledRepository = $additionalInstalledRepository; return $this; } /** * Whether to run in drymode or not * * @param bool $dryRun * @return Installer */ public function setDryRun($dryRun = true) { $this->dryRun = (boolean) $dryRun; return $this; } /** * Checks, if this is a dry run (simulation mode). * * @return bool */ public function isDryRun() { return $this->dryRun; } /** * prefer source installation * * @param bool $preferSource * @return Installer */ public function setPreferSource($preferSource = true) { $this->preferSource = (boolean) $preferSource; return $this; } /** * prefer dist installation * * @param bool $preferDist * @return Installer */ public function setPreferDist($preferDist = true) { $this->preferDist = (boolean) $preferDist; return $this; } /** * Whether or not generated autoloader are optimized * * @param bool $optimizeAutoloader * @return Installer */ public function setOptimizeAutoloader($optimizeAutoloader = false) { $this->optimizeAutoloader = (boolean) $optimizeAutoloader; if (!$this->optimizeAutoloader) { // Force classMapAuthoritative off when not optimizing the // autoloader $this->setClassMapAuthoritative(false); } return $this; } /** * Whether or not generated autoloader considers the class map * authoritative. * * @param bool $classMapAuthoritative * @return Installer */ public function setClassMapAuthoritative($classMapAuthoritative = false) { $this->classMapAuthoritative = (boolean) $classMapAuthoritative; if ($this->classMapAuthoritative) { // Force optimizeAutoloader when classmap is authoritative $this->setOptimizeAutoloader(true); } return $this; } /** * update packages * * @param bool $update * @return Installer */ public function setUpdate($update = true) { $this->update = (boolean) $update; return $this; } /** * enables dev packages * * @param bool $devMode * @return Installer */ public function setDevMode($devMode = true) { $this->devMode = (boolean) $devMode; return $this; } /** * set whether to run autoloader or not * * @param bool $dumpAutoloader * @return Installer */ public function setDumpAutoloader($dumpAutoloader = true) { $this->dumpAutoloader = (boolean) $dumpAutoloader; return $this; } /** * set whether to run scripts or not * * @param bool $runScripts * @return Installer */ public function setRunScripts($runScripts = true) { $this->runScripts = (boolean) $runScripts; return $this; } /** * set the config instance * * @param Config $config * @return Installer */ public function setConfig(Config $config) { $this->config = $config; return $this; } /** * run in verbose mode * * @param bool $verbose * @return Installer */ public function setVerbose($verbose = true) { $this->verbose = (boolean) $verbose; return $this; } /** * Checks, if running in verbose mode. * * @return bool */ public function isVerbose() { return $this->verbose; } /** * set ignore Platform Package requirements * * @param bool $ignorePlatformReqs * @return Installer */ public function setIgnorePlatformRequirements($ignorePlatformReqs = false) { $this->ignorePlatformReqs = (boolean) $ignorePlatformReqs; return $this; } /** * restrict the update operation to a few packages, all other packages * that are already installed will be kept at their current version * * @param array $packages * @return Installer */ public function setUpdateWhitelist(array $packages) { $this->updateWhitelist = array_flip(array_map('strtolower', $packages)); return $this; } /** * Should dependencies of whitelisted packages be updated recursively? * * @param bool $updateDependencies * @return Installer */ public function setWhitelistDependencies($updateDependencies = true) { $this->whitelistDependencies = (boolean) $updateDependencies; return $this; } /** * Should packages be preferred in a stable version when updating? * * @param bool $preferStable * @return Installer */ public function setPreferStable($preferStable = true) { $this->preferStable = (boolean) $preferStable; return $this; } /** * Should packages be preferred in a lowest version when updating? * * @param bool $preferLowest * @return Installer */ public function setPreferLowest($preferLowest = true) { $this->preferLowest = (boolean) $preferLowest; return $this; } /** * Disables plugins. * * Call this if you want to ensure that third-party code never gets * executed. The default is to automatically install, and execute * custom third-party installers. * * @return Installer */ public function disablePlugins() { $this->installationManager->disablePlugins(); return $this; } /** * @param SuggestedPackagesReporter $suggestedPackagesReporter * @return Installer */ public function setSuggestedPackagesReporter(SuggestedPackagesReporter $suggestedPackagesReporter) { $this->suggestedPackagesReporter = $suggestedPackagesReporter; return $this; } } composer-1.0.0-beta2/src/Composer/Installer/000077500000000000000000000000001267577262200206655ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/Installer/BinaryInstaller.php000066400000000000000000000157201267577262200245050ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Installer; use Composer\IO\IOInterface; use Composer\Package\PackageInterface; use Composer\Util\Filesystem; use Composer\Util\Platform; use Composer\Util\ProcessExecutor; use Composer\Util\Silencer; /** * Utility to handle installation of package "bin"/binaries * * @author Jordi Boggiano * @author Konstantin Kudryashov * @author Helmut Hummel */ class BinaryInstaller { protected $binDir; protected $binCompat; protected $io; protected $filesystem; /** * @param IOInterface $io * @param string $binDir * @param string $binCompat * @param Filesystem $filesystem */ public function __construct(IOInterface $io, $binDir, $binCompat, Filesystem $filesystem = null) { $this->binDir = $binDir; $this->binCompat = $binCompat; $this->io = $io; $this->filesystem = $filesystem ?: new Filesystem(); } public function installBinaries(PackageInterface $package, $installPath) { $binaries = $this->getBinaries($package); if (!$binaries) { return; } foreach ($binaries as $bin) { $binPath = $installPath.'/'.$bin; if (!file_exists($binPath)) { $this->io->writeError(' Skipped installation of bin '.$bin.' for package '.$package->getName().': file not found in package'); continue; } // in case a custom installer returned a relative path for the // $package, we can now safely turn it into a absolute path (as we // already checked the binary's existence). The following helpers // will require absolute paths to work properly. $binPath = realpath($binPath); $this->initializeBinDir(); $link = $this->binDir.'/'.basename($bin); if (file_exists($link)) { if (is_link($link)) { // likely leftover from a previous install, make sure // that the target is still executable in case this // is a fresh install of the vendor. Silencer::call('chmod', $link, 0777 & ~umask()); } $this->io->writeError(' Skipped installation of bin '.$bin.' for package '.$package->getName().': name conflicts with an existing file'); continue; } if ($this->binCompat === "auto") { if (Platform::isWindows()) { $this->installFullBinaries($binPath, $link, $bin, $package); } else { $this->installSymlinkBinaries($binPath, $link); } } elseif ($this->binCompat === "full") { $this->installFullBinaries($binPath, $link, $bin, $package); } Silencer::call('chmod', $link, 0777 & ~umask()); } } public function removeBinaries(PackageInterface $package) { $this->initializeBinDir(); $binaries = $this->getBinaries($package); if (!$binaries) { return; } foreach ($binaries as $bin) { $link = $this->binDir.'/'.basename($bin); if (is_link($link) || file_exists($link)) { $this->filesystem->unlink($link); } if (file_exists($link.'.bat')) { $this->filesystem->unlink($link.'.bat'); } } // attempt removing the bin dir in case it is left empty if ((is_dir($this->binDir)) && ($this->filesystem->isDirEmpty($this->binDir))) { Silencer::call('rmdir', $this->binDir); } } protected function getBinaries(PackageInterface $package) { return $package->getBinaries(); } protected function installFullBinaries($binPath, $link, $bin, PackageInterface $package) { // add unixy support for cygwin and similar environments if ('.bat' !== substr($binPath, -4)) { $this->installUnixyProxyBinaries($binPath, $link); @chmod($link, 0777 & ~umask()); $link .= '.bat'; if (file_exists($link)) { $this->io->writeError(' Skipped installation of bin '.$bin.'.bat proxy for package '.$package->getName().': a .bat proxy was already installed'); } } if (!file_exists($link)) { file_put_contents($link, $this->generateWindowsProxyCode($binPath, $link)); } } protected function installSymlinkBinaries($binPath, $link) { if (!$this->filesystem->relativeSymlink($binPath, $link)) { $this->installUnixyProxyBinaries($binPath, $link); } } protected function installUnixyProxyBinaries($binPath, $link) { file_put_contents($link, $this->generateUnixyProxyCode($binPath, $link)); } protected function initializeBinDir() { $this->filesystem->ensureDirectoryExists($this->binDir); $this->binDir = realpath($this->binDir); } protected function generateWindowsProxyCode($bin, $link) { $binPath = $this->filesystem->findShortestPath($link, $bin); if ('.bat' === substr($bin, -4) || '.exe' === substr($bin, -4)) { $caller = 'call'; } else { $handle = fopen($bin, 'r'); $line = fgets($handle); fclose($handle); if (preg_match('{^#!/(?:usr/bin/env )?(?:[^/]+/)*(.+)$}m', $line, $match)) { $caller = trim($match[1]); } else { $caller = 'php'; } } return "@ECHO OFF\r\n". "setlocal DISABLEDELAYEDEXPANSION\r\n". "SET BIN_TARGET=%~dp0/".trim(ProcessExecutor::escape($binPath), '"')."\r\n". "{$caller} \"%BIN_TARGET%\" %*\r\n"; } protected function generateUnixyProxyCode($bin, $link) { $binPath = $this->filesystem->findShortestPath($link, $bin); $binDir = ProcessExecutor::escape(dirname($binPath)); $binFile = basename($binPath); $proxyCode = <</dev/null 2>&1; then # Cygwin paths start with /cygdrive/ which will break windows PHP, # so we need to translate the dir path to windows format. However # we could be using cygwin PHP which does not require this, so we # test if the path to PHP starts with /cygdrive/ rather than /usr/bin if [[ $(which php) == /cygdrive/* ]]; then dir=$(cygpath -m "\$dir"); fi fi dir=$(echo \$dir | sed 's/ /\ /g') "\${dir}/$binFile" "$@" PROXY; return $proxyCode; } } composer-1.0.0-beta2/src/Composer/Installer/InstallationManager.php000066400000000000000000000234521267577262200253400ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Installer; use Composer\IO\IOInterface; use Composer\Package\PackageInterface; use Composer\Package\AliasPackage; use Composer\Repository\RepositoryInterface; use Composer\Repository\InstalledRepositoryInterface; use Composer\DependencyResolver\Operation\OperationInterface; use Composer\DependencyResolver\Operation\InstallOperation; use Composer\DependencyResolver\Operation\UpdateOperation; use Composer\DependencyResolver\Operation\UninstallOperation; use Composer\DependencyResolver\Operation\MarkAliasInstalledOperation; use Composer\DependencyResolver\Operation\MarkAliasUninstalledOperation; use Composer\Util\StreamContextFactory; /** * Package operation manager. * * @author Konstantin Kudryashov * @author Jordi Boggiano * @author Nils Adermann */ class InstallationManager { private $installers = array(); private $cache = array(); private $notifiablePackages = array(); public function reset() { $this->notifiablePackages = array(); } /** * Adds installer * * @param InstallerInterface $installer installer instance */ public function addInstaller(InstallerInterface $installer) { array_unshift($this->installers, $installer); $this->cache = array(); } /** * Removes installer * * @param InstallerInterface $installer installer instance */ public function removeInstaller(InstallerInterface $installer) { if (false !== ($key = array_search($installer, $this->installers, true))) { array_splice($this->installers, $key, 1); $this->cache = array(); } } /** * Disables plugins. * * We prevent any plugins from being instantiated by simply * deactivating the installer for them. This ensure that no third-party * code is ever executed. */ public function disablePlugins() { foreach ($this->installers as $i => $installer) { if (!$installer instanceof PluginInstaller) { continue; } unset($this->installers[$i]); } } /** * Returns installer for a specific package type. * * @param string $type package type * * @throws \InvalidArgumentException if installer for provided type is not registered * @return InstallerInterface */ public function getInstaller($type) { $type = strtolower($type); if (isset($this->cache[$type])) { return $this->cache[$type]; } foreach ($this->installers as $installer) { if ($installer->supports($type)) { return $this->cache[$type] = $installer; } } throw new \InvalidArgumentException('Unknown installer type: '.$type); } /** * Checks whether provided package is installed in one of the registered installers. * * @param InstalledRepositoryInterface $repo repository in which to check * @param PackageInterface $package package instance * * @return bool */ public function isPackageInstalled(InstalledRepositoryInterface $repo, PackageInterface $package) { if ($package instanceof AliasPackage) { return $repo->hasPackage($package) && $this->isPackageInstalled($repo, $package->getAliasOf()); } return $this->getInstaller($package->getType())->isInstalled($repo, $package); } /** * Executes solver operation. * * @param RepositoryInterface $repo repository in which to check * @param OperationInterface $operation operation instance */ public function execute(RepositoryInterface $repo, OperationInterface $operation) { $method = $operation->getJobType(); $this->$method($repo, $operation); } /** * Executes install operation. * * @param RepositoryInterface $repo repository in which to check * @param InstallOperation $operation operation instance */ public function install(RepositoryInterface $repo, InstallOperation $operation) { $package = $operation->getPackage(); $installer = $this->getInstaller($package->getType()); $installer->install($repo, $package); $this->markForNotification($package); } /** * Executes update operation. * * @param RepositoryInterface $repo repository in which to check * @param UpdateOperation $operation operation instance */ public function update(RepositoryInterface $repo, UpdateOperation $operation) { $initial = $operation->getInitialPackage(); $target = $operation->getTargetPackage(); $initialType = $initial->getType(); $targetType = $target->getType(); if ($initialType === $targetType) { $installer = $this->getInstaller($initialType); $installer->update($repo, $initial, $target); $this->markForNotification($target); } else { $this->getInstaller($initialType)->uninstall($repo, $initial); $this->getInstaller($targetType)->install($repo, $target); } } /** * Uninstalls package. * * @param RepositoryInterface $repo repository in which to check * @param UninstallOperation $operation operation instance */ public function uninstall(RepositoryInterface $repo, UninstallOperation $operation) { $package = $operation->getPackage(); $installer = $this->getInstaller($package->getType()); $installer->uninstall($repo, $package); } /** * Executes markAliasInstalled operation. * * @param RepositoryInterface $repo repository in which to check * @param MarkAliasInstalledOperation $operation operation instance */ public function markAliasInstalled(RepositoryInterface $repo, MarkAliasInstalledOperation $operation) { $package = $operation->getPackage(); if (!$repo->hasPackage($package)) { $repo->addPackage(clone $package); } } /** * Executes markAlias operation. * * @param RepositoryInterface $repo repository in which to check * @param MarkAliasUninstalledOperation $operation operation instance */ public function markAliasUninstalled(RepositoryInterface $repo, MarkAliasUninstalledOperation $operation) { $package = $operation->getPackage(); $repo->removePackage($package); } /** * Returns the installation path of a package * * @param PackageInterface $package * @return string path */ public function getInstallPath(PackageInterface $package) { $installer = $this->getInstaller($package->getType()); return $installer->getInstallPath($package); } public function notifyInstalls(IOInterface $io) { foreach ($this->notifiablePackages as $repoUrl => $packages) { $repositoryName = parse_url($repoUrl, PHP_URL_HOST); if ($io->hasAuthentication($repositoryName)) { $auth = $io->getAuthentication($repositoryName); $authStr = base64_encode($auth['username'] . ':' . $auth['password']); $authHeader = 'Authorization: Basic '.$authStr; } // non-batch API, deprecated if (strpos($repoUrl, '%package%')) { foreach ($packages as $package) { $url = str_replace('%package%', $package->getPrettyName(), $repoUrl); $params = array( 'version' => $package->getPrettyVersion(), 'version_normalized' => $package->getVersion(), ); $opts = array('http' => array( 'method' => 'POST', 'header' => array('Content-type: application/x-www-form-urlencoded'), 'content' => http_build_query($params, '', '&'), 'timeout' => 3, ), ); if (isset($authHeader)) { $opts['http']['header'][] = $authHeader; } $context = StreamContextFactory::getContext($url, $opts); @file_get_contents($url, false, $context); } continue; } $postData = array('downloads' => array()); foreach ($packages as $package) { $postData['downloads'][] = array( 'name' => $package->getPrettyName(), 'version' => $package->getVersion(), ); } $opts = array('http' => array( 'method' => 'POST', 'header' => array('Content-Type: application/json'), 'content' => json_encode($postData), 'timeout' => 6, ), ); if (isset($authHeader)) { $opts['http']['header'][] = $authHeader; } $context = StreamContextFactory::getContext($repoUrl, $opts); @file_get_contents($repoUrl, false, $context); } $this->reset(); } private function markForNotification(PackageInterface $package) { if ($package->getNotificationUrl()) { $this->notifiablePackages[$package->getNotificationUrl()][$package->getName()] = $package; } } } composer-1.0.0-beta2/src/Composer/Installer/InstallerEvent.php000066400000000000000000000062241267577262200243410ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Installer; use Composer\Composer; use Composer\DependencyResolver\PolicyInterface; use Composer\DependencyResolver\Operation\OperationInterface; use Composer\DependencyResolver\Pool; use Composer\DependencyResolver\Request; use Composer\EventDispatcher\Event; use Composer\IO\IOInterface; use Composer\Repository\CompositeRepository; /** * An event for all installer. * * @author François Pluchino */ class InstallerEvent extends Event { /** * @var Composer */ private $composer; /** * @var IOInterface */ private $io; /** * @var bool */ private $devMode; /** * @var PolicyInterface */ private $policy; /** * @var Pool */ private $pool; /** * @var CompositeRepository */ private $installedRepo; /** * @var Request */ private $request; /** * @var OperationInterface[] */ private $operations; /** * Constructor. * * @param string $eventName * @param Composer $composer * @param IOInterface $io * @param bool $devMode * @param PolicyInterface $policy * @param Pool $pool * @param CompositeRepository $installedRepo * @param Request $request * @param OperationInterface[] $operations */ public function __construct($eventName, Composer $composer, IOInterface $io, $devMode, PolicyInterface $policy, Pool $pool, CompositeRepository $installedRepo, Request $request, array $operations = array()) { parent::__construct($eventName); $this->composer = $composer; $this->io = $io; $this->devMode = $devMode; $this->policy = $policy; $this->pool = $pool; $this->installedRepo = $installedRepo; $this->request = $request; $this->operations = $operations; } /** * @return Composer */ public function getComposer() { return $this->composer; } /** * @return IOInterface */ public function getIO() { return $this->io; } /** * @return bool */ public function isDevMode() { return $this->devMode; } /** * @return PolicyInterface */ public function getPolicy() { return $this->policy; } /** * @return Pool */ public function getPool() { return $this->pool; } /** * @return CompositeRepository */ public function getInstalledRepo() { return $this->installedRepo; } /** * @return Request */ public function getRequest() { return $this->request; } /** * @return OperationInterface[] */ public function getOperations() { return $this->operations; } } composer-1.0.0-beta2/src/Composer/Installer/InstallerEvents.php000066400000000000000000000020171267577262200245200ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Installer; /** * The Installer Events. * * @author François Pluchino */ class InstallerEvents { /** * The PRE_DEPENDENCIES_SOLVING event occurs as a installer begins * resolve operations. * * The event listener method receives a * Composer\Installer\InstallerEvent instance. * * @var string */ const PRE_DEPENDENCIES_SOLVING = 'pre-dependencies-solving'; /** * The POST_DEPENDENCIES_SOLVING event occurs as a installer after * resolve operations. * * The event listener method receives a * Composer\Installer\InstallerEvent instance. * * @var string */ const POST_DEPENDENCIES_SOLVING = 'post-dependencies-solving'; } composer-1.0.0-beta2/src/Composer/Installer/InstallerInterface.php000066400000000000000000000046311267577262200251600ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Installer; use Composer\Package\PackageInterface; use Composer\Repository\InstalledRepositoryInterface; use InvalidArgumentException; /** * Interface for the package installation manager. * * @author Konstantin Kudryashov * @author Jordi Boggiano */ interface InstallerInterface { /** * Decides if the installer supports the given type * * @param string $packageType * @return bool */ public function supports($packageType); /** * Checks that provided package is installed. * * @param InstalledRepositoryInterface $repo repository in which to check * @param PackageInterface $package package instance * * @return bool */ public function isInstalled(InstalledRepositoryInterface $repo, PackageInterface $package); /** * Installs specific package. * * @param InstalledRepositoryInterface $repo repository in which to check * @param PackageInterface $package package instance */ public function install(InstalledRepositoryInterface $repo, PackageInterface $package); /** * Updates specific package. * * @param InstalledRepositoryInterface $repo repository in which to check * @param PackageInterface $initial already installed package version * @param PackageInterface $target updated version * * @throws InvalidArgumentException if $initial package is not installed */ public function update(InstalledRepositoryInterface $repo, PackageInterface $initial, PackageInterface $target); /** * Uninstalls specific package. * * @param InstalledRepositoryInterface $repo repository in which to check * @param PackageInterface $package package instance */ public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $package); /** * Returns the installation path of a package * * @param PackageInterface $package * @return string path */ public function getInstallPath(PackageInterface $package); } composer-1.0.0-beta2/src/Composer/Installer/LibraryInstaller.php000066400000000000000000000155341267577262200246700ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Installer; use Composer\Composer; use Composer\IO\IOInterface; use Composer\Repository\InstalledRepositoryInterface; use Composer\Package\PackageInterface; use Composer\Util\Filesystem; use Composer\Util\Silencer; /** * Package installation manager. * * @author Jordi Boggiano * @author Konstantin Kudryashov */ class LibraryInstaller implements InstallerInterface { protected $composer; protected $vendorDir; protected $binDir; protected $downloadManager; protected $io; protected $type; protected $filesystem; protected $binCompat; protected $binaryInstaller; /** * Initializes library installer. * * @param IOInterface $io * @param Composer $composer * @param string $type * @param Filesystem $filesystem * @param BinaryInstaller $binaryInstaller */ public function __construct(IOInterface $io, Composer $composer, $type = 'library', Filesystem $filesystem = null, BinaryInstaller $binaryInstaller = null) { $this->composer = $composer; $this->downloadManager = $composer->getDownloadManager(); $this->io = $io; $this->type = $type; $this->filesystem = $filesystem ?: new Filesystem(); $this->vendorDir = rtrim($composer->getConfig()->get('vendor-dir'), '/'); $this->binaryInstaller = $binaryInstaller ?: new BinaryInstaller($this->io, rtrim($composer->getConfig()->get('bin-dir'), '/'), $composer->getConfig()->get('bin-compat'), $this->filesystem); } /** * {@inheritDoc} */ public function supports($packageType) { return $packageType === $this->type || null === $this->type; } /** * {@inheritDoc} */ public function isInstalled(InstalledRepositoryInterface $repo, PackageInterface $package) { return $repo->hasPackage($package) && is_readable($this->getInstallPath($package)); } /** * {@inheritDoc} */ public function install(InstalledRepositoryInterface $repo, PackageInterface $package) { $this->initializeVendorDir(); $downloadPath = $this->getInstallPath($package); // remove the binaries if it appears the package files are missing if (!is_readable($downloadPath) && $repo->hasPackage($package)) { $this->binaryInstaller->removeBinaries($package); } $this->installCode($package); $this->binaryInstaller->installBinaries($package, $this->getInstallPath($package)); if (!$repo->hasPackage($package)) { $repo->addPackage(clone $package); } } /** * {@inheritDoc} */ public function update(InstalledRepositoryInterface $repo, PackageInterface $initial, PackageInterface $target) { if (!$repo->hasPackage($initial)) { throw new \InvalidArgumentException('Package is not installed: '.$initial); } $this->initializeVendorDir(); $this->binaryInstaller->removeBinaries($initial); $this->updateCode($initial, $target); $this->binaryInstaller->installBinaries($target, $this->getInstallPath($target)); $repo->removePackage($initial); if (!$repo->hasPackage($target)) { $repo->addPackage(clone $target); } } /** * {@inheritDoc} */ public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $package) { if (!$repo->hasPackage($package)) { throw new \InvalidArgumentException('Package is not installed: '.$package); } $this->removeCode($package); $this->binaryInstaller->removeBinaries($package); $repo->removePackage($package); $downloadPath = $this->getPackageBasePath($package); if (strpos($package->getName(), '/')) { $packageVendorDir = dirname($downloadPath); if (is_dir($packageVendorDir) && $this->filesystem->isDirEmpty($packageVendorDir)) { Silencer::call('rmdir', $packageVendorDir); } } } /** * {@inheritDoc} */ public function getInstallPath(PackageInterface $package) { $this->initializeVendorDir(); $basePath = ($this->vendorDir ? $this->vendorDir.'/' : '') . $package->getPrettyName(); $targetDir = $package->getTargetDir(); return $basePath . ($targetDir ? '/'.$targetDir : ''); } /** * Returns the base path of the package without target-dir path * * It is used for BC as getInstallPath tends to be overridden by * installer plugins but not getPackageBasePath * * @param PackageInterface $package * @return string */ protected function getPackageBasePath(PackageInterface $package) { $installPath = $this->getInstallPath($package); $targetDir = $package->getTargetDir(); if ($targetDir) { return preg_replace('{/*'.str_replace('/', '/+', preg_quote($targetDir)).'/?$}', '', $installPath); } return $installPath; } protected function installCode(PackageInterface $package) { $downloadPath = $this->getInstallPath($package); $this->downloadManager->download($package, $downloadPath); } protected function updateCode(PackageInterface $initial, PackageInterface $target) { $initialDownloadPath = $this->getInstallPath($initial); $targetDownloadPath = $this->getInstallPath($target); if ($targetDownloadPath !== $initialDownloadPath) { // if the target and initial dirs intersect, we force a remove + install // to avoid the rename wiping the target dir as part of the initial dir cleanup if (substr($initialDownloadPath, 0, strlen($targetDownloadPath)) === $targetDownloadPath || substr($targetDownloadPath, 0, strlen($initialDownloadPath)) === $initialDownloadPath ) { $this->removeCode($initial); $this->installCode($target); return; } $this->filesystem->rename($initialDownloadPath, $targetDownloadPath); } $this->downloadManager->update($initial, $target, $targetDownloadPath); } protected function removeCode(PackageInterface $package) { $downloadPath = $this->getPackageBasePath($package); $this->downloadManager->remove($package, $downloadPath); } protected function initializeVendorDir() { $this->filesystem->ensureDirectoryExists($this->vendorDir); $this->vendorDir = realpath($this->vendorDir); } } composer-1.0.0-beta2/src/Composer/Installer/MetapackageInstaller.php000066400000000000000000000035711267577262200254640ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Installer; use Composer\Repository\InstalledRepositoryInterface; use Composer\Package\PackageInterface; /** * Metapackage installation manager. * * @author Martin Hasoň */ class MetapackageInstaller implements InstallerInterface { /** * {@inheritDoc} */ public function supports($packageType) { return $packageType === 'metapackage'; } /** * {@inheritDoc} */ public function isInstalled(InstalledRepositoryInterface $repo, PackageInterface $package) { return $repo->hasPackage($package); } /** * {@inheritDoc} */ public function install(InstalledRepositoryInterface $repo, PackageInterface $package) { $repo->addPackage(clone $package); } /** * {@inheritDoc} */ public function update(InstalledRepositoryInterface $repo, PackageInterface $initial, PackageInterface $target) { if (!$repo->hasPackage($initial)) { throw new \InvalidArgumentException('Package is not installed: '.$initial); } $repo->removePackage($initial); $repo->addPackage(clone $target); } /** * {@inheritDoc} */ public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $package) { if (!$repo->hasPackage($package)) { throw new \InvalidArgumentException('Package is not installed: '.$package); } $repo->removePackage($package); } /** * {@inheritDoc} */ public function getInstallPath(PackageInterface $package) { return ''; } } composer-1.0.0-beta2/src/Composer/Installer/NoopInstaller.php000066400000000000000000000041561267577262200241750ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Installer; use Composer\Repository\InstalledRepositoryInterface; use Composer\Package\PackageInterface; /** * Does not install anything but marks packages installed in the repo * * Useful for dry runs * * @author Jordi Boggiano */ class NoopInstaller implements InstallerInterface { /** * {@inheritDoc} */ public function supports($packageType) { return true; } /** * {@inheritDoc} */ public function isInstalled(InstalledRepositoryInterface $repo, PackageInterface $package) { return $repo->hasPackage($package); } /** * {@inheritDoc} */ public function install(InstalledRepositoryInterface $repo, PackageInterface $package) { if (!$repo->hasPackage($package)) { $repo->addPackage(clone $package); } } /** * {@inheritDoc} */ public function update(InstalledRepositoryInterface $repo, PackageInterface $initial, PackageInterface $target) { if (!$repo->hasPackage($initial)) { throw new \InvalidArgumentException('Package is not installed: '.$initial); } $repo->removePackage($initial); if (!$repo->hasPackage($target)) { $repo->addPackage(clone $target); } } /** * {@inheritDoc} */ public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $package) { if (!$repo->hasPackage($package)) { throw new \InvalidArgumentException('Package is not installed: '.$package); } $repo->removePackage($package); } /** * {@inheritDoc} */ public function getInstallPath(PackageInterface $package) { $targetDir = $package->getTargetDir(); return $package->getPrettyName() . ($targetDir ? '/'.$targetDir : ''); } } composer-1.0.0-beta2/src/Composer/Installer/PackageEvent.php000066400000000000000000000035241267577262200237370ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Installer; use Composer\Composer; use Composer\IO\IOInterface; use Composer\DependencyResolver\Operation\OperationInterface; use Composer\DependencyResolver\PolicyInterface; use Composer\DependencyResolver\Pool; use Composer\DependencyResolver\Request; use Composer\Repository\CompositeRepository; /** * The Package Event. * * @author Jordi Boggiano */ class PackageEvent extends InstallerEvent { /** * @var OperationInterface The package instance */ private $operation; /** * Constructor. * * @param string $eventName * @param Composer $composer * @param IOInterface $io * @param bool $devMode * @param PolicyInterface $policy * @param Pool $pool * @param CompositeRepository $installedRepo * @param Request $request * @param OperationInterface[] $operations * @param OperationInterface $operation */ public function __construct($eventName, Composer $composer, IOInterface $io, $devMode, PolicyInterface $policy, Pool $pool, CompositeRepository $installedRepo, Request $request, array $operations, OperationInterface $operation) { parent::__construct($eventName, $composer, $io, $devMode, $policy, $pool, $installedRepo, $request, $operations); $this->operation = $operation; } /** * Returns the package instance. * * @return OperationInterface */ public function getOperation() { return $this->operation; } } composer-1.0.0-beta2/src/Composer/Installer/PackageEvents.php000066400000000000000000000037221267577262200241220ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Installer; /** * Package Events. * * @author Jordi Boggiano */ class PackageEvents { /** * The PRE_PACKAGE_INSTALL event occurs before a package is installed. * * The event listener method receives a Composer\Script\PackageEvent instance. * * @var string */ const PRE_PACKAGE_INSTALL = 'pre-package-install'; /** * The POST_PACKAGE_INSTALL event occurs after a package is installed. * * The event listener method receives a Composer\Script\PackageEvent instance. * * @var string */ const POST_PACKAGE_INSTALL = 'post-package-install'; /** * The PRE_PACKAGE_UPDATE event occurs before a package is updated. * * The event listener method receives a Composer\Script\PackageEvent instance. * * @var string */ const PRE_PACKAGE_UPDATE = 'pre-package-update'; /** * The POST_PACKAGE_UPDATE event occurs after a package is updated. * * The event listener method receives a Composer\Script\PackageEvent instance. * * @var string */ const POST_PACKAGE_UPDATE = 'post-package-update'; /** * The PRE_PACKAGE_UNINSTALL event occurs before a package has been uninstalled. * * The event listener method receives a Composer\Script\PackageEvent instance. * * @var string */ const PRE_PACKAGE_UNINSTALL = 'pre-package-uninstall'; /** * The POST_PACKAGE_UNINSTALL event occurs after a package has been uninstalled. * * The event listener method receives a Composer\Script\PackageEvent instance. * * @var string */ const POST_PACKAGE_UNINSTALL = 'post-package-uninstall'; } composer-1.0.0-beta2/src/Composer/Installer/PearBinaryInstaller.php000066400000000000000000000114251267577262200253130ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Installer; use Composer\IO\IOInterface; use Composer\Package\PackageInterface; use Composer\Util\Filesystem; use Composer\Util\Platform; use Composer\Util\ProcessExecutor; use Composer\Util\Silencer; /** * Utility to handle installation of package "bin"/binaries for PEAR packages * * @author Jordi Boggiano */ class PearBinaryInstaller extends BinaryInstaller { private $installer; private $vendorDir; /** * @param IOInterface $io * @param string $binDir * @param string $binCompat * @param Filesystem $filesystem */ public function __construct(IOInterface $io, $binDir, $vendorDir, $binCompat, Filesystem $filesystem, PearInstaller $installer) { parent::__construct($io, $binDir, $binCompat, $filesystem); $this->installer = $installer; $this->vendorDir = $vendorDir; } protected function getBinaries(PackageInterface $package) { $binariesPath = $this->installer->getInstallPath($package) . '/bin/'; $binaries = array(); if (file_exists($binariesPath)) { foreach (new \FilesystemIterator($binariesPath, \FilesystemIterator::KEY_AS_FILENAME | \FilesystemIterator::CURRENT_AS_FILEINFO) as $fileName => $value) { if (!$value->isDir()) { $binaries[] = 'bin/'.$fileName; } } } return $binaries; } protected function initializeBinDir() { parent::initializeBinDir(); file_put_contents($this->binDir.'/composer-php', $this->generateUnixyPhpProxyCode()); @chmod($this->binDir.'/composer-php', 0777); file_put_contents($this->binDir.'/composer-php.bat', $this->generateWindowsPhpProxyCode()); @chmod($this->binDir.'/composer-php.bat', 0777); } protected function generateWindowsProxyCode($bin, $link) { $binPath = $this->filesystem->findShortestPath($link, $bin); if ('.bat' === substr($bin, -4)) { $caller = 'call'; } else { $handle = fopen($bin, 'r'); $line = fgets($handle); fclose($handle); if (preg_match('{^#!/(?:usr/bin/env )?(?:[^/]+/)*(.+)$}m', $line, $match)) { $caller = trim($match[1]); } else { $caller = 'php'; } if ($caller === 'php') { return "@echo off\r\n". "pushd .\r\n". "cd %~dp0\r\n". "set PHP_PROXY=%CD%\\composer-php.bat\r\n". "cd ".ProcessExecutor::escape(dirname($binPath))."\r\n". "set BIN_TARGET=%CD%\\".basename($binPath)."\r\n". "popd\r\n". "%PHP_PROXY% \"%BIN_TARGET%\" %*\r\n"; } } return "@echo off\r\n". "pushd .\r\n". "cd %~dp0\r\n". "cd ".ProcessExecutor::escape(dirname($binPath))."\r\n". "set BIN_TARGET=%CD%\\".basename($binPath)."\r\n". "popd\r\n". $caller." \"%BIN_TARGET%\" %*\r\n"; } private function generateWindowsPhpProxyCode() { $binToVendor = $this->filesystem->findShortestPath($this->binDir, $this->vendorDir, true); return "@echo off\r\n" . "setlocal enabledelayedexpansion\r\n" . "set BIN_DIR=%~dp0\r\n" . "set VENDOR_DIR=%BIN_DIR%\\".$binToVendor."\r\n" . "set DIRS=.\r\n" . "FOR /D %%V IN (%VENDOR_DIR%\\*) DO (\r\n" . " FOR /D %%P IN (%%V\\*) DO (\r\n" . " set DIRS=!DIRS!;%%~fP\r\n" . " )\r\n" . ")\r\n" . "php.exe -d include_path=!DIRS! %*\r\n"; } private function generateUnixyPhpProxyCode() { $binToVendor = $this->filesystem->findShortestPath($this->binDir, $this->vendorDir, true); return "#!/usr/bin/env sh\n". "SRC_DIR=`pwd`\n". "BIN_DIR=`dirname $0`\n". "VENDOR_DIR=\$BIN_DIR/".escapeshellarg($binToVendor)."\n". "DIRS=\"\"\n". "for vendor in \$VENDOR_DIR/*; do\n". " if [ -d \"\$vendor\" ]; then\n". " for package in \$vendor/*; do\n". " if [ -d \"\$package\" ]; then\n". " DIRS=\"\${DIRS}:\${package}\"\n". " fi\n". " done\n". " fi\n". "done\n". "php -d include_path=\".\$DIRS\" $@\n"; } } composer-1.0.0-beta2/src/Composer/Installer/PearInstaller.php000066400000000000000000000055311267577262200241470ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Installer; use Composer\IO\IOInterface; use Composer\Composer; use Composer\Downloader\PearPackageExtractor; use Composer\Repository\InstalledRepositoryInterface; use Composer\Package\PackageInterface; use Composer\Util\Platform; use Composer\Util\ProcessExecutor; use Composer\Util\Filesystem; /** * Package installation manager. * * @author Jordi Boggiano * @author Konstantin Kudryashov */ class PearInstaller extends LibraryInstaller { /** * Initializes library installer. * * @param IOInterface $io io instance * @param Composer $composer * @param string $type package type that this installer handles */ public function __construct(IOInterface $io, Composer $composer, $type = 'pear-library') { $filesystem = new Filesystem(); $binaryInstaller = new PearBinaryInstaller($io, rtrim($composer->getConfig()->get('bin-dir'), '/'), rtrim($composer->getConfig()->get('vendor-dir'), '/'), $composer->getConfig()->get('bin-compat'), $filesystem, $this); parent::__construct($io, $composer, $type, $filesystem, $binaryInstaller); } /** * {@inheritDoc} */ public function update(InstalledRepositoryInterface $repo, PackageInterface $initial, PackageInterface $target) { $this->uninstall($repo, $initial); $this->install($repo, $target); } protected function installCode(PackageInterface $package) { parent::installCode($package); $isWindows = Platform::isWindows(); $php_bin = $this->binDir . ($isWindows ? '/composer-php.bat' : '/composer-php'); if (!$isWindows) { $php_bin = '/usr/bin/env ' . $php_bin; } $installPath = $this->getInstallPath($package); $vars = array( 'os' => $isWindows ? 'windows' : 'linux', 'php_bin' => $php_bin, 'pear_php' => $installPath, 'php_dir' => $installPath, 'bin_dir' => $installPath . '/bin', 'data_dir' => $installPath . '/data', 'version' => $package->getPrettyVersion(), ); $packageArchive = $this->getInstallPath($package).'/'.pathinfo($package->getDistUrl(), PATHINFO_BASENAME); $pearExtractor = new PearPackageExtractor($packageArchive); $pearExtractor->extractTo($this->getInstallPath($package), array('php' => '/', 'script' => '/bin', 'data' => '/data'), $vars); $this->io->writeError(' Cleaning up', true, IOInterface::VERBOSE); $this->filesystem->unlink($packageArchive); } } composer-1.0.0-beta2/src/Composer/Installer/PluginInstaller.php000066400000000000000000000044741267577262200245230ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Installer; use Composer\Composer; use Composer\IO\IOInterface; use Composer\Repository\InstalledRepositoryInterface; use Composer\Package\PackageInterface; /** * Installer for plugin packages * * @author Jordi Boggiano * @author Nils Adermann */ class PluginInstaller extends LibraryInstaller { private $installationManager; /** * Initializes Plugin installer. * * @param IOInterface $io * @param Composer $composer * @param string $type */ public function __construct(IOInterface $io, Composer $composer, $type = 'library') { parent::__construct($io, $composer, 'composer-plugin'); $this->installationManager = $composer->getInstallationManager(); } /** * {@inheritDoc} */ public function supports($packageType) { return $packageType === 'composer-plugin' || $packageType === 'composer-installer'; } /** * {@inheritDoc} */ public function install(InstalledRepositoryInterface $repo, PackageInterface $package) { $extra = $package->getExtra(); if (empty($extra['class'])) { throw new \UnexpectedValueException('Error while installing '.$package->getPrettyName().', composer-plugin packages should have a class defined in their extra key to be usable.'); } parent::install($repo, $package); $this->composer->getPluginManager()->registerPackage($package, true); } /** * {@inheritDoc} */ public function update(InstalledRepositoryInterface $repo, PackageInterface $initial, PackageInterface $target) { $extra = $target->getExtra(); if (empty($extra['class'])) { throw new \UnexpectedValueException('Error while installing '.$target->getPrettyName().', composer-plugin packages should have a class defined in their extra key to be usable.'); } parent::update($repo, $initial, $target); $this->composer->getPluginManager()->registerPackage($target, true); } } composer-1.0.0-beta2/src/Composer/Installer/ProjectInstaller.php000066400000000000000000000050571267577262200246710ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Installer; use Composer\Package\PackageInterface; use Composer\Downloader\DownloadManager; use Composer\Repository\InstalledRepositoryInterface; use Composer\Util\Filesystem; /** * Project Installer is used to install a single package into a directory as * root project. * * @author Benjamin Eberlei */ class ProjectInstaller implements InstallerInterface { private $installPath; private $downloadManager; private $filesystem; public function __construct($installPath, DownloadManager $dm) { $this->installPath = rtrim(strtr($installPath, '\\', '/'), '/').'/'; $this->downloadManager = $dm; $this->filesystem = new Filesystem; } /** * Decides if the installer supports the given type * * @param string $packageType * @return bool */ public function supports($packageType) { return true; } /** * {@inheritDoc} */ public function isInstalled(InstalledRepositoryInterface $repo, PackageInterface $package) { return false; } /** * {@inheritDoc} */ public function install(InstalledRepositoryInterface $repo, PackageInterface $package) { $installPath = $this->installPath; if (file_exists($installPath) && !$this->filesystem->isDirEmpty($installPath)) { throw new \InvalidArgumentException("Project directory $installPath is not empty."); } if (!is_dir($installPath)) { mkdir($installPath, 0777, true); } $this->downloadManager->download($package, $installPath); } /** * {@inheritDoc} */ public function update(InstalledRepositoryInterface $repo, PackageInterface $initial, PackageInterface $target) { throw new \InvalidArgumentException("not supported"); } /** * {@inheritDoc} */ public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $package) { throw new \InvalidArgumentException("not supported"); } /** * Returns the installation path of a package * * @param PackageInterface $package * @return string path */ public function getInstallPath(PackageInterface $package) { return $this->installPath; } } composer-1.0.0-beta2/src/Composer/Installer/SuggestedPackagesReporter.php000066400000000000000000000064061267577262200265200ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Installer; use Composer\IO\IOInterface; use Composer\Package\PackageInterface; use Composer\Repository\RepositoryInterface; /** * Add suggested packages from different places to output them in the end. * * @author Haralan Dobrev */ class SuggestedPackagesReporter { /** * @var array */ protected $suggestedPackages = array(); /** * @var Composer\IO\IOInterface */ private $io; public function __construct(IOInterface $io) { $this->io = $io; } /** * @return array Suggested packages with source, target and reason keys. */ public function getPackages() { return $this->suggestedPackages; } /** * Add suggested packages to be listed after install * * Could be used to add suggested packages both from the installer * or from CreateProjectCommand. * * @param string $source Source package which made the suggestion * @param string $target Target package to be suggested * @param string $reason Reason the target package to be suggested * @return SuggestedPackagesReporter */ public function addPackage($source, $target, $reason) { $this->suggestedPackages[] = array( 'source' => $source, 'target' => $target, 'reason' => $reason, ); return $this; } /** * Add all suggestions from a package. * * @param PackageInterface $package * @return SuggestedPackagesReporter */ public function addSuggestionsFromPackage(PackageInterface $package) { $source = $package->getPrettyName(); foreach ($package->getSuggests() as $target => $reason) { $this->addPackage( $source, $target, $reason ); } return $this; } /** * Output suggested packages. * Do not list the ones already installed if installed repository provided. * * @param RepositoryInterface $installedRepo Installed packages * @return SuggestedPackagesReporter */ public function output(RepositoryInterface $installedRepo = null) { $suggestedPackages = $this->getPackages(); $installedPackages = array(); if (null !== $installedRepo && ! empty($suggestedPackages)) { foreach ($installedRepo->getPackages() as $package) { $installedPackages = array_merge( $installedPackages, $package->getNames() ); } } foreach ($suggestedPackages as $suggestion) { if (in_array($suggestion['target'], $installedPackages)) { continue; } $this->io->writeError(sprintf( '%s suggests installing %s (%s)', $suggestion['source'], $suggestion['target'], $suggestion['reason'] )); } return $this; } } composer-1.0.0-beta2/src/Composer/Json/000077500000000000000000000000001267577262200176415ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/Json/JsonFile.php000066400000000000000000000220701267577262200220640ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Json; use JsonSchema\Validator; use Seld\JsonLint\JsonParser; use Seld\JsonLint\ParsingException; use Composer\Util\RemoteFilesystem; use Composer\IO\IOInterface; use Composer\Downloader\TransportException; /** * Reads/writes json files. * * @author Konstantin Kudryashiv * @author Jordi Boggiano */ class JsonFile { const LAX_SCHEMA = 1; const STRICT_SCHEMA = 2; const JSON_UNESCAPED_SLASHES = 64; const JSON_PRETTY_PRINT = 128; const JSON_UNESCAPED_UNICODE = 256; private $path; private $rfs; private $io; /** * Initializes json file reader/parser. * * @param string $path path to a lockfile * @param RemoteFilesystem $rfs required for loading http/https json files * @throws \InvalidArgumentException */ public function __construct($path, RemoteFilesystem $rfs = null, IOInterface $io = null) { $this->path = $path; if (null === $rfs && preg_match('{^https?://}i', $path)) { throw new \InvalidArgumentException('http urls require a RemoteFilesystem instance to be passed'); } $this->rfs = $rfs; $this->io = $io; } /** * @return string */ public function getPath() { return $this->path; } /** * Checks whether json file exists. * * @return bool */ public function exists() { return is_file($this->path); } /** * Reads json file. * * @throws \RuntimeException * @return mixed */ public function read() { try { if ($this->rfs) { $json = $this->rfs->getContents($this->path, $this->path, false); } else { if ($this->io && $this->io->isDebug()) { $this->io->writeError('Reading ' . $this->path); } $json = file_get_contents($this->path); } } catch (TransportException $e) { throw new \RuntimeException($e->getMessage(), 0, $e); } catch (\Exception $e) { throw new \RuntimeException('Could not read '.$this->path."\n\n".$e->getMessage()); } return static::parseJson($json, $this->path); } /** * Writes json file. * * @param array $hash writes hash into json file * @param int $options json_encode options (defaults to JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) * @throws \UnexpectedValueException */ public function write(array $hash, $options = 448) { $dir = dirname($this->path); if (!is_dir($dir)) { if (file_exists($dir)) { throw new \UnexpectedValueException( $dir.' exists and is not a directory.' ); } if (!@mkdir($dir, 0777, true)) { throw new \UnexpectedValueException( $dir.' does not exist and could not be created.' ); } } $retries = 3; while ($retries--) { try { file_put_contents($this->path, static::encode($hash, $options). ($options & self::JSON_PRETTY_PRINT ? "\n" : '')); break; } catch (\Exception $e) { if ($retries) { usleep(500000); continue; } throw $e; } } } /** * Validates the schema of the current json file according to composer-schema.json rules * * @param int $schema a JsonFile::*_SCHEMA constant * @throws JsonValidationException * @return bool true on success */ public function validateSchema($schema = self::STRICT_SCHEMA) { $content = file_get_contents($this->path); $data = json_decode($content); if (null === $data && 'null' !== $content) { self::validateSyntax($content, $this->path); } $schemaFile = __DIR__ . '/../../../res/composer-schema.json'; $schemaData = json_decode(file_get_contents($schemaFile)); if ($schema === self::LAX_SCHEMA) { $schemaData->additionalProperties = true; $schemaData->required = array(); } $validator = new Validator(); $validator->check($data, $schemaData); // TODO add more validation like check version constraints and such, perhaps build that into the arrayloader? if (!$validator->isValid()) { $errors = array(); foreach ((array) $validator->getErrors() as $error) { $errors[] = ($error['property'] ? $error['property'].' : ' : '').$error['message']; } throw new JsonValidationException('"'.$this->path.'" does not match the expected JSON schema', $errors); } return true; } /** * Encodes an array into (optionally pretty-printed) JSON * * @param mixed $data Data to encode into a formatted JSON string * @param int $options json_encode options (defaults to JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) * @return string Encoded json */ public static function encode($data, $options = 448) { if (PHP_VERSION_ID >= 50400) { $json = json_encode($data, $options); if (false === $json) { self::throwEncodeError(json_last_error()); } // compact brackets to follow recent php versions if (PHP_VERSION_ID < 50428 || (PHP_VERSION_ID >= 50500 && PHP_VERSION_ID < 50512) || (defined('JSON_C_VERSION') && version_compare(phpversion('json'), '1.3.6', '<'))) { $json = preg_replace('/\[\s+\]/', '[]', $json); $json = preg_replace('/\{\s+\}/', '{}', $json); } return $json; } $json = json_encode($data); if (false === $json) { self::throwEncodeError(json_last_error()); } $prettyPrint = (bool) ($options & self::JSON_PRETTY_PRINT); $unescapeUnicode = (bool) ($options & self::JSON_UNESCAPED_UNICODE); $unescapeSlashes = (bool) ($options & self::JSON_UNESCAPED_SLASHES); if (!$prettyPrint && !$unescapeUnicode && !$unescapeSlashes) { return $json; } $result = JsonFormatter::format($json, $unescapeUnicode, $unescapeSlashes); return $result; } /** * Throws an exception according to a given code with a customized message * * @param int $code return code of json_last_error function * @throws \RuntimeException */ private static function throwEncodeError($code) { switch ($code) { case JSON_ERROR_DEPTH: $msg = 'Maximum stack depth exceeded'; break; case JSON_ERROR_STATE_MISMATCH: $msg = 'Underflow or the modes mismatch'; break; case JSON_ERROR_CTRL_CHAR: $msg = 'Unexpected control character found'; break; case JSON_ERROR_UTF8: $msg = 'Malformed UTF-8 characters, possibly incorrectly encoded'; break; default: $msg = 'Unknown error'; } throw new \RuntimeException('JSON encoding failed: '.$msg); } /** * Parses json string and returns hash. * * @param string $json json string * @param string $file the json file * * @return mixed */ public static function parseJson($json, $file = null) { if (null === $json) { return; } $data = json_decode($json, true); if (null === $data && JSON_ERROR_NONE !== json_last_error()) { self::validateSyntax($json, $file); } return $data; } /** * Validates the syntax of a JSON string * * @param string $json * @param string $file * @throws \UnexpectedValueException * @throws JsonValidationException * @throws ParsingException * @return bool true on success */ protected static function validateSyntax($json, $file = null) { $parser = new JsonParser(); $result = $parser->lint($json); if (null === $result) { if (defined('JSON_ERROR_UTF8') && JSON_ERROR_UTF8 === json_last_error()) { throw new \UnexpectedValueException('"'.$file.'" is not UTF-8, could not parse as JSON'); } return true; } throw new ParsingException('"'.$file.'" does not contain valid JSON'."\n".$result->getMessage(), $result->getDetails()); } } composer-1.0.0-beta2/src/Composer/Json/JsonFormatter.php000066400000000000000000000100241267577262200231440ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Json; /** * Formats json strings used for php < 5.4 because the json_encode doesn't * supports the flags JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE * in these versions * * @author Konstantin Kudryashiv * @author Jordi Boggiano */ class JsonFormatter { /** * This code is based on the function found at: * http://recursive-design.com/blog/2008/03/11/format-json-with-php/ * * Originally licensed under MIT by Dave Perrett * * * @param string $json * @param bool $unescapeUnicode Un escape unicode * @param bool $unescapeSlashes Un escape slashes * @return string */ public static function format($json, $unescapeUnicode, $unescapeSlashes) { $result = ''; $pos = 0; $strLen = strlen($json); $indentStr = ' '; $newLine = "\n"; $outOfQuotes = true; $buffer = ''; $noescape = true; for ($i = 0; $i < $strLen; $i++) { // Grab the next character in the string $char = substr($json, $i, 1); // Are we inside a quoted string? if ('"' === $char && $noescape) { $outOfQuotes = !$outOfQuotes; } if (!$outOfQuotes) { $buffer .= $char; $noescape = '\\' === $char ? !$noescape : true; continue; } elseif ('' !== $buffer) { if ($unescapeSlashes) { $buffer = str_replace('\\/', '/', $buffer); } if ($unescapeUnicode && function_exists('mb_convert_encoding')) { // https://stackoverflow.com/questions/2934563/how-to-decode-unicode-escape-sequences-like-u00ed-to-proper-utf-8-encoded-cha $buffer = preg_replace_callback('/(\\\\+)u([0-9a-f]{4})/i', function ($match) { $l = strlen($match[1]); if ($l % 2) { return str_repeat('\\', $l - 1) . mb_convert_encoding( pack('H*', $match[2]), 'UTF-8', 'UCS-2BE' ); } return $match[0]; }, $buffer); } $result .= $buffer.$char; $buffer = ''; continue; } if (':' === $char) { // Add a space after the : character $char .= ' '; } elseif (('}' === $char || ']' === $char)) { $pos--; $prevChar = substr($json, $i - 1, 1); if ('{' !== $prevChar && '[' !== $prevChar) { // If this character is the end of an element, // output a new line and indent the next line $result .= $newLine; for ($j = 0; $j < $pos; $j++) { $result .= $indentStr; } } else { // Collapse empty {} and [] $result = rtrim($result); } } $result .= $char; // If the last character was the beginning of an element, // output a new line and indent the next line if (',' === $char || '{' === $char || '[' === $char) { $result .= $newLine; if ('{' === $char || '[' === $char) { $pos++; } for ($j = 0; $j < $pos; $j++) { $result .= $indentStr; } } } return $result; } } composer-1.0.0-beta2/src/Composer/Json/JsonManipulator.php000066400000000000000000000375151267577262200235120ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Json; use Composer\Repository\PlatformRepository; /** * @author Jordi Boggiano */ class JsonManipulator { private static $RECURSE_BLOCKS; private static $RECURSE_ARRAYS; private static $JSON_VALUE; private static $JSON_STRING; private $contents; private $newline; private $indent; public function __construct($contents) { if (!self::$RECURSE_BLOCKS) { self::$RECURSE_BLOCKS = '(?:[^{}]*+|\{(?:[^{}]*+|\{(?:[^{}]*+|\{(?:[^{}]*+|\{[^{}]*+\})*\})*\})*\})*'; self::$RECURSE_ARRAYS = '(?:[^\]]*+|\[(?:[^\]]*+|\[(?:[^\]]*+|\[(?:[^\]]*+|\[[^\]]*+\])*\])*\])*\]|'.self::$RECURSE_BLOCKS.')*'; self::$JSON_STRING = '"(?:[^\0-\x09\x0a-\x1f\\\\"]+|\\\\["bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4})*+"'; self::$JSON_VALUE = '(?:[0-9.]+|null|true|false|'.self::$JSON_STRING.'|\['.self::$RECURSE_ARRAYS.'\]|\{'.self::$RECURSE_BLOCKS.'\})'; } $contents = trim($contents); if ($contents === '') { $contents = '{}'; } if (!$this->pregMatch('#^\{(.*)\}$#s', $contents)) { throw new \InvalidArgumentException('The json file must be an object ({})'); } $this->newline = false !== strpos($contents, "\r\n") ? "\r\n" : "\n"; $this->contents = $contents === '{}' ? '{' . $this->newline . '}' : $contents; $this->detectIndenting(); } public function getContents() { return $this->contents . $this->newline; } public function addLink($type, $package, $constraint, $sortPackages = false) { $decoded = JsonFile::parseJson($this->contents); // no link of that type yet if (!isset($decoded[$type])) { return $this->addMainKey($type, array($package => $constraint)); } $regex = '{^(\s*\{\s*(?:'.self::$JSON_STRING.'\s*:\s*'.self::$JSON_VALUE.'\s*,\s*)*?)'. '('.preg_quote(JsonFile::encode($type)).'\s*:\s*)('.self::$JSON_VALUE.')(.*)}s'; if (!$this->pregMatch($regex, $this->contents, $matches)) { return false; } $links = $matches[3]; if (isset($decoded[$type][$package])) { // update existing link $packageRegex = str_replace('/', '\\\\?/', preg_quote($package)); // addcslashes is used to double up backslashes since preg_replace resolves them as back references otherwise, see #1588 $links = preg_replace('{"'.$packageRegex.'"(\s*:\s*)'.self::$JSON_STRING.'}i', addcslashes(JsonFile::encode($package).'${1}"'.$constraint.'"', '\\'), $links); } else { if ($this->pregMatch('#^\s*\{\s*\S+.*?(\s*\}\s*)$#s', $links, $match)) { // link missing but non empty links $links = preg_replace( '{'.preg_quote($match[1]).'$}', addcslashes(',' . $this->newline . $this->indent . $this->indent . JsonFile::encode($package).': '.JsonFile::encode($constraint) . $match[1], '\\'), $links ); } else { // links empty $links = '{' . $this->newline . $this->indent . $this->indent . JsonFile::encode($package).': '.JsonFile::encode($constraint) . $this->newline . $this->indent . '}'; } } if (true === $sortPackages) { $requirements = json_decode($links, true); $this->sortPackages($requirements); $links = $this->format($requirements); } $this->contents = $matches[1] . $matches[2] . $links . $matches[4]; return true; } /** * Sorts packages by importance (platform packages first, then PHP dependencies) and alphabetically. * * @link https://getcomposer.org/doc/02-libraries.md#platform-packages * * @param array $packages */ private function sortPackages(array &$packages = array()) { $prefix = function ($requirement) { if (preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $requirement)) { return preg_replace( array( '/^php/', '/^hhvm/', '/^ext/', '/^lib/', '/^\D/', ), array( '0-$0', '1-$0', '2-$0', '3-$0', '4-$0', ), $requirement ); } return '5-'.$requirement; }; uksort($packages, function ($a, $b) use ($prefix) { return strnatcmp($prefix($a), $prefix($b)); }); } public function addRepository($name, $config) { return $this->addSubNode('repositories', $name, $config); } public function removeRepository($name) { return $this->removeSubNode('repositories', $name); } public function addConfigSetting($name, $value) { return $this->addSubNode('config', $name, $value); } public function removeConfigSetting($name) { return $this->removeSubNode('config', $name); } public function addSubNode($mainNode, $name, $value) { $decoded = JsonFile::parseJson($this->contents); $subName = null; if (in_array($mainNode, array('config', 'repositories')) && false !== strpos($name, '.')) { list($name, $subName) = explode('.', $name, 2); } // no main node yet if (!isset($decoded[$mainNode])) { if ($subName !== null) { $this->addMainKey($mainNode, array($name => array($subName => $value))); } else { $this->addMainKey($mainNode, array($name => $value)); } return true; } // main node content not match-able $nodeRegex = '{^(\s*\{\s*(?:'.self::$JSON_STRING.'\s*:\s*'.self::$JSON_VALUE.'\s*,\s*)*?)'. '('.preg_quote(JsonFile::encode($mainNode)).'\s*:\s*\{)('.self::$RECURSE_BLOCKS.')(\})(.*)}s'; try { if (!$this->pregMatch($nodeRegex, $this->contents, $match)) { return false; } } catch (\RuntimeException $e) { if ($e->getCode() === PREG_BACKTRACK_LIMIT_ERROR) { return false; } throw $e; } $children = $match[3]; // invalid match due to un-regexable content, abort if (!@json_decode('{'.$children.'}')) { return false; } $that = $this; // child exists if ($this->pregMatch('{("'.preg_quote($name).'"\s*:\s*)('.self::$JSON_VALUE.')(,?)}', $children, $matches)) { $children = preg_replace_callback('{("'.preg_quote($name).'"\s*:\s*)('.self::$JSON_VALUE.')(,?)}', function ($matches) use ($name, $subName, $value, $that) { if ($subName !== null) { $curVal = json_decode($matches[2], true); $curVal[$subName] = $value; $value = $curVal; } return $matches[1] . $that->format($value, 1) . $matches[3]; }, $children); } elseif ($this->pregMatch('#[^\s](\s*)$#', $children, $match)) { if ($subName !== null) { $value = array($subName => $value); } // child missing but non empty children $children = preg_replace( '#'.$match[1].'$#', addcslashes(',' . $this->newline . $this->indent . $this->indent . JsonFile::encode($name).': '.$this->format($value, 1) . $match[1], '\\'), $children ); } else { if ($subName !== null) { $value = array($subName => $value); } // children present but empty $children = $this->newline . $this->indent . $this->indent . JsonFile::encode($name).': '.$this->format($value, 1) . $children; } $this->contents = preg_replace($nodeRegex, addcslashes('${1}${2}'.$children.'${4}${5}', '\\'), $this->contents); return true; } public function removeSubNode($mainNode, $name) { $decoded = JsonFile::parseJson($this->contents); // no node or empty node if (empty($decoded[$mainNode])) { return true; } // no node content match-able $nodeRegex = '{^(\s*\{\s*(?:'.self::$JSON_STRING.'\s*:\s*'.self::$JSON_VALUE.'\s*,\s*)*?)'. '('.preg_quote(JsonFile::encode($mainNode)).'\s*:\s*\{)('.self::$RECURSE_BLOCKS.')(\})(.*)}s'; try { if (!$this->pregMatch($nodeRegex, $this->contents, $match)) { return false; } } catch (\RuntimeException $e) { if ($e->getCode() === PREG_BACKTRACK_LIMIT_ERROR) { return false; } throw $e; } $children = $match[3]; // invalid match due to un-regexable content, abort if (!@json_decode('{'.$children.'}', true)) { return false; } $subName = null; if (in_array($mainNode, array('config', 'repositories')) && false !== strpos($name, '.')) { list($name, $subName) = explode('.', $name, 2); } // no node to remove if (!isset($decoded[$mainNode][$name]) || ($subName && !isset($decoded[$mainNode][$name][$subName]))) { return true; } // try and find a match for the subkey if ($this->pregMatch('{"'.preg_quote($name).'"\s*:}i', $children)) { // find best match for the value of "name" if (preg_match_all('{"'.preg_quote($name).'"\s*:\s*(?:'.self::$JSON_VALUE.')}', $children, $matches)) { $bestMatch = ''; foreach ($matches[0] as $match) { if (strlen($bestMatch) < strlen($match)) { $bestMatch = $match; } } $childrenClean = preg_replace('{,\s*'.preg_quote($bestMatch).'}i', '', $children, -1, $count); if (1 !== $count) { $childrenClean = preg_replace('{'.preg_quote($bestMatch).'\s*,?\s*}i', '', $childrenClean, -1, $count); if (1 !== $count) { return false; } } } } else { $childrenClean = $children; } // no child data left, $name was the only key in if (!trim($childrenClean)) { $this->contents = preg_replace($nodeRegex, '$1$2'.$this->newline.$this->indent.'$4$5', $this->contents); // we have a subname, so we restore the rest of $name if ($subName !== null) { $curVal = json_decode('{'.$children.'}', true); unset($curVal[$name][$subName]); $this->addSubNode($mainNode, $name, $curVal[$name]); } return true; } $that = $this; $this->contents = preg_replace_callback($nodeRegex, function ($matches) use ($that, $name, $subName, $childrenClean) { if ($subName !== null) { $curVal = json_decode('{'.$matches[3].'}', true); unset($curVal[$name][$subName]); $childrenClean = substr($that->format($curVal, 0), 1, -1); } return $matches[1] . $matches[2] . $childrenClean . $matches[4] . $matches[5]; }, $this->contents); return true; } public function addMainKey($key, $content) { $decoded = JsonFile::parseJson($this->contents); $content = $this->format($content); // key exists already $regex = '{^(\s*\{\s*(?:'.self::$JSON_STRING.'\s*:\s*'.self::$JSON_VALUE.'\s*,\s*)*?)'. '('.preg_quote(JsonFile::encode($key)).'\s*:\s*'.self::$JSON_VALUE.')(.*)}s'; if (isset($decoded[$key]) && $this->pregMatch($regex, $this->contents, $matches)) { // invalid match due to un-regexable content, abort if (!@json_decode('{'.$matches[2].'}')) { return false; } $this->contents = $matches[1] . JsonFile::encode($key).': '.$content . $matches[3]; return true; } // append at the end of the file and keep whitespace if ($this->pregMatch('#[^{\s](\s*)\}$#', $this->contents, $match)) { $this->contents = preg_replace( '#'.$match[1].'\}$#', addcslashes(',' . $this->newline . $this->indent . JsonFile::encode($key). ': '. $content . $this->newline . '}', '\\'), $this->contents ); return true; } // append at the end of the file $this->contents = preg_replace( '#\}$#', addcslashes($this->indent . JsonFile::encode($key). ': '.$content . $this->newline . '}', '\\'), $this->contents ); return true; } public function format($data, $depth = 0) { if (is_array($data)) { reset($data); if (is_numeric(key($data))) { foreach ($data as $key => $val) { $data[$key] = $this->format($val, $depth + 1); } return '['.implode(', ', $data).']'; } $out = '{' . $this->newline; $elems = array(); foreach ($data as $key => $val) { $elems[] = str_repeat($this->indent, $depth + 2) . JsonFile::encode($key). ': '.$this->format($val, $depth + 1); } return $out . implode(','.$this->newline, $elems) . $this->newline . str_repeat($this->indent, $depth + 1) . '}'; } return JsonFile::encode($data); } protected function detectIndenting() { if ($this->pregMatch('{^([ \t]+)"}m', $this->contents, $match)) { $this->indent = $match[1]; } else { $this->indent = ' '; } } protected function pregMatch($re, $str, &$matches = array()) { $count = preg_match($re, $str, $matches); if ($count === false) { switch (preg_last_error()) { case PREG_NO_ERROR: throw new \RuntimeException('Failed to execute regex: PREG_NO_ERROR', PREG_NO_ERROR); case PREG_INTERNAL_ERROR: throw new \RuntimeException('Failed to execute regex: PREG_INTERNAL_ERROR', PREG_INTERNAL_ERROR); case PREG_BACKTRACK_LIMIT_ERROR: throw new \RuntimeException('Failed to execute regex: PREG_BACKTRACK_LIMIT_ERROR', PREG_BACKTRACK_LIMIT_ERROR); case PREG_RECURSION_LIMIT_ERROR: throw new \RuntimeException('Failed to execute regex: PREG_RECURSION_LIMIT_ERROR', PREG_RECURSION_LIMIT_ERROR); case PREG_BAD_UTF8_ERROR: throw new \RuntimeException('Failed to execute regex: PREG_BAD_UTF8_ERROR', PREG_BAD_UTF8_ERROR); case PREG_BAD_UTF8_OFFSET_ERROR: throw new \RuntimeException('Failed to execute regex: PREG_BAD_UTF8_OFFSET_ERROR', PREG_BAD_UTF8_OFFSET_ERROR); case 6: // PREG_JIT_STACKLIMIT_ERROR if (PHP_VERSION_ID > 70000) { throw new \RuntimeException('Failed to execute regex: PREG_JIT_STACKLIMIT_ERROR', 6); } // fallthrough default: throw new \RuntimeException('Failed to execute regex: Unknown error'); } } return $count; } } composer-1.0.0-beta2/src/Composer/Json/JsonValidationException.php000066400000000000000000000013001267577262200251470ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Json; use Exception; /** * @author Jordi Boggiano */ class JsonValidationException extends Exception { protected $errors; public function __construct($message, $errors = array(), Exception $previous = null) { $this->errors = $errors; parent::__construct($message, 0, $previous); } public function getErrors() { return $this->errors; } } composer-1.0.0-beta2/src/Composer/Package/000077500000000000000000000000001267577262200202635ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/Package/AliasPackage.php000066400000000000000000000216071267577262200233070ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package; use Composer\Semver\Constraint\Constraint; use Composer\Package\Version\VersionParser; /** * @author Jordi Boggiano */ class AliasPackage extends BasePackage implements CompletePackageInterface { protected $version; protected $prettyVersion; protected $dev; protected $rootPackageAlias = false; protected $stability; /** @var PackageInterface */ protected $aliasOf; /** @var Link[] */ protected $requires; /** @var Link[] */ protected $devRequires; /** @var Link[] */ protected $conflicts; /** @var Link[] */ protected $provides; /** @var Link[] */ protected $replaces; /** * All descendants' constructors should call this parent constructor * * @param PackageInterface $aliasOf The package this package is an alias of * @param string $version The version the alias must report * @param string $prettyVersion The alias's non-normalized version */ public function __construct(PackageInterface $aliasOf, $version, $prettyVersion) { parent::__construct($aliasOf->getName()); $this->version = $version; $this->prettyVersion = $prettyVersion; $this->aliasOf = $aliasOf; $this->stability = VersionParser::parseStability($version); $this->dev = $this->stability === 'dev'; foreach (array('requires', 'devRequires', 'conflicts', 'provides', 'replaces') as $type) { $links = $aliasOf->{'get' . ucfirst($type)}(); $this->$type = $this->replaceSelfVersionDependencies($links, $type); } } /** * @return PackageInterface */ public function getAliasOf() { return $this->aliasOf; } /** * {@inheritDoc} */ public function getVersion() { return $this->version; } /** * {@inheritDoc} */ public function getStability() { return $this->stability; } /** * {@inheritDoc} */ public function getPrettyVersion() { return $this->prettyVersion; } /** * {@inheritDoc} */ public function isDev() { return $this->dev; } /** * {@inheritDoc} */ public function getRequires() { return $this->requires; } /** * {@inheritDoc} */ public function getConflicts() { return $this->conflicts; } /** * {@inheritDoc} */ public function getProvides() { return $this->provides; } /** * {@inheritDoc} */ public function getReplaces() { return $this->replaces; } /** * {@inheritDoc} */ public function getDevRequires() { return $this->devRequires; } /** * Stores whether this is an alias created by an aliasing in the requirements of the root package or not * * Use by the policy for sorting manually aliased packages first, see #576 * * @param bool $value * * @return mixed */ public function setRootPackageAlias($value) { return $this->rootPackageAlias = $value; } /** * @see setRootPackageAlias * @return bool */ public function isRootPackageAlias() { return $this->rootPackageAlias; } /** * @param Link[] $links * @param string $linkType * * @return Link[] */ protected function replaceSelfVersionDependencies(array $links, $linkType) { if (in_array($linkType, array('conflicts', 'provides', 'replaces'), true)) { $newLinks = array(); foreach ($links as $link) { // link is self.version, but must be replacing also the replaced version if ('self.version' === $link->getPrettyConstraint()) { $newLinks[] = new Link($link->getSource(), $link->getTarget(), new Constraint('=', $this->version), $linkType, $this->prettyVersion); } } $links = array_merge($links, $newLinks); } else { foreach ($links as $index => $link) { if ('self.version' === $link->getPrettyConstraint()) { $links[$index] = new Link($link->getSource(), $link->getTarget(), new Constraint('=', $this->version), $linkType, $this->prettyVersion); } } } return $links; } /*************************************** * Wrappers around the aliased package * ***************************************/ public function getType() { return $this->aliasOf->getType(); } public function getTargetDir() { return $this->aliasOf->getTargetDir(); } public function getExtra() { return $this->aliasOf->getExtra(); } public function setInstallationSource($type) { $this->aliasOf->setInstallationSource($type); } public function getInstallationSource() { return $this->aliasOf->getInstallationSource(); } public function getSourceType() { return $this->aliasOf->getSourceType(); } public function getSourceUrl() { return $this->aliasOf->getSourceUrl(); } public function getSourceUrls() { return $this->aliasOf->getSourceUrls(); } public function getSourceReference() { return $this->aliasOf->getSourceReference(); } public function setSourceReference($reference) { return $this->aliasOf->setSourceReference($reference); } public function setSourceMirrors($mirrors) { return $this->aliasOf->setSourceMirrors($mirrors); } public function getSourceMirrors() { return $this->aliasOf->getSourceMirrors(); } public function getDistType() { return $this->aliasOf->getDistType(); } public function getDistUrl() { return $this->aliasOf->getDistUrl(); } public function getDistUrls() { return $this->aliasOf->getDistUrls(); } public function getDistReference() { return $this->aliasOf->getDistReference(); } public function setDistReference($reference) { return $this->aliasOf->setDistReference($reference); } public function getDistSha1Checksum() { return $this->aliasOf->getDistSha1Checksum(); } public function setTransportOptions(array $options) { return $this->aliasOf->setTransportOptions($options); } public function getTransportOptions() { return $this->aliasOf->getTransportOptions(); } public function setDistMirrors($mirrors) { return $this->aliasOf->setDistMirrors($mirrors); } public function getDistMirrors() { return $this->aliasOf->getDistMirrors(); } public function getScripts() { return $this->aliasOf->getScripts(); } public function getLicense() { return $this->aliasOf->getLicense(); } public function getAutoload() { return $this->aliasOf->getAutoload(); } public function getDevAutoload() { return $this->aliasOf->getDevAutoload(); } public function getIncludePaths() { return $this->aliasOf->getIncludePaths(); } public function getRepositories() { return $this->aliasOf->getRepositories(); } public function getReleaseDate() { return $this->aliasOf->getReleaseDate(); } public function getBinaries() { return $this->aliasOf->getBinaries(); } public function getKeywords() { return $this->aliasOf->getKeywords(); } public function getDescription() { return $this->aliasOf->getDescription(); } public function getHomepage() { return $this->aliasOf->getHomepage(); } public function getSuggests() { return $this->aliasOf->getSuggests(); } public function getAuthors() { return $this->aliasOf->getAuthors(); } public function getSupport() { return $this->aliasOf->getSupport(); } public function getNotificationUrl() { return $this->aliasOf->getNotificationUrl(); } public function getArchiveExcludes() { return $this->aliasOf->getArchiveExcludes(); } public function isAbandoned() { return $this->aliasOf->isAbandoned(); } public function getReplacementPackage() { return $this->aliasOf->getReplacementPackage(); } public function __toString() { return parent::__toString().' (alias of '.$this->aliasOf->getVersion().')'; } } composer-1.0.0-beta2/src/Composer/Package/Archiver/000077500000000000000000000000001267577262200220265ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/Package/Archiver/ArchivableFilesFinder.php000066400000000000000000000045141267577262200267160ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\Archiver; use Composer\Util\Filesystem; use Symfony\Component\Finder\Finder; /** * A Symfony Finder wrapper which locates files that should go into archives * * Handles .gitignore, .gitattributes and .hgignore files as well as composer's * own exclude rules from composer.json * * @author Nils Adermann */ class ArchivableFilesFinder extends \FilterIterator { /** * @var Finder */ protected $finder; /** * Initializes the internal Symfony Finder with appropriate filters * * @param string $sources Path to source files to be archived * @param array $excludes Composer's own exclude rules from composer.json */ public function __construct($sources, array $excludes) { $fs = new Filesystem(); $sources = $fs->normalizePath($sources); $filters = array( new HgExcludeFilter($sources), new GitExcludeFilter($sources), new ComposerExcludeFilter($sources, $excludes), ); $this->finder = new Finder(); $filter = function (\SplFileInfo $file) use ($sources, $filters, $fs) { if ($file->isLink() && strpos($file->getLinkTarget(), $sources) !== 0) { return false; } $relativePath = preg_replace( '#^'.preg_quote($sources, '#').'#', '', $fs->normalizePath($file->getRealPath()) ); $exclude = false; foreach ($filters as $filter) { $exclude = $filter->filter($relativePath, $exclude); } return !$exclude; }; if (method_exists($filter, 'bindTo')) { $filter = $filter->bindTo(null); } $this->finder ->in($sources) ->filter($filter) ->ignoreVCS(true) ->ignoreDotFiles(false); parent::__construct($this->finder->getIterator()); } public function accept() { return !$this->getInnerIterator()->current()->isDir(); } } composer-1.0.0-beta2/src/Composer/Package/Archiver/ArchiveManager.php000066400000000000000000000134141267577262200254160ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\Archiver; use Composer\Downloader\DownloadManager; use Composer\Package\PackageInterface; use Composer\Package\RootPackageInterface; use Composer\Util\Filesystem; use Composer\Json\JsonFile; /** * @author Matthieu Moquet * @author Till Klampaeckel */ class ArchiveManager { protected $downloadManager; protected $archivers = array(); /** * @var bool */ protected $overwriteFiles = true; /** * @param DownloadManager $downloadManager A manager used to download package sources */ public function __construct(DownloadManager $downloadManager) { $this->downloadManager = $downloadManager; } /** * @param ArchiverInterface $archiver */ public function addArchiver(ArchiverInterface $archiver) { $this->archivers[] = $archiver; } /** * Set whether existing archives should be overwritten * * @param bool $overwriteFiles New setting * * @return $this */ public function setOverwriteFiles($overwriteFiles) { $this->overwriteFiles = $overwriteFiles; return $this; } /** * Generate a distinct filename for a particular version of a package. * * @param PackageInterface $package The package to get a name for * * @return string A filename without an extension */ public function getPackageFilename(PackageInterface $package) { $nameParts = array(preg_replace('#[^a-z0-9-_]#i', '-', $package->getName())); if (preg_match('{^[a-f0-9]{40}$}', $package->getDistReference())) { $nameParts = array_merge($nameParts, array($package->getDistReference(), $package->getDistType())); } else { $nameParts = array_merge($nameParts, array($package->getPrettyVersion(), $package->getDistReference())); } if ($package->getSourceReference()) { $nameParts[] = substr(sha1($package->getSourceReference()), 0, 6); } $name = implode('-', array_filter($nameParts, function ($p) { return !empty($p); })); return str_replace('/', '-', $name); } /** * Create an archive of the specified package. * * @param PackageInterface $package The package to archive * @param string $format The format of the archive (zip, tar, ...) * @param string $targetDir The directory where to build the archive * @param string|null $fileName The relative file name to use for the archive, or null to generate * the package name. Note that the format will be appended to this name * @throws \InvalidArgumentException * @throws \RuntimeException * @return string The path of the created archive */ public function archive(PackageInterface $package, $format, $targetDir, $fileName = null) { if (empty($format)) { throw new \InvalidArgumentException('Format must be specified'); } // Search for the most appropriate archiver $usableArchiver = null; foreach ($this->archivers as $archiver) { if ($archiver->supports($format, $package->getSourceType())) { $usableArchiver = $archiver; break; } } // Checks the format/source type are supported before downloading the package if (null === $usableArchiver) { throw new \RuntimeException(sprintf('No archiver found to support %s format', $format)); } $filesystem = new Filesystem(); if (null === $fileName) { $packageName = $this->getPackageFilename($package); } else { $packageName = $fileName; } // Archive filename $filesystem->ensureDirectoryExists($targetDir); $target = realpath($targetDir).'/'.$packageName.'.'.$format; $filesystem->ensureDirectoryExists(dirname($target)); if (!$this->overwriteFiles && file_exists($target)) { return $target; } if ($package instanceof RootPackageInterface) { $sourcePath = realpath('.'); } else { // Directory used to download the sources $sourcePath = sys_get_temp_dir().'/composer_archive'.uniqid(); $filesystem->ensureDirectoryExists($sourcePath); // Download sources $this->downloadManager->download($package, $sourcePath); // Check exclude from downloaded composer.json if (file_exists($composerJsonPath = $sourcePath.'/composer.json')) { $jsonFile = new JsonFile($composerJsonPath); $jsonData = $jsonFile->read(); if (!empty($jsonData['archive']['exclude'])) { $package->setArchiveExcludes($jsonData['archive']['exclude']); } } } // Create the archive $tempTarget = sys_get_temp_dir().'/composer_archive'.uniqid().'.'.$format; $filesystem->ensureDirectoryExists(dirname($tempTarget)); $archivePath = $usableArchiver->archive($sourcePath, $tempTarget, $format, $package->getArchiveExcludes()); rename($archivePath, $target); // cleanup temporary download if (!$package instanceof RootPackageInterface) { $filesystem->removeDirectory($sourcePath); } $filesystem->remove($tempTarget); return $target; } } composer-1.0.0-beta2/src/Composer/Package/Archiver/ArchiverInterface.php000066400000000000000000000023371267577262200261300ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\Archiver; /** * @author Till Klampaeckel * @author Matthieu Moquet * @author Nils Adermann */ interface ArchiverInterface { /** * Create an archive from the sources. * * @param string $sources The sources directory * @param string $target The target file * @param string $format The format used for archive * @param array $excludes A list of patterns for files to exclude * * @return string The path to the written archive file */ public function archive($sources, $target, $format, array $excludes = array()); /** * Format supported by the archiver. * * @param string $format The archive format * @param string $sourceType The source type (git, svn, hg, etc.) * * @return bool true if the format is supported by the archiver */ public function supports($format, $sourceType); } composer-1.0.0-beta2/src/Composer/Package/Archiver/BaseExcludeFilter.php000066400000000000000000000076221267577262200261000ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\Archiver; use Symfony\Component\Finder; /** * @author Nils Adermann */ abstract class BaseExcludeFilter { /** * @var string */ protected $sourcePath; /** * @var array */ protected $excludePatterns; /** * @param string $sourcePath Directory containing sources to be filtered */ public function __construct($sourcePath) { $this->sourcePath = $sourcePath; $this->excludePatterns = array(); } /** * Checks the given path against all exclude patterns in this filter * * Negated patterns overwrite exclude decisions of previous filters. * * @param string $relativePath The file's path relative to the sourcePath * @param bool $exclude Whether a previous filter wants to exclude this file * * @return bool Whether the file should be excluded */ public function filter($relativePath, $exclude) { foreach ($this->excludePatterns as $patternData) { list($pattern, $negate, $stripLeadingSlash) = $patternData; if ($stripLeadingSlash) { $path = substr($relativePath, 1); } else { $path = $relativePath; } if (preg_match($pattern, $path)) { $exclude = !$negate; } } return $exclude; } /** * Processes a file containing exclude rules of different formats per line * * @param array $lines A set of lines to be parsed * @param callback $lineParser The parser to be used on each line * * @return array Exclude patterns to be used in filter() */ protected function parseLines(array $lines, $lineParser) { return array_filter( array_map( function ($line) use ($lineParser) { $line = trim($line); if (!$line || 0 === strpos($line, '#')) { return; } return call_user_func($lineParser, $line); }, $lines ), function ($pattern) { return $pattern !== null; } ); } /** * Generates a set of exclude patterns for filter() from gitignore rules * * @param array $rules A list of exclude rules in gitignore syntax * * @return array Exclude patterns */ protected function generatePatterns($rules) { $patterns = array(); foreach ($rules as $rule) { $patterns[] = $this->generatePattern($rule); } return $patterns; } /** * Generates an exclude pattern for filter() from a gitignore rule * * @param string $rule An exclude rule in gitignore syntax * * @return array An exclude pattern */ protected function generatePattern($rule) { $negate = false; $pattern = '{'; if (strlen($rule) && $rule[0] === '!') { $negate = true; $rule = substr($rule, 1); } if (strlen($rule) && $rule[0] === '/') { $pattern .= '^/'; $rule = substr($rule, 1); } elseif (strlen($rule) - 1 === strpos($rule, '/')) { $pattern .= '/'; $rule = substr($rule, 0, -1); } elseif (false === strpos($rule, '/')) { $pattern .= '/'; } // remove delimiters as well as caret (^) and dollar sign ($) from the regex $pattern .= substr(Finder\Glob::toRegex($rule), 2, -2) . '(?=$|/)'; return array($pattern . '}', $negate, false); } } composer-1.0.0-beta2/src/Composer/Package/Archiver/ComposerExcludeFilter.php000066400000000000000000000015321267577262200270070ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\Archiver; /** * An exclude filter which processes composer's own exclude rules * * @author Nils Adermann */ class ComposerExcludeFilter extends BaseExcludeFilter { /** * @param string $sourcePath Directory containing sources to be filtered * @param array $excludeRules An array of exclude rules from composer.json */ public function __construct($sourcePath, array $excludeRules) { parent::__construct($sourcePath); $this->excludePatterns = $this->generatePatterns($excludeRules); } } composer-1.0.0-beta2/src/Composer/Package/Archiver/GitExcludeFilter.php000066400000000000000000000040751267577262200257500ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\Archiver; /** * An exclude filter that processes gitignore and gitattributes * * It respects export-ignore git attributes * * @author Nils Adermann */ class GitExcludeFilter extends BaseExcludeFilter { /** * Parses .gitignore and .gitattributes files if they exist * * @param string $sourcePath */ public function __construct($sourcePath) { parent::__construct($sourcePath); if (file_exists($sourcePath.'/.gitignore')) { $this->excludePatterns = $this->parseLines( file($sourcePath.'/.gitignore'), array($this, 'parseGitIgnoreLine') ); } if (file_exists($sourcePath.'/.gitattributes')) { $this->excludePatterns = array_merge( $this->excludePatterns, $this->parseLines( file($sourcePath.'/.gitattributes'), array($this, 'parseGitAttributesLine') )); } } /** * Callback line parser which process gitignore lines * * @param string $line A line from .gitignore * * @return array An exclude pattern for filter() */ public function parseGitIgnoreLine($line) { return $this->generatePattern($line); } /** * Callback parser which finds export-ignore rules in git attribute lines * * @param string $line A line from .gitattributes * * @return array An exclude pattern for filter() */ public function parseGitAttributesLine($line) { $parts = preg_split('#\s+#', $line); if (count($parts) != 2) { return null; } if ($parts[1] === 'export-ignore') { return $this->generatePattern($parts[0]); } } } composer-1.0.0-beta2/src/Composer/Package/Archiver/HgExcludeFilter.php000066400000000000000000000054011267577262200255550ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\Archiver; use Symfony\Component\Finder; /** * An exclude filter that processes hgignore files * * @author Nils Adermann */ class HgExcludeFilter extends BaseExcludeFilter { const HG_IGNORE_REGEX = 1; const HG_IGNORE_GLOB = 2; /** * Either HG_IGNORE_REGEX or HG_IGNORE_GLOB * @var int */ protected $patternMode; /** * Parses .hgignore file if it exist * * @param string $sourcePath */ public function __construct($sourcePath) { parent::__construct($sourcePath); $this->patternMode = self::HG_IGNORE_REGEX; if (file_exists($sourcePath.'/.hgignore')) { $this->excludePatterns = $this->parseLines( file($sourcePath.'/.hgignore'), array($this, 'parseHgIgnoreLine') ); } } /** * Callback line parser which process hgignore lines * * @param string $line A line from .hgignore * * @return array An exclude pattern for filter() */ public function parseHgIgnoreLine($line) { if (preg_match('#^syntax\s*:\s*(glob|regexp)$#', $line, $matches)) { if ($matches[1] === 'glob') { $this->patternMode = self::HG_IGNORE_GLOB; } else { $this->patternMode = self::HG_IGNORE_REGEX; } return null; } if ($this->patternMode == self::HG_IGNORE_GLOB) { return $this->patternFromGlob($line); } else { return $this->patternFromRegex($line); } } /** * Generates an exclude pattern for filter() from a hg glob expression * * @param string $line A line from .hgignore in glob mode * * @return array An exclude pattern for filter() */ protected function patternFromGlob($line) { $pattern = '#'.substr(Finder\Glob::toRegex($line), 2, -1).'#'; $pattern = str_replace('[^/]*', '.*', $pattern); return array($pattern, false, true); } /** * Generates an exclude pattern for filter() from a hg regexp expression * * @param string $line A line from .hgignore in regexp mode * * @return array An exclude pattern for filter() */ public function patternFromRegex($line) { // WTF need to escape the delimiter safely $pattern = '#'.preg_replace('/((?:\\\\\\\\)*)(\\\\?)#/', '\1\2\2\\#', $line).'#'; return array($pattern, false, true); } } composer-1.0.0-beta2/src/Composer/Package/Archiver/PharArchiver.php000066400000000000000000000052411267577262200251170ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\Archiver; /** * @author Till Klampaeckel * @author Nils Adermann * @author Matthieu Moquet */ class PharArchiver implements ArchiverInterface { protected static $formats = array( 'zip' => \Phar::ZIP, 'tar' => \Phar::TAR, 'tar.gz' => \Phar::TAR, 'tar.bz2' => \Phar::TAR, ); protected static $compressFormats = array( 'tar.gz' => \Phar::GZ, 'tar.bz2' => \Phar::BZ2, ); /** * {@inheritdoc} */ public function archive($sources, $target, $format, array $excludes = array()) { $sources = realpath($sources); // Phar would otherwise load the file which we don't want if (file_exists($target)) { unlink($target); } try { $filename = substr($target, 0, strrpos($target, $format) - 1); // Check if compress format if (isset(static::$compressFormats[$format])) { // Current compress format supported base on tar $target = $filename . '.tar'; } $phar = new \PharData($target, null, null, static::$formats[$format]); $files = new ArchivableFilesFinder($sources, $excludes); $phar->buildFromIterator($files, $sources); if (isset(static::$compressFormats[$format])) { // Check can be compressed? if (!$phar->canCompress(static::$compressFormats[$format])) { throw new \RuntimeException(sprintf('Can not compress to %s format', $format)); } // Delete old tar unlink($target); // Compress the new tar $phar->compress(static::$compressFormats[$format]); // Make the correct filename $target = $filename . '.' . $format; } return $target; } catch (\UnexpectedValueException $e) { $message = sprintf("Could not create archive '%s' from '%s': %s", $target, $sources, $e->getMessage() ); throw new \RuntimeException($message, $e->getCode(), $e); } } /** * {@inheritdoc} */ public function supports($format, $sourceType) { return isset(static::$formats[$format]); } } composer-1.0.0-beta2/src/Composer/Package/Archiver/ZipArchiver.php000066400000000000000000000033011267577262200247620ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\Archiver; use ZipArchive; /** * @author Jan Prieser */ class ZipArchiver implements ArchiverInterface { protected static $formats = array( 'zip' => 1, ); /** * {@inheritdoc} */ public function archive($sources, $target, $format, array $excludes = array()) { $sources = realpath($sources); $zip = new ZipArchive(); $res = $zip->open($target, ZipArchive::CREATE); if ($res === true) { $files = new ArchivableFilesFinder($sources, $excludes); foreach ($files as $file) { /** @var $file \SplFileInfo */ $filepath = $file->getPath()."/".$file->getFilename(); $localname = str_replace($sources."/", '', $filepath); $zip->addFile($filepath, $localname); } if ($zip->close()) { return $target; } } $message = sprintf("Could not create archive '%s' from '%s': %s", $target, $sources, $zip->getStatusString() ); throw new \RuntimeException($message); } /** * {@inheritdoc} */ public function supports($format, $sourceType) { return isset(static::$formats[$format]) && $this->compressionAvailable(); } private function compressionAvailable() { return class_exists('ZipArchive'); } } composer-1.0.0-beta2/src/Composer/Package/BasePackage.php000066400000000000000000000127501267577262200231270ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package; use Composer\Repository\RepositoryInterface; use Composer\Repository\PlatformRepository; /** * Base class for packages providing name storage and default match implementation * * @author Nils Adermann */ abstract class BasePackage implements PackageInterface { public static $supportedLinkTypes = array( 'require' => array('description' => 'requires', 'method' => 'requires'), 'conflict' => array('description' => 'conflicts', 'method' => 'conflicts'), 'provide' => array('description' => 'provides', 'method' => 'provides'), 'replace' => array('description' => 'replaces', 'method' => 'replaces'), 'require-dev' => array('description' => 'requires (for development)', 'method' => 'devRequires'), ); const STABILITY_STABLE = 0; const STABILITY_RC = 5; const STABILITY_BETA = 10; const STABILITY_ALPHA = 15; const STABILITY_DEV = 20; public static $stabilities = array( 'stable' => self::STABILITY_STABLE, 'RC' => self::STABILITY_RC, 'beta' => self::STABILITY_BETA, 'alpha' => self::STABILITY_ALPHA, 'dev' => self::STABILITY_DEV, ); /** * READ-ONLY: The package id, public for fast access in dependency solver * @var int */ public $id; protected $name; protected $prettyName; protected $repository; protected $transportOptions; /** * All descendants' constructors should call this parent constructor * * @param string $name The package's name */ public function __construct($name) { $this->prettyName = $name; $this->name = strtolower($name); $this->id = -1; $this->transportOptions = array(); } /** * {@inheritDoc} */ public function getName() { return $this->name; } /** * {@inheritDoc} */ public function getPrettyName() { return $this->prettyName; } /** * {@inheritDoc} */ public function getNames() { $names = array( $this->getName() => true, ); foreach ($this->getProvides() as $link) { $names[$link->getTarget()] = true; } foreach ($this->getReplaces() as $link) { $names[$link->getTarget()] = true; } return array_keys($names); } /** * {@inheritDoc} */ public function setId($id) { $this->id = $id; } /** * {@inheritDoc} */ public function getId() { return $this->id; } /** * {@inheritDoc} */ public function setRepository(RepositoryInterface $repository) { if ($this->repository && $repository !== $this->repository) { throw new \LogicException('A package can only be added to one repository'); } $this->repository = $repository; } /** * {@inheritDoc} */ public function getRepository() { return $this->repository; } /** * {@inheritDoc} */ public function getTransportOptions() { return $this->transportOptions; } /** * Configures the list of options to download package dist files * * @param array $options */ public function setTransportOptions(array $options) { $this->transportOptions = $options; } /** * checks if this package is a platform package * * @return bool */ public function isPlatform() { return $this->getRepository() instanceof PlatformRepository; } /** * Returns package unique name, constructed from name, version and release type. * * @return string */ public function getUniqueName() { return $this->getName().'-'.$this->getVersion(); } public function equals(PackageInterface $package) { $self = $this; if ($this instanceof AliasPackage) { $self = $this->getAliasOf(); } if ($package instanceof AliasPackage) { $package = $package->getAliasOf(); } return $package === $self; } /** * Converts the package into a readable and unique string * * @return string */ public function __toString() { return $this->getUniqueName(); } public function getPrettyString() { return $this->getPrettyName().' '.$this->getPrettyVersion(); } /** * {@inheritDoc} */ public function getFullPrettyVersion($truncate = true) { if (!$this->isDev() || !in_array($this->getSourceType(), array('hg', 'git'))) { return $this->getPrettyVersion(); } // if source reference is a sha1 hash -- truncate if ($truncate && strlen($this->getSourceReference()) === 40) { return $this->getPrettyVersion() . ' ' . substr($this->getSourceReference(), 0, 7); } return $this->getPrettyVersion() . ' ' . $this->getSourceReference(); } public function getStabilityPriority() { return self::$stabilities[$this->getStability()]; } public function __clone() { $this->repository = null; $this->id = -1; } } composer-1.0.0-beta2/src/Composer/Package/CompletePackage.php000066400000000000000000000070751267577262200240310ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package; /** * Package containing additional metadata that is not used by the solver * * @author Nils Adermann */ class CompletePackage extends Package implements CompletePackageInterface { protected $repositories; protected $license = array(); protected $keywords; protected $authors; protected $description; protected $homepage; protected $scripts = array(); protected $support = array(); protected $abandoned = false; /** * @param array $scripts */ public function setScripts(array $scripts) { $this->scripts = $scripts; } /** * {@inheritDoc} */ public function getScripts() { return $this->scripts; } /** * Set the repositories * * @param array $repositories */ public function setRepositories($repositories) { $this->repositories = $repositories; } /** * {@inheritDoc} */ public function getRepositories() { return $this->repositories; } /** * Set the license * * @param array $license */ public function setLicense(array $license) { $this->license = $license; } /** * {@inheritDoc} */ public function getLicense() { return $this->license; } /** * Set the keywords * * @param array $keywords */ public function setKeywords(array $keywords) { $this->keywords = $keywords; } /** * {@inheritDoc} */ public function getKeywords() { return $this->keywords; } /** * Set the authors * * @param array $authors */ public function setAuthors(array $authors) { $this->authors = $authors; } /** * {@inheritDoc} */ public function getAuthors() { return $this->authors; } /** * Set the description * * @param string $description */ public function setDescription($description) { $this->description = $description; } /** * {@inheritDoc} */ public function getDescription() { return $this->description; } /** * Set the homepage * * @param string $homepage */ public function setHomepage($homepage) { $this->homepage = $homepage; } /** * {@inheritDoc} */ public function getHomepage() { return $this->homepage; } /** * Set the support information * * @param array $support */ public function setSupport(array $support) { $this->support = $support; } /** * {@inheritDoc} */ public function getSupport() { return $this->support; } /** * @return bool */ public function isAbandoned() { return (boolean) $this->abandoned; } /** * @param bool|string $abandoned */ public function setAbandoned($abandoned) { $this->abandoned = $abandoned; } /** * If the package is abandoned and has a suggested replacement, this method returns it * * @return string|null */ public function getReplacementPackage() { return is_string($this->abandoned) ? $this->abandoned : null; } } composer-1.0.0-beta2/src/Composer/Package/CompletePackageInterface.php000066400000000000000000000037431267577262200256500ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package; /** * Defines package metadata that is not necessarily needed for solving and installing packages * * @author Nils Adermann */ interface CompletePackageInterface extends PackageInterface { /** * Returns the scripts of this package * * @return array array('script name' => array('listeners')) */ public function getScripts(); /** * Returns an array of repositories * * {"": {}} * * @return array Repositories */ public function getRepositories(); /** * Returns the package license, e.g. MIT, BSD, GPL * * @return array The package licenses */ public function getLicense(); /** * Returns an array of keywords relating to the package * * @return array */ public function getKeywords(); /** * Returns the package description * * @return string */ public function getDescription(); /** * Returns the package homepage * * @return string */ public function getHomepage(); /** * Returns an array of authors of the package * * Each item can contain name/homepage/email keys * * @return array */ public function getAuthors(); /** * Returns the support information * * @return array */ public function getSupport(); /** * Returns if the package is abandoned or not * * @return bool */ public function isAbandoned(); /** * If the package is abandoned and has a suggested replacement, this method returns it * * @return string */ public function getReplacementPackage(); } composer-1.0.0-beta2/src/Composer/Package/Dumper/000077500000000000000000000000001267577262200215175ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/Package/Dumper/ArrayDumper.php000066400000000000000000000106321267577262200244650ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\Dumper; use Composer\Package\BasePackage; use Composer\Package\PackageInterface; use Composer\Package\CompletePackageInterface; use Composer\Package\RootPackageInterface; /** * @author Konstantin Kudryashiv * @author Jordi Boggiano */ class ArrayDumper { public function dump(PackageInterface $package) { $keys = array( 'binaries' => 'bin', 'type', 'extra', 'installationSource' => 'installation-source', 'autoload', 'devAutoload' => 'autoload-dev', 'notificationUrl' => 'notification-url', 'includePaths' => 'include-path', ); $data = array(); $data['name'] = $package->getPrettyName(); $data['version'] = $package->getPrettyVersion(); $data['version_normalized'] = $package->getVersion(); if ($package->getTargetDir()) { $data['target-dir'] = $package->getTargetDir(); } if ($package->getSourceType()) { $data['source']['type'] = $package->getSourceType(); $data['source']['url'] = $package->getSourceUrl(); $data['source']['reference'] = $package->getSourceReference(); if ($mirrors = $package->getSourceMirrors()) { $data['source']['mirrors'] = $mirrors; } } if ($package->getDistType()) { $data['dist']['type'] = $package->getDistType(); $data['dist']['url'] = $package->getDistUrl(); $data['dist']['reference'] = $package->getDistReference(); $data['dist']['shasum'] = $package->getDistSha1Checksum(); if ($mirrors = $package->getDistMirrors()) { $data['dist']['mirrors'] = $mirrors; } } if ($package->getArchiveExcludes()) { $data['archive']['exclude'] = $package->getArchiveExcludes(); } foreach (BasePackage::$supportedLinkTypes as $type => $opts) { if ($links = $package->{'get'.ucfirst($opts['method'])}()) { foreach ($links as $link) { $data[$type][$link->getTarget()] = $link->getPrettyConstraint(); } ksort($data[$type]); } } if ($packages = $package->getSuggests()) { ksort($packages); $data['suggest'] = $packages; } if ($package->getReleaseDate()) { $data['time'] = $package->getReleaseDate()->format('Y-m-d H:i:s'); } $data = $this->dumpValues($package, $keys, $data); if ($package instanceof CompletePackageInterface) { $keys = array( 'scripts', 'license', 'authors', 'description', 'homepage', 'keywords', 'repositories', 'support', ); $data = $this->dumpValues($package, $keys, $data); if (isset($data['keywords']) && is_array($data['keywords'])) { sort($data['keywords']); } if ($package->isAbandoned()) { $data['abandoned'] = $package->getReplacementPackage() ?: true; } } if ($package instanceof RootPackageInterface) { $minimumStability = $package->getMinimumStability(); if ($minimumStability) { $data['minimum-stability'] = $minimumStability; } } if (count($package->getTransportOptions()) > 0) { $data['transport-options'] = $package->getTransportOptions(); } return $data; } private function dumpValues(PackageInterface $package, array $keys, array $data) { foreach ($keys as $method => $key) { if (is_numeric($method)) { $method = $key; } $getter = 'get'.ucfirst($method); $value = $package->$getter(); if (null !== $value && !(is_array($value) && 0 === count($value))) { $data[$key] = $value; } } return $data; } } composer-1.0.0-beta2/src/Composer/Package/Link.php000066400000000000000000000057051267577262200217000ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package; use Composer\Semver\Constraint\ConstraintInterface; /** * Represents a link between two packages, represented by their names * * @author Nils Adermann */ class Link { /** * @var string */ protected $source; /** * @var string */ protected $target; /** * @var ConstraintInterface|null */ protected $constraint; /** * @var string */ protected $description; /** * @var string|null */ protected $prettyConstraint; /** * Creates a new package link. * * @param string $source * @param string $target * @param ConstraintInterface|null $constraint Constraint applying to the target of this link * @param string $description Used to create a descriptive string representation * @param string|null $prettyConstraint */ public function __construct($source, $target, ConstraintInterface $constraint = null, $description = 'relates to', $prettyConstraint = null) { $this->source = strtolower($source); $this->target = strtolower($target); $this->constraint = $constraint; $this->description = $description; $this->prettyConstraint = $prettyConstraint; } /** * @return string */ public function getDescription() { return $this->description; } /** * @return string */ public function getSource() { return $this->source; } /** * @return string */ public function getTarget() { return $this->target; } /** * @return ConstraintInterface|null */ public function getConstraint() { return $this->constraint; } /** * @throws \UnexpectedValueException If no pretty constraint was provided * @return string */ public function getPrettyConstraint() { if (null === $this->prettyConstraint) { throw new \UnexpectedValueException(sprintf('Link %s has been misconfigured and had no prettyConstraint given.', $this)); } return $this->prettyConstraint; } /** * @return string */ public function __toString() { return $this->source.' '.$this->description.' '.$this->target.' ('.$this->constraint.')'; } /** * @param PackageInterface $sourcePackage * @return string */ public function getPrettyString(PackageInterface $sourcePackage) { return $sourcePackage->getPrettyString().' '.$this->description.' '.$this->target.' '.$this->constraint->getPrettyString().''; } } composer-1.0.0-beta2/src/Composer/Package/LinkConstraint/000077500000000000000000000000001267577262200232255ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/Package/LinkConstraint/EmptyConstraint.php000066400000000000000000000013111267577262200270750ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\LinkConstraint; use Composer\Semver\Constraint\EmptyConstraint as SemverEmptyConstraint; trigger_error('The ' . __NAMESPACE__ . '\EmptyConstraint class is deprecated, use Composer\Semver\Constraint\EmptyConstraint instead.', E_USER_DEPRECATED); /** * @deprecated use Composer\Semver\Constraint\EmptyConstraint instead */ class EmptyConstraint extends SemverEmptyConstraint implements LinkConstraintInterface { } composer-1.0.0-beta2/src/Composer/Package/LinkConstraint/LinkConstraintInterface.php000066400000000000000000000012571267577262200305260ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\LinkConstraint; use Composer\Semver\Constraint\ConstraintInterface; trigger_error('The ' . __NAMESPACE__ . '\LinkConstraintInterface interface is deprecated, use Composer\Semver\Constraint\ConstraintInterface instead.', E_USER_DEPRECATED); /** * @deprecated use Composer\Semver\Constraint\ConstraintInterface instead */ interface LinkConstraintInterface extends ConstraintInterface { } composer-1.0.0-beta2/src/Composer/Package/LinkConstraint/MultiConstraint.php000066400000000000000000000013111267577262200270710ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\LinkConstraint; use Composer\Semver\Constraint\MultiConstraint as SemverMultiConstraint; trigger_error('The ' . __NAMESPACE__ . '\MultiConstraint class is deprecated, use Composer\Semver\Constraint\MultiConstraint instead.', E_USER_DEPRECATED); /** * @deprecated use Composer\Semver\Constraint\MultiConstraint instead */ class MultiConstraint extends SemverMultiConstraint implements LinkConstraintInterface { } composer-1.0.0-beta2/src/Composer/Package/LinkConstraint/SpecificConstraint.php000066400000000000000000000012631267577262200275320ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\LinkConstraint; use Composer\Semver\Constraint\AbstractConstraint; trigger_error('The ' . __NAMESPACE__ . '\SpecificConstraint abstract class is deprecated, there is no replacement for it.', E_USER_DEPRECATED); /** * @deprecated use Composer\Semver\Constraint\AbstractConstraint instead */ abstract class SpecificConstraint extends AbstractConstraint implements LinkConstraintInterface { } composer-1.0.0-beta2/src/Composer/Package/LinkConstraint/VersionConstraint.php000066400000000000000000000012321267577262200274260ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\LinkConstraint; use Composer\Semver\Constraint\Constraint; trigger_error('The ' . __NAMESPACE__ . '\VersionConstraint class is deprecated, use Composer\Semver\Constraint\Constraint instead.', E_USER_DEPRECATED); /** * @deprecated use Composer\Semver\Constraint\Constraint instead */ class VersionConstraint extends Constraint implements LinkConstraintInterface { } composer-1.0.0-beta2/src/Composer/Package/Loader/000077500000000000000000000000001267577262200214715ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/Package/Loader/ArrayLoader.php000066400000000000000000000255441267577262200244210ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\Loader; use Composer\Package; use Composer\Package\AliasPackage; use Composer\Package\Link; use Composer\Package\RootAliasPackage; use Composer\Package\RootPackageInterface; use Composer\Package\Version\VersionParser; use Composer\Semver\VersionParser as SemverVersionParser; /** * @author Konstantin Kudryashiv * @author Jordi Boggiano */ class ArrayLoader implements LoaderInterface { protected $versionParser; protected $loadOptions; public function __construct(SemverVersionParser $parser = null, $loadOptions = false) { if (!$parser) { $parser = new VersionParser; } $this->versionParser = $parser; $this->loadOptions = $loadOptions; } public function load(array $config, $class = 'Composer\Package\CompletePackage') { if (!isset($config['name'])) { throw new \UnexpectedValueException('Unknown package has no name defined ('.json_encode($config).').'); } if (!isset($config['version'])) { throw new \UnexpectedValueException('Package '.$config['name'].' has no version defined.'); } // handle already normalized versions if (isset($config['version_normalized'])) { $version = $config['version_normalized']; } else { $version = $this->versionParser->normalize($config['version']); } $package = new $class($config['name'], $version, $config['version']); $package->setType(isset($config['type']) ? strtolower($config['type']) : 'library'); if (isset($config['target-dir'])) { $package->setTargetDir($config['target-dir']); } if (isset($config['extra']) && is_array($config['extra'])) { $package->setExtra($config['extra']); } if (isset($config['bin'])) { if (!is_array($config['bin'])) { throw new \UnexpectedValueException('Package '.$config['name'].'\'s bin key should be an array, '.gettype($config['bin']).' given.'); } foreach ($config['bin'] as $key => $bin) { $config['bin'][$key] = ltrim($bin, '/'); } $package->setBinaries($config['bin']); } if (isset($config['installation-source'])) { $package->setInstallationSource($config['installation-source']); } if (isset($config['source'])) { if (!isset($config['source']['type']) || !isset($config['source']['url']) || !isset($config['source']['reference'])) { throw new \UnexpectedValueException(sprintf( "Package %s's source key should be specified as {\"type\": ..., \"url\": ..., \"reference\": ...},\n%s given.", $config['name'], json_encode($config['source']) )); } $package->setSourceType($config['source']['type']); $package->setSourceUrl($config['source']['url']); $package->setSourceReference($config['source']['reference']); if (isset($config['source']['mirrors'])) { $package->setSourceMirrors($config['source']['mirrors']); } } if (isset($config['dist'])) { if (!isset($config['dist']['type']) || !isset($config['dist']['url'])) { throw new \UnexpectedValueException(sprintf( "Package %s's dist key should be specified as ". "{\"type\": ..., \"url\": ..., \"reference\": ..., \"shasum\": ...},\n%s given.", $config['name'], json_encode($config['dist']) )); } $package->setDistType($config['dist']['type']); $package->setDistUrl($config['dist']['url']); $package->setDistReference(isset($config['dist']['reference']) ? $config['dist']['reference'] : null); $package->setDistSha1Checksum(isset($config['dist']['shasum']) ? $config['dist']['shasum'] : null); if (isset($config['dist']['mirrors'])) { $package->setDistMirrors($config['dist']['mirrors']); } } foreach (Package\BasePackage::$supportedLinkTypes as $type => $opts) { if (isset($config[$type])) { $method = 'set'.ucfirst($opts['method']); $package->{$method}( $this->parseLinks( $package->getName(), $package->getPrettyVersion(), $opts['description'], $config[$type] ) ); } } if (isset($config['suggest']) && is_array($config['suggest'])) { foreach ($config['suggest'] as $target => $reason) { if ('self.version' === trim($reason)) { $config['suggest'][$target] = $package->getPrettyVersion(); } } $package->setSuggests($config['suggest']); } if (isset($config['autoload'])) { $package->setAutoload($config['autoload']); } if (isset($config['autoload-dev'])) { $package->setDevAutoload($config['autoload-dev']); } if (isset($config['include-path'])) { $package->setIncludePaths($config['include-path']); } if (!empty($config['time'])) { $time = preg_match('/^\d++$/D', $config['time']) ? '@'.$config['time'] : $config['time']; try { $date = new \DateTime($time, new \DateTimeZone('UTC')); $package->setReleaseDate($date); } catch (\Exception $e) { } } if (!empty($config['notification-url'])) { $package->setNotificationUrl($config['notification-url']); } if (!empty($config['archive']['exclude'])) { $package->setArchiveExcludes($config['archive']['exclude']); } if ($package instanceof Package\CompletePackageInterface) { if (isset($config['scripts']) && is_array($config['scripts'])) { foreach ($config['scripts'] as $event => $listeners) { $config['scripts'][$event] = (array) $listeners; } $package->setScripts($config['scripts']); } if (!empty($config['description']) && is_string($config['description'])) { $package->setDescription($config['description']); } if (!empty($config['homepage']) && is_string($config['homepage'])) { $package->setHomepage($config['homepage']); } if (!empty($config['keywords']) && is_array($config['keywords'])) { $package->setKeywords($config['keywords']); } if (!empty($config['license'])) { $package->setLicense(is_array($config['license']) ? $config['license'] : array($config['license'])); } if (!empty($config['authors']) && is_array($config['authors'])) { $package->setAuthors($config['authors']); } if (isset($config['support'])) { $package->setSupport($config['support']); } if (isset($config['abandoned'])) { $package->setAbandoned($config['abandoned']); } } if ($aliasNormalized = $this->getBranchAlias($config)) { if ($package instanceof RootPackageInterface) { $package = new RootAliasPackage($package, $aliasNormalized, preg_replace('{(\.9{7})+}', '.x', $aliasNormalized)); } else { $package = new AliasPackage($package, $aliasNormalized, preg_replace('{(\.9{7})+}', '.x', $aliasNormalized)); } } if ($this->loadOptions && isset($config['transport-options'])) { $package->setTransportOptions($config['transport-options']); } return $package; } /** * @param string $source source package name * @param string $sourceVersion source package version (pretty version ideally) * @param string $description link description (e.g. requires, replaces, ..) * @param array $links array of package name => constraint mappings * @return Link[] */ public function parseLinks($source, $sourceVersion, $description, $links) { $res = array(); foreach ($links as $target => $constraint) { if ('self.version' === $constraint) { $parsedConstraint = $this->versionParser->parseConstraints($sourceVersion); } else { $parsedConstraint = $this->versionParser->parseConstraints($constraint); } $res[strtolower($target)] = new Link($source, $target, $parsedConstraint, $description, $constraint); } return $res; } /** * Retrieves a branch alias (dev-master => 1.0.x-dev for example) if it exists * * @param array $config the entire package config * @return string|null normalized version of the branch alias or null if there is none */ public function getBranchAlias(array $config) { if (('dev-' !== substr($config['version'], 0, 4) && '-dev' !== substr($config['version'], -4)) || !isset($config['extra']['branch-alias']) || !is_array($config['extra']['branch-alias']) ) { return; } foreach ($config['extra']['branch-alias'] as $sourceBranch => $targetBranch) { // ensure it is an alias to a -dev package if ('-dev' !== substr($targetBranch, -4)) { continue; } // normalize without -dev and ensure it's a numeric branch that is parseable $validatedTargetBranch = $this->versionParser->normalizeBranch(substr($targetBranch, 0, -4)); if ('-dev' !== substr($validatedTargetBranch, -4)) { continue; } // ensure that it is the current branch aliasing itself if (strtolower($config['version']) !== strtolower($sourceBranch)) { continue; } // If using numeric aliases ensure the alias is a valid subversion if (($sourcePrefix = $this->versionParser->parseNumericAliasPrefix($sourceBranch)) && ($targetPrefix = $this->versionParser->parseNumericAliasPrefix($targetBranch)) && (stripos($targetPrefix, $sourcePrefix) !== 0) ) { continue; } return $validatedTargetBranch; } } } composer-1.0.0-beta2/src/Composer/Package/Loader/InvalidPackageException.php000066400000000000000000000017511267577262200267270ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\Loader; /** * @author Jordi Boggiano */ class InvalidPackageException extends \Exception { private $errors; private $warnings; private $data; public function __construct(array $errors, array $warnings, array $data) { $this->errors = $errors; $this->warnings = $warnings; $this->data = $data; parent::__construct("Invalid package information: \n".implode("\n", array_merge($errors, $warnings))); } public function getData() { return $this->data; } public function getErrors() { return $this->errors; } public function getWarnings() { return $this->warnings; } } composer-1.0.0-beta2/src/Composer/Package/Loader/JsonLoader.php000066400000000000000000000021341267577262200242420ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\Loader; use Composer\Json\JsonFile; /** * @author Konstantin Kudryashiv */ class JsonLoader { private $loader; public function __construct(LoaderInterface $loader) { $this->loader = $loader; } /** * @param string|JsonFile $json A filename, json string or JsonFile instance to load the package from * @return \Composer\Package\PackageInterface */ public function load($json) { if ($json instanceof JsonFile) { $config = $json->read(); } elseif (file_exists($json)) { $config = JsonFile::parseJson(file_get_contents($json), $json); } elseif (is_string($json)) { $config = JsonFile::parseJson($json); } return $this->loader->load($config); } } composer-1.0.0-beta2/src/Composer/Package/Loader/LoaderInterface.php000066400000000000000000000015021267577262200252270ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\Loader; /** * Defines a loader that takes an array to create package instances * * @author Jordi Boggiano */ interface LoaderInterface { /** * Converts a package from an array to a real instance * * @param array $package Package config * @param string $class Package class to use * @return \Composer\Package\PackageInterface */ public function load(array $package, $class = 'Composer\Package\CompletePackage'); } composer-1.0.0-beta2/src/Composer/Package/Loader/RootPackageLoader.php000066400000000000000000000210061267577262200255270ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\Loader; use Composer\Package\BasePackage; use Composer\Package\PackageInterface; use Composer\Package\AliasPackage; use Composer\Config; use Composer\Repository\RepositoryFactory; use Composer\Package\Version\VersionGuesser; use Composer\Package\Version\VersionParser; use Composer\Repository\RepositoryManager; use Composer\Util\ProcessExecutor; /** * ArrayLoader built for the sole purpose of loading the root package * * Sets additional defaults and loads repositories * * @author Jordi Boggiano */ class RootPackageLoader extends ArrayLoader { /** * @var RepositoryManager */ private $manager; /** * @var Config */ private $config; /** * @var VersionGuesser */ private $versionGuesser; public function __construct(RepositoryManager $manager, Config $config, VersionParser $parser = null, VersionGuesser $versionGuesser = null) { parent::__construct($parser); $this->manager = $manager; $this->config = $config; $this->versionGuesser = $versionGuesser ?: new VersionGuesser($config, new ProcessExecutor(), $this->versionParser); } /** * @param array $config package data * @param string $class FQCN to be instantiated * @param string $cwd cwd of the root package to be used to guess the version if it is not provided * @return PackageInterface */ public function load(array $config, $class = 'Composer\Package\RootPackage', $cwd = null) { if (!isset($config['name'])) { $config['name'] = '__root__'; } $autoVersioned = false; if (!isset($config['version'])) { // override with env var if available if (getenv('COMPOSER_ROOT_VERSION')) { $version = getenv('COMPOSER_ROOT_VERSION'); $commit = null; } else { $versionData = $this->versionGuesser->guessVersion($config, $cwd ?: getcwd()); $version = $versionData['version']; $commit = $versionData['commit']; } if (!$version) { $version = '1.0.0'; $autoVersioned = true; } $config['version'] = $version; if ($commit) { $config['source'] = array( 'type' => '', 'url' => '', 'reference' => $commit, ); $config['dist'] = array( 'type' => '', 'url' => '', 'reference' => $commit, ); } } $realPackage = $package = parent::load($config, $class); if ($realPackage instanceof AliasPackage) { $realPackage = $package->getAliasOf(); } if ($autoVersioned) { $realPackage->replaceVersion($realPackage->getVersion(), 'No version set (parsed as 1.0.0)'); } if (isset($config['minimum-stability'])) { $realPackage->setMinimumStability(VersionParser::normalizeStability($config['minimum-stability'])); } $aliases = array(); $stabilityFlags = array(); $references = array(); foreach (array('require', 'require-dev') as $linkType) { if (isset($config[$linkType])) { $linkInfo = BasePackage::$supportedLinkTypes[$linkType]; $method = 'get'.ucfirst($linkInfo['method']); $links = array(); foreach ($realPackage->$method() as $link) { $links[$link->getTarget()] = $link->getConstraint()->getPrettyString(); } $aliases = $this->extractAliases($links, $aliases); $stabilityFlags = $this->extractStabilityFlags($links, $stabilityFlags, $realPackage->getMinimumStability()); $references = $this->extractReferences($links, $references); } } if (isset($links[$config['name']])) { throw new \InvalidArgumentException(sprintf('Root package \'%s\' cannot require itself in its composer.json' . PHP_EOL . 'Did you accidentally name your root package after an external package?', $config['name'])); } $realPackage->setAliases($aliases); $realPackage->setStabilityFlags($stabilityFlags); $realPackage->setReferences($references); if (isset($config['prefer-stable'])) { $realPackage->setPreferStable((bool) $config['prefer-stable']); } $repos = RepositoryFactory::defaultRepos(null, $this->config, $this->manager); foreach ($repos as $repo) { $this->manager->addRepository($repo); } $realPackage->setRepositories($this->config->getRepositories()); return $package; } private function extractAliases(array $requires, array $aliases) { foreach ($requires as $reqName => $reqVersion) { if (preg_match('{^([^,\s#]+)(?:#[^ ]+)? +as +([^,\s]+)$}', $reqVersion, $match)) { $aliases[] = array( 'package' => strtolower($reqName), 'version' => $this->versionParser->normalize($match[1], $reqVersion), 'alias' => $match[2], 'alias_normalized' => $this->versionParser->normalize($match[2], $reqVersion), ); } } return $aliases; } private function extractStabilityFlags(array $requires, array $stabilityFlags, $minimumStability) { $stabilities = BasePackage::$stabilities; $minimumStability = $stabilities[$minimumStability]; foreach ($requires as $reqName => $reqVersion) { $constraints = array(); // extract all sub-constraints in case it is an OR/AND multi-constraint $orSplit = preg_split('{\s*\|\|?\s*}', trim($reqVersion)); foreach ($orSplit as $orConstraint) { $andSplit = preg_split('{(?< ,]) *(? $stability) { continue; } $stabilityFlags[$name] = $stability; $match = true; } } if ($match) { continue; } // infer flags for requirements that have an explicit -dev or -beta version specified but only // for those that are more unstable than the minimumStability or existing flags $reqVersion = preg_replace('{^([^,\s@]+) as .+$}', '$1', $reqVersion); if (preg_match('{^[^,\s@]+$}', $reqVersion) && 'stable' !== ($stabilityName = VersionParser::parseStability($reqVersion))) { $name = strtolower($reqName); $stability = $stabilities[$stabilityName]; if ((isset($stabilityFlags[$name]) && $stabilityFlags[$name] > $stability) || ($minimumStability > $stability)) { continue; } $stabilityFlags[$name] = $stability; } } return $stabilityFlags; } private function extractReferences(array $requires, array $references) { foreach ($requires as $reqName => $reqVersion) { $reqVersion = preg_replace('{^([^,\s@]+) as .+$}', '$1', $reqVersion); if (preg_match('{^[^,\s@]+?#([a-f0-9]+)$}', $reqVersion, $match) && 'dev' === ($stabilityName = VersionParser::parseStability($reqVersion))) { $name = strtolower($reqName); $references[$name] = $match[1]; } } return $references; } } composer-1.0.0-beta2/src/Composer/Package/Loader/ValidatingArrayLoader.php000066400000000000000000000416361267577262200264240ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\Loader; use Composer\Package; use Composer\Package\BasePackage; use Composer\Semver\Constraint\Constraint; use Composer\Package\Version\VersionParser; use Composer\Repository\PlatformRepository; /** * @author Jordi Boggiano */ class ValidatingArrayLoader implements LoaderInterface { const CHECK_ALL = 1; const CHECK_UNBOUND_CONSTRAINTS = 1; private $loader; private $versionParser; private $errors; private $warnings; private $config; private $strictName; private $flags; public function __construct(LoaderInterface $loader, $strictName = true, VersionParser $parser = null, $flags = 0) { $this->loader = $loader; $this->versionParser = $parser ?: new VersionParser(); $this->strictName = $strictName; $this->flags = $flags; } public function load(array $config, $class = 'Composer\Package\CompletePackage') { $this->errors = array(); $this->warnings = array(); $this->config = $config; if ($this->strictName) { $this->validateRegex('name', '[A-Za-z0-9][A-Za-z0-9_.-]*/[A-Za-z0-9][A-Za-z0-9_.-]*', true); } else { $this->validateString('name', true); } if (!empty($this->config['version'])) { try { $this->versionParser->normalize($this->config['version']); } catch (\Exception $e) { $this->errors[] = 'version : invalid value ('.$this->config['version'].'): '.$e->getMessage(); unset($this->config['version']); } } $this->validateRegex('type', '[A-Za-z0-9-]+'); $this->validateString('target-dir'); $this->validateArray('extra'); $this->validateFlatArray('bin'); $this->validateArray('scripts'); // TODO validate event names & listener syntax $this->validateString('description'); $this->validateUrl('homepage'); $this->validateFlatArray('keywords', '[\p{N}\p{L} ._-]+'); if (isset($this->config['license'])) { if (is_string($this->config['license'])) { $this->validateRegex('license', '[A-Za-z0-9+. ()-]+'); } else { $this->validateFlatArray('license', '[A-Za-z0-9+. ()-]+'); } } $this->validateString('time'); if (!empty($this->config['time'])) { try { $date = new \DateTime($this->config['time'], new \DateTimeZone('UTC')); } catch (\Exception $e) { $this->errors[] = 'time : invalid value ('.$this->config['time'].'): '.$e->getMessage(); unset($this->config['time']); } } if ($this->validateArray('authors') && !empty($this->config['authors'])) { foreach ($this->config['authors'] as $key => $author) { if (!is_array($author)) { $this->errors[] = 'authors.'.$key.' : should be an array, '.gettype($author).' given'; unset($this->config['authors'][$key]); continue; } foreach (array('homepage', 'email', 'name', 'role') as $authorData) { if (isset($author[$authorData]) && !is_string($author[$authorData])) { $this->errors[] = 'authors.'.$key.'.'.$authorData.' : invalid value, must be a string'; unset($this->config['authors'][$key][$authorData]); } } if (isset($author['homepage']) && !$this->filterUrl($author['homepage'])) { $this->warnings[] = 'authors.'.$key.'.homepage : invalid value ('.$author['homepage'].'), must be an http/https URL'; unset($this->config['authors'][$key]['homepage']); } if (isset($author['email']) && !filter_var($author['email'], FILTER_VALIDATE_EMAIL)) { $this->warnings[] = 'authors.'.$key.'.email : invalid value ('.$author['email'].'), must be a valid email address'; unset($this->config['authors'][$key]['email']); } if (empty($this->config['authors'][$key])) { unset($this->config['authors'][$key]); } } if (empty($this->config['authors'])) { unset($this->config['authors']); } } if ($this->validateArray('support') && !empty($this->config['support'])) { foreach (array('issues', 'forum', 'wiki', 'source', 'email', 'irc', 'docs') as $key) { if (isset($this->config['support'][$key]) && !is_string($this->config['support'][$key])) { $this->errors[] = 'support.'.$key.' : invalid value, must be a string'; unset($this->config['support'][$key]); } } if (isset($this->config['support']['email']) && !filter_var($this->config['support']['email'], FILTER_VALIDATE_EMAIL)) { $this->warnings[] = 'support.email : invalid value ('.$this->config['support']['email'].'), must be a valid email address'; unset($this->config['support']['email']); } if (isset($this->config['support']['irc']) && !$this->filterUrl($this->config['support']['irc'], array('irc'))) { $this->warnings[] = 'support.irc : invalid value ('.$this->config['support']['irc'].'), must be a irc:/// URL'; unset($this->config['support']['irc']); } foreach (array('issues', 'forum', 'wiki', 'source', 'docs') as $key) { if (isset($this->config['support'][$key]) && !$this->filterUrl($this->config['support'][$key])) { $this->warnings[] = 'support.'.$key.' : invalid value ('.$this->config['support'][$key].'), must be an http/https URL'; unset($this->config['support'][$key]); } } if (empty($this->config['support'])) { unset($this->config['support']); } } $unboundConstraint = new Constraint('=', $this->versionParser->normalize('dev-master')); foreach (array_keys(BasePackage::$supportedLinkTypes) as $linkType) { if ($this->validateArray($linkType) && isset($this->config[$linkType])) { foreach ($this->config[$linkType] as $package => $constraint) { if (!preg_match('{^[A-Za-z0-9_./-]+$}', $package)) { $this->warnings[] = $linkType.'.'.$package.' : invalid key, package names must be strings containing only [A-Za-z0-9_./-]'; } if (!is_string($constraint)) { $this->errors[] = $linkType.'.'.$package.' : invalid value, must be a string containing a version constraint'; unset($this->config[$linkType][$package]); } elseif ('self.version' !== $constraint) { try { $linkConstraint = $this->versionParser->parseConstraints($constraint); } catch (\Exception $e) { $this->errors[] = $linkType.'.'.$package.' : invalid version constraint ('.$e->getMessage().')'; unset($this->config[$linkType][$package]); continue; } // check requires for unbound constraints on non-platform packages if ( ($this->flags & self::CHECK_UNBOUND_CONSTRAINTS) && 'require' === $linkType && $linkConstraint->matches($unboundConstraint) && !preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $package) ) { $this->warnings[] = $linkType.'.'.$package.' : unbound version constraints ('.$constraint.') should be avoided'; } } } } } if ($this->validateArray('suggest') && !empty($this->config['suggest'])) { foreach ($this->config['suggest'] as $package => $description) { if (!is_string($description)) { $this->errors[] = 'suggest.'.$package.' : invalid value, must be a string describing why the package is suggested'; unset($this->config['suggest'][$package]); } } } if ($this->validateString('minimum-stability') && !empty($this->config['minimum-stability'])) { if (!isset(BasePackage::$stabilities[$this->config['minimum-stability']])) { $this->errors[] = 'minimum-stability : invalid value ('.$this->config['minimum-stability'].'), must be one of '.implode(', ', array_keys(BasePackage::$stabilities)); unset($this->config['minimum-stability']); } } if ($this->validateArray('autoload') && !empty($this->config['autoload'])) { $types = array('psr-0', 'psr-4', 'classmap', 'files', 'exclude-from-classmap'); foreach ($this->config['autoload'] as $type => $typeConfig) { if (!in_array($type, $types)) { $this->errors[] = 'autoload : invalid value ('.$type.'), must be one of '.implode(', ', $types); unset($this->config['autoload'][$type]); } if ($type === 'psr-4') { foreach ($typeConfig as $namespace => $dirs) { if ($namespace !== '' && '\\' !== substr($namespace, -1)) { $this->errors[] = 'autoload.psr-4 : invalid value ('.$namespace.'), namespaces must end with a namespace separator, should be '.$namespace.'\\\\'; } } } } } if (!empty($this->config['autoload']['psr-4']) && !empty($this->config['target-dir'])) { $this->errors[] = 'target-dir : this can not be used together with the autoload.psr-4 setting, remove target-dir to upgrade to psr-4'; // Unset the psr-4 setting, since unsetting target-dir might // interfere with other settings. unset($this->config['autoload']['psr-4']); } // TODO validate dist // TODO validate source // TODO validate repositories // TODO validate package repositories' packages using this recursively $this->validateFlatArray('include-path'); $this->validateArray('transport-options'); // branch alias validation if (isset($this->config['extra']['branch-alias'])) { if (!is_array($this->config['extra']['branch-alias'])) { $this->errors[] = 'extra.branch-alias : must be an array of versions => aliases'; } else { foreach ($this->config['extra']['branch-alias'] as $sourceBranch => $targetBranch) { // ensure it is an alias to a -dev package if ('-dev' !== substr($targetBranch, -4)) { $this->warnings[] = 'extra.branch-alias.'.$sourceBranch.' : the target branch ('.$targetBranch.') must end in -dev'; unset($this->config['extra']['branch-alias'][$sourceBranch]); continue; } // normalize without -dev and ensure it's a numeric branch that is parseable $validatedTargetBranch = $this->versionParser->normalizeBranch(substr($targetBranch, 0, -4)); if ('-dev' !== substr($validatedTargetBranch, -4)) { $this->warnings[] = 'extra.branch-alias.'.$sourceBranch.' : the target branch ('.$targetBranch.') must be a parseable number like 2.0-dev'; unset($this->config['extra']['branch-alias'][$sourceBranch]); continue; } // If using numeric aliases ensure the alias is a valid subversion if (($sourcePrefix = $this->versionParser->parseNumericAliasPrefix($sourceBranch)) && ($targetPrefix = $this->versionParser->parseNumericAliasPrefix($targetBranch)) && (stripos($targetPrefix, $sourcePrefix) !== 0) ) { $this->warnings[] = 'extra.branch-alias.'.$sourceBranch.' : the target branch ('.$targetBranch.') is not a valid numeric alias for this version'; unset($this->config['extra']['branch-alias'][$sourceBranch]); } } } } if ($this->errors) { throw new InvalidPackageException($this->errors, $this->warnings, $config); } $package = $this->loader->load($this->config, $class); $this->config = null; return $package; } public function getWarnings() { return $this->warnings; } public function getErrors() { return $this->errors; } private function validateRegex($property, $regex, $mandatory = false) { if (!$this->validateString($property, $mandatory)) { return false; } if (!preg_match('{^'.$regex.'$}u', $this->config[$property])) { $message = $property.' : invalid value ('.$this->config[$property].'), must match '.$regex; if ($mandatory) { $this->errors[] = $message; } else { $this->warnings[] = $message; } unset($this->config[$property]); return false; } return true; } private function validateString($property, $mandatory = false) { if (isset($this->config[$property]) && !is_string($this->config[$property])) { $this->errors[] = $property.' : should be a string, '.gettype($this->config[$property]).' given'; unset($this->config[$property]); return false; } if (!isset($this->config[$property]) || trim($this->config[$property]) === '') { if ($mandatory) { $this->errors[] = $property.' : must be present'; } unset($this->config[$property]); return false; } return true; } private function validateArray($property, $mandatory = false) { if (isset($this->config[$property]) && !is_array($this->config[$property])) { $this->errors[] = $property.' : should be an array, '.gettype($this->config[$property]).' given'; unset($this->config[$property]); return false; } if (!isset($this->config[$property]) || !count($this->config[$property])) { if ($mandatory) { $this->errors[] = $property.' : must be present and contain at least one element'; } unset($this->config[$property]); return false; } return true; } private function validateFlatArray($property, $regex = null, $mandatory = false) { if (!$this->validateArray($property, $mandatory)) { return false; } $pass = true; foreach ($this->config[$property] as $key => $value) { if (!is_string($value) && !is_numeric($value)) { $this->errors[] = $property.'.'.$key.' : must be a string or int, '.gettype($value).' given'; unset($this->config[$property][$key]); $pass = false; continue; } if ($regex && !preg_match('{^'.$regex.'$}u', $value)) { $this->warnings[] = $property.'.'.$key.' : invalid value ('.$value.'), must match '.$regex; unset($this->config[$property][$key]); $pass = false; } } return $pass; } private function validateUrl($property, $mandatory = false) { if (!$this->validateString($property, $mandatory)) { return false; } if (!$this->filterUrl($this->config[$property])) { $this->warnings[] = $property.' : invalid value ('.$this->config[$property].'), must be an http/https URL'; unset($this->config[$property]); return false; } return true; } private function filterUrl($value, array $schemes = array('http', 'https')) { if ($value === '') { return true; } $bits = parse_url($value); if (empty($bits['scheme']) || empty($bits['host'])) { return false; } if (!in_array($bits['scheme'], $schemes, true)) { return false; } return true; } } composer-1.0.0-beta2/src/Composer/Package/Locker.php000066400000000000000000000342321267577262200222170ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package; use Composer\Json\JsonFile; use Composer\Installer\InstallationManager; use Composer\Repository\RepositoryManager; use Composer\Util\ProcessExecutor; use Composer\Repository\ArrayRepository; use Composer\Package\Dumper\ArrayDumper; use Composer\Package\Loader\ArrayLoader; use Composer\Util\Git as GitUtil; use Composer\IO\IOInterface; use Seld\JsonLint\ParsingException; /** * Reads/writes project lockfile (composer.lock). * * @author Konstantin Kudryashiv * @author Jordi Boggiano */ class Locker { private $lockFile; private $repositoryManager; private $installationManager; private $hash; private $contentHash; private $loader; private $dumper; private $process; private $lockDataCache; /** * Initializes packages locker. * * @param IOInterface $io * @param JsonFile $lockFile lockfile loader * @param RepositoryManager $repositoryManager repository manager instance * @param InstallationManager $installationManager installation manager instance * @param string $composerFileContents The contents of the composer file */ public function __construct(IOInterface $io, JsonFile $lockFile, RepositoryManager $repositoryManager, InstallationManager $installationManager, $composerFileContents) { $this->lockFile = $lockFile; $this->repositoryManager = $repositoryManager; $this->installationManager = $installationManager; $this->hash = md5($composerFileContents); $this->contentHash = self::getContentHash($composerFileContents); $this->loader = new ArrayLoader(null, true); $this->dumper = new ArrayDumper(); $this->process = new ProcessExecutor($io); } /** * Returns the md5 hash of the sorted content of the composer file. * * @param string $composerFileContents The contents of the composer file. * * @return string */ public static function getContentHash($composerFileContents) { $content = json_decode($composerFileContents, true); $relevantKeys = array( 'name', 'version', 'require', 'require-dev', 'conflict', 'replace', 'provide', 'minimum-stability', 'prefer-stable', 'repositories', 'extra', ); $relevantContent = array(); foreach (array_intersect($relevantKeys, array_keys($content)) as $key) { $relevantContent[$key] = $content[$key]; } if (isset($content['config']['platform'])) { $relevantContent['config']['platform'] = $content['config']['platform']; } ksort($relevantContent); return md5(json_encode($relevantContent)); } /** * Checks whether locker were been locked (lockfile found). * * @return bool */ public function isLocked() { if (!$this->lockFile->exists()) { return false; } $data = $this->getLockData(); return isset($data['packages']); } /** * Checks whether the lock file is still up to date with the current hash * * @return bool */ public function isFresh() { $lock = $this->lockFile->read(); if (!empty($lock['content-hash'])) { // There is a content hash key, use that instead of the file hash return $this->contentHash === $lock['content-hash']; } return $this->hash === $lock['hash']; } /** * Searches and returns an array of locked packages, retrieved from registered repositories. * * @param bool $withDevReqs true to retrieve the locked dev packages * @throws \RuntimeException * @return \Composer\Repository\RepositoryInterface */ public function getLockedRepository($withDevReqs = false) { $lockData = $this->getLockData(); $packages = new ArrayRepository(); $lockedPackages = $lockData['packages']; if ($withDevReqs) { if (isset($lockData['packages-dev'])) { $lockedPackages = array_merge($lockedPackages, $lockData['packages-dev']); } else { throw new \RuntimeException('The lock file does not contain require-dev information, run install with the --no-dev option or run update to install those packages.'); } } if (empty($lockedPackages)) { return $packages; } if (isset($lockedPackages[0]['name'])) { foreach ($lockedPackages as $info) { $packages->addPackage($this->loader->load($info)); } return $packages; } throw new \RuntimeException('Your composer.lock was created before 2012-09-15, and is not supported anymore. Run "composer update" to generate a new one.'); } /** * Returns the platform requirements stored in the lock file * * @param bool $withDevReqs if true, the platform requirements from the require-dev block are also returned * @return \Composer\Package\Link[] */ public function getPlatformRequirements($withDevReqs = false) { $lockData = $this->getLockData(); $requirements = array(); if (!empty($lockData['platform'])) { $requirements = $this->loader->parseLinks( '__ROOT__', '1.0.0', 'requires', isset($lockData['platform']) ? $lockData['platform'] : array() ); } if ($withDevReqs && !empty($lockData['platform-dev'])) { $devRequirements = $this->loader->parseLinks( '__ROOT__', '1.0.0', 'requires', isset($lockData['platform-dev']) ? $lockData['platform-dev'] : array() ); $requirements = array_merge($requirements, $devRequirements); } return $requirements; } public function getMinimumStability() { $lockData = $this->getLockData(); return isset($lockData['minimum-stability']) ? $lockData['minimum-stability'] : 'stable'; } public function getStabilityFlags() { $lockData = $this->getLockData(); return isset($lockData['stability-flags']) ? $lockData['stability-flags'] : array(); } public function getPreferStable() { $lockData = $this->getLockData(); // return null if not set to allow caller logic to choose the // right behavior since old lock files have no prefer-stable return isset($lockData['prefer-stable']) ? $lockData['prefer-stable'] : null; } public function getPreferLowest() { $lockData = $this->getLockData(); // return null if not set to allow caller logic to choose the // right behavior since old lock files have no prefer-lowest return isset($lockData['prefer-lowest']) ? $lockData['prefer-lowest'] : null; } public function getPlatformOverrides() { $lockData = $this->getLockData(); return isset($lockData['platform-overrides']) ? $lockData['platform-overrides'] : array(); } public function getAliases() { $lockData = $this->getLockData(); return isset($lockData['aliases']) ? $lockData['aliases'] : array(); } public function getLockData() { if (null !== $this->lockDataCache) { return $this->lockDataCache; } if (!$this->lockFile->exists()) { throw new \LogicException('No lockfile found. Unable to read locked packages'); } return $this->lockDataCache = $this->lockFile->read(); } /** * Locks provided data into lockfile. * * @param array $packages array of packages * @param mixed $devPackages array of dev packages or null if installed without --dev * @param array $platformReqs array of package name => constraint for required platform packages * @param mixed $platformDevReqs array of package name => constraint for dev-required platform packages * @param array $aliases array of aliases * @param string $minimumStability * @param array $stabilityFlags * @param bool $preferStable * @param bool $preferLowest * @param array $platformOverrides * * @return bool */ public function setLockData(array $packages, $devPackages, array $platformReqs, $platformDevReqs, array $aliases, $minimumStability, array $stabilityFlags, $preferStable, $preferLowest, array $platformOverrides) { $lock = array( '_readme' => array('This file locks the dependencies of your project to a known state', 'Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file', 'This file is @gener'.'ated automatically', ), 'hash' => $this->hash, 'content-hash' => $this->contentHash, 'packages' => null, 'packages-dev' => null, 'aliases' => array(), 'minimum-stability' => $minimumStability, 'stability-flags' => $stabilityFlags, 'prefer-stable' => $preferStable, 'prefer-lowest' => $preferLowest, ); foreach ($aliases as $package => $versions) { foreach ($versions as $version => $alias) { $lock['aliases'][] = array( 'alias' => $alias['alias'], 'alias_normalized' => $alias['alias_normalized'], 'version' => $version, 'package' => $package, ); } } $lock['packages'] = $this->lockPackages($packages); if (null !== $devPackages) { $lock['packages-dev'] = $this->lockPackages($devPackages); } $lock['platform'] = $platformReqs; $lock['platform-dev'] = $platformDevReqs; if ($platformOverrides) { $lock['platform-overrides'] = $platformOverrides; } if (empty($lock['packages']) && empty($lock['packages-dev']) && empty($lock['platform']) && empty($lock['platform-dev'])) { if ($this->lockFile->exists()) { unlink($this->lockFile->getPath()); } return false; } try { $isLocked = $this->isLocked(); } catch (ParsingException $e) { $isLocked = false; } if (!$isLocked || $lock !== $this->getLockData()) { $this->lockFile->write($lock); $this->lockDataCache = null; return true; } return false; } private function lockPackages(array $packages) { $locked = array(); foreach ($packages as $package) { if ($package instanceof AliasPackage) { continue; } $name = $package->getPrettyName(); $version = $package->getPrettyVersion(); if (!$name || !$version) { throw new \LogicException(sprintf( 'Package "%s" has no version or name and can not be locked', $package )); } $spec = $this->dumper->dump($package); unset($spec['version_normalized']); // always move time to the end of the package definition $time = isset($spec['time']) ? $spec['time'] : null; unset($spec['time']); if ($package->isDev() && $package->getInstallationSource() === 'source') { // use the exact commit time of the current reference if it's a dev package $time = $this->getPackageTime($package) ?: $time; } if (null !== $time) { $spec['time'] = $time; } unset($spec['installation-source']); $locked[] = $spec; } usort($locked, function ($a, $b) { $comparison = strcmp($a['name'], $b['name']); if (0 !== $comparison) { return $comparison; } // If it is the same package, compare the versions to make the order deterministic return strcmp($a['version'], $b['version']); }); return $locked; } /** * Returns the packages's datetime for its source reference. * * @param PackageInterface $package The package to scan. * @return string|null The formatted datetime or null if none was found. */ private function getPackageTime(PackageInterface $package) { if (!function_exists('proc_open')) { return null; } $path = realpath($this->installationManager->getInstallPath($package)); $sourceType = $package->getSourceType(); $datetime = null; if ($path && in_array($sourceType, array('git', 'hg'))) { $sourceRef = $package->getSourceReference() ?: $package->getDistReference(); switch ($sourceType) { case 'git': GitUtil::cleanEnv(); if (0 === $this->process->execute('git log -n1 --pretty=%ct '.ProcessExecutor::escape($sourceRef), $output, $path) && preg_match('{^\s*\d+\s*$}', $output)) { $datetime = new \DateTime('@'.trim($output), new \DateTimeZone('UTC')); } break; case 'hg': if (0 === $this->process->execute('hg log --template "{date|hgdate}" -r '.ProcessExecutor::escape($sourceRef), $output, $path) && preg_match('{^\s*(\d+)\s*}', $output, $match)) { $datetime = new \DateTime('@'.$match[1], new \DateTimeZone('UTC')); } break; } } return $datetime ? $datetime->format('Y-m-d H:i:s') : null; } } composer-1.0.0-beta2/src/Composer/Package/Package.php000066400000000000000000000304021267577262200223260ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package; use Composer\Package\Version\VersionParser; use Composer\Util\ComposerMirror; /** * Core package definitions that are needed to resolve dependencies and install packages * * @author Nils Adermann */ class Package extends BasePackage { protected $type; protected $targetDir; protected $installationSource; protected $sourceType; protected $sourceUrl; protected $sourceReference; protected $sourceMirrors; protected $distType; protected $distUrl; protected $distReference; protected $distSha1Checksum; protected $distMirrors; protected $version; protected $prettyVersion; protected $releaseDate; protected $extra = array(); protected $binaries = array(); protected $dev; protected $stability; protected $notificationUrl; /** @var Link[] */ protected $requires = array(); /** @var Link[] */ protected $conflicts = array(); /** @var Link[] */ protected $provides = array(); /** @var Link[] */ protected $replaces = array(); /** @var Link[] */ protected $devRequires = array(); protected $suggests = array(); protected $autoload = array(); protected $devAutoload = array(); protected $includePaths = array(); protected $archiveExcludes = array(); /** * Creates a new in memory package. * * @param string $name The package's name * @param string $version The package's version * @param string $prettyVersion The package's non-normalized version */ public function __construct($name, $version, $prettyVersion) { parent::__construct($name); $this->version = $version; $this->prettyVersion = $prettyVersion; $this->stability = VersionParser::parseStability($version); $this->dev = $this->stability === 'dev'; } /** * {@inheritDoc} */ public function isDev() { return $this->dev; } /** * @param string $type */ public function setType($type) { $this->type = $type; } /** * {@inheritDoc} */ public function getType() { return $this->type ?: 'library'; } /** * {@inheritDoc} */ public function getStability() { return $this->stability; } /** * @param string $targetDir */ public function setTargetDir($targetDir) { $this->targetDir = $targetDir; } /** * {@inheritDoc} */ public function getTargetDir() { if (null === $this->targetDir) { return; } return ltrim(preg_replace('{ (?:^|[\\\\/]+) \.\.? (?:[\\\\/]+|$) (?:\.\.? (?:[\\\\/]+|$) )*}x', '/', $this->targetDir), '/'); } /** * @param array $extra */ public function setExtra(array $extra) { $this->extra = $extra; } /** * {@inheritDoc} */ public function getExtra() { return $this->extra; } /** * @param array $binaries */ public function setBinaries(array $binaries) { $this->binaries = $binaries; } /** * {@inheritDoc} */ public function getBinaries() { return $this->binaries; } /** * {@inheritDoc} */ public function setInstallationSource($type) { $this->installationSource = $type; } /** * {@inheritDoc} */ public function getInstallationSource() { return $this->installationSource; } /** * @param string $type */ public function setSourceType($type) { $this->sourceType = $type; } /** * {@inheritDoc} */ public function getSourceType() { return $this->sourceType; } /** * @param string $url */ public function setSourceUrl($url) { $this->sourceUrl = $url; } /** * {@inheritDoc} */ public function getSourceUrl() { return $this->sourceUrl; } /** * @param string $reference */ public function setSourceReference($reference) { $this->sourceReference = $reference; } /** * {@inheritDoc} */ public function getSourceReference() { return $this->sourceReference; } /** * @param array|null $mirrors */ public function setSourceMirrors($mirrors) { $this->sourceMirrors = $mirrors; } /** * {@inheritDoc} */ public function getSourceMirrors() { return $this->sourceMirrors; } /** * {@inheritDoc} */ public function getSourceUrls() { return $this->getUrls($this->sourceUrl, $this->sourceMirrors, $this->sourceReference, $this->sourceType, 'source'); } /** * @param string $type */ public function setDistType($type) { $this->distType = $type; } /** * {@inheritDoc} */ public function getDistType() { return $this->distType; } /** * @param string $url */ public function setDistUrl($url) { $this->distUrl = $url; } /** * {@inheritDoc} */ public function getDistUrl() { return $this->distUrl; } /** * @param string $reference */ public function setDistReference($reference) { $this->distReference = $reference; } /** * {@inheritDoc} */ public function getDistReference() { return $this->distReference; } /** * @param string $sha1checksum */ public function setDistSha1Checksum($sha1checksum) { $this->distSha1Checksum = $sha1checksum; } /** * {@inheritDoc} */ public function getDistSha1Checksum() { return $this->distSha1Checksum; } /** * @param array|null $mirrors */ public function setDistMirrors($mirrors) { $this->distMirrors = $mirrors; } /** * {@inheritDoc} */ public function getDistMirrors() { return $this->distMirrors; } /** * {@inheritDoc} */ public function getDistUrls() { return $this->getUrls($this->distUrl, $this->distMirrors, $this->distReference, $this->distType, 'dist'); } /** * {@inheritDoc} */ public function getVersion() { return $this->version; } /** * {@inheritDoc} */ public function getPrettyVersion() { return $this->prettyVersion; } /** * Set the releaseDate * * @param \DateTime $releaseDate */ public function setReleaseDate(\DateTime $releaseDate) { $this->releaseDate = $releaseDate; } /** * {@inheritDoc} */ public function getReleaseDate() { return $this->releaseDate; } /** * Set the required packages * * @param Link[] $requires A set of package links */ public function setRequires(array $requires) { $this->requires = $requires; } /** * {@inheritDoc} */ public function getRequires() { return $this->requires; } /** * Set the conflicting packages * * @param Link[] $conflicts A set of package links */ public function setConflicts(array $conflicts) { $this->conflicts = $conflicts; } /** * {@inheritDoc} */ public function getConflicts() { return $this->conflicts; } /** * Set the provided virtual packages * * @param Link[] $provides A set of package links */ public function setProvides(array $provides) { $this->provides = $provides; } /** * {@inheritDoc} */ public function getProvides() { return $this->provides; } /** * Set the packages this one replaces * * @param Link[] $replaces A set of package links */ public function setReplaces(array $replaces) { $this->replaces = $replaces; } /** * {@inheritDoc} */ public function getReplaces() { return $this->replaces; } /** * Set the recommended packages * * @param Link[] $devRequires A set of package links */ public function setDevRequires(array $devRequires) { $this->devRequires = $devRequires; } /** * {@inheritDoc} */ public function getDevRequires() { return $this->devRequires; } /** * Set the suggested packages * * @param array $suggests A set of package names/comments */ public function setSuggests(array $suggests) { $this->suggests = $suggests; } /** * {@inheritDoc} */ public function getSuggests() { return $this->suggests; } /** * Set the autoload mapping * * @param array $autoload Mapping of autoloading rules */ public function setAutoload(array $autoload) { $this->autoload = $autoload; } /** * {@inheritDoc} */ public function getAutoload() { return $this->autoload; } /** * Set the dev autoload mapping * * @param array $devAutoload Mapping of dev autoloading rules */ public function setDevAutoload(array $devAutoload) { $this->devAutoload = $devAutoload; } /** * {@inheritDoc} */ public function getDevAutoload() { return $this->devAutoload; } /** * Sets the list of paths added to PHP's include path. * * @param array $includePaths List of directories. */ public function setIncludePaths(array $includePaths) { $this->includePaths = $includePaths; } /** * {@inheritDoc} */ public function getIncludePaths() { return $this->includePaths; } /** * Sets the notification URL * * @param string $notificationUrl */ public function setNotificationUrl($notificationUrl) { $this->notificationUrl = $notificationUrl; } /** * {@inheritDoc} */ public function getNotificationUrl() { return $this->notificationUrl; } /** * Sets a list of patterns to be excluded from archives * * @param array $excludes */ public function setArchiveExcludes(array $excludes) { $this->archiveExcludes = $excludes; } /** * {@inheritDoc} */ public function getArchiveExcludes() { return $this->archiveExcludes; } /** * Replaces current version and pretty version with passed values. * It also sets stability. * * @param string $version The package's normalized version * @param string $prettyVersion The package's non-normalized version */ public function replaceVersion($version, $prettyVersion) { $this->version = $version; $this->prettyVersion = $prettyVersion; $this->stability = VersionParser::parseStability($version); $this->dev = $this->stability === 'dev'; } protected function getUrls($url, $mirrors, $ref, $type, $urlType) { if (!$url) { return array(); } $urls = array($url); if ($mirrors) { foreach ($mirrors as $mirror) { if ($urlType === 'dist') { $mirrorUrl = ComposerMirror::processUrl($mirror['url'], $this->name, $this->version, $ref, $type); } elseif ($urlType === 'source' && $type === 'git') { $mirrorUrl = ComposerMirror::processGitUrl($mirror['url'], $this->name, $url, $type); } elseif ($urlType === 'source' && $type === 'hg') { $mirrorUrl = ComposerMirror::processHgUrl($mirror['url'], $this->name, $url, $type); } if (!in_array($mirrorUrl, $urls)) { $func = $mirror['preferred'] ? 'array_unshift' : 'array_push'; $func($urls, $mirrorUrl); } } } return $urls; } } composer-1.0.0-beta2/src/Composer/Package/PackageInterface.php000066400000000000000000000216231267577262200241540ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package; use Composer\Repository\RepositoryInterface; /** * Defines the essential information a package has that is used during solving/installation * * @author Jordi Boggiano */ interface PackageInterface { /** * Returns the package's name without version info, thus not a unique identifier * * @return string package name */ public function getName(); /** * Returns the package's pretty (i.e. with proper case) name * * @return string package name */ public function getPrettyName(); /** * Returns a set of names that could refer to this package * * No version or release type information should be included in any of the * names. Provided or replaced package names need to be returned as well. * * @return array An array of strings referring to this package */ public function getNames(); /** * Allows the solver to set an id for this package to refer to it. * * @param int $id */ public function setId($id); /** * Retrieves the package's id set through setId * * @return int The previously set package id */ public function getId(); /** * Returns whether the package is a development virtual package or a concrete one * * @return bool */ public function isDev(); /** * Returns the package type, e.g. library * * @return string The package type */ public function getType(); /** * Returns the package targetDir property * * @return string The package targetDir */ public function getTargetDir(); /** * Returns the package extra data * * @return array The package extra data */ public function getExtra(); /** * Sets source from which this package was installed (source/dist). * * @param string $type source/dist */ public function setInstallationSource($type); /** * Returns source from which this package was installed (source/dist). * * @return string source/dist */ public function getInstallationSource(); /** * Returns the repository type of this package, e.g. git, svn * * @return string The repository type */ public function getSourceType(); /** * Returns the repository url of this package, e.g. git://github.com/naderman/composer.git * * @return string The repository url */ public function getSourceUrl(); /** * Returns the repository urls of this package including mirrors, e.g. git://github.com/naderman/composer.git * * @return array */ public function getSourceUrls(); /** * Returns the repository reference of this package, e.g. master, 1.0.0 or a commit hash for git * * @return string The repository reference */ public function getSourceReference(); /** * Returns the source mirrors of this package * * @return array|null */ public function getSourceMirrors(); /** * Returns the type of the distribution archive of this version, e.g. zip, tarball * * @return string The repository type */ public function getDistType(); /** * Returns the url of the distribution archive of this version * * @return string */ public function getDistUrl(); /** * Returns the urls of the distribution archive of this version, including mirrors * * @return array */ public function getDistUrls(); /** * Returns the reference of the distribution archive of this version, e.g. master, 1.0.0 or a commit hash for git * * @return string */ public function getDistReference(); /** * Returns the sha1 checksum for the distribution archive of this version * * @return string */ public function getDistSha1Checksum(); /** * Returns the dist mirrors of this package * * @return array|null */ public function getDistMirrors(); /** * Returns the version of this package * * @return string version */ public function getVersion(); /** * Returns the pretty (i.e. non-normalized) version string of this package * * @return string version */ public function getPrettyVersion(); /** * Returns the pretty version string plus a git or hg commit hash of this package * * @see getPrettyVersion * * @param bool $truncate If the source reference is a sha1 hash, truncate it * @return string version */ public function getFullPrettyVersion($truncate = true); /** * Returns the release date of the package * * @return \DateTime */ public function getReleaseDate(); /** * Returns the stability of this package: one of (dev, alpha, beta, RC, stable) * * @return string */ public function getStability(); /** * Returns a set of links to packages which need to be installed before * this package can be installed * * @return Link[] An array of package links defining required packages */ public function getRequires(); /** * Returns a set of links to packages which must not be installed at the * same time as this package * * @return Link[] An array of package links defining conflicting packages */ public function getConflicts(); /** * Returns a set of links to virtual packages that are provided through * this package * * @return Link[] An array of package links defining provided packages */ public function getProvides(); /** * Returns a set of links to packages which can alternatively be * satisfied by installing this package * * @return Link[] An array of package links defining replaced packages */ public function getReplaces(); /** * Returns a set of links to packages which are required to develop * this package. These are installed if in dev mode. * * @return Link[] An array of package links defining packages required for development */ public function getDevRequires(); /** * Returns a set of package names and reasons why they are useful in * combination with this package. * * @return array An array of package suggestions with descriptions */ public function getSuggests(); /** * Returns an associative array of autoloading rules * * {"": {""}} * * Type is either "psr-4", "psr-0", "classmap" or "files". Namespaces are mapped to * directories for autoloading using the type specified. * * @return array Mapping of autoloading rules */ public function getAutoload(); /** * Returns an associative array of dev autoloading rules * * {"": {""}} * * Type is either "psr-4", "psr-0", "classmap" or "files". Namespaces are mapped to * directories for autoloading using the type specified. * * @return array Mapping of dev autoloading rules */ public function getDevAutoload(); /** * Returns a list of directories which should get added to PHP's * include path. * * @return array */ public function getIncludePaths(); /** * Stores a reference to the repository that owns the package * * @param RepositoryInterface $repository */ public function setRepository(RepositoryInterface $repository); /** * Returns a reference to the repository that owns the package * * @return RepositoryInterface */ public function getRepository(); /** * Returns the package binaries * * @return array */ public function getBinaries(); /** * Returns package unique name, constructed from name and version. * * @return string */ public function getUniqueName(); /** * Returns the package notification url * * @return string */ public function getNotificationUrl(); /** * Converts the package into a readable and unique string * * @return string */ public function __toString(); /** * Converts the package into a pretty readable string * * @return string */ public function getPrettyString(); /** * Returns a list of patterns to exclude from package archives * * @return array */ public function getArchiveExcludes(); /** * Returns a list of options to download package dist files * * @return array */ public function getTransportOptions(); } composer-1.0.0-beta2/src/Composer/Package/RootAliasPackage.php000066400000000000000000000066771267577262200241650ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package; /** * @author Jordi Boggiano */ class RootAliasPackage extends AliasPackage implements RootPackageInterface { public function __construct(RootPackageInterface $aliasOf, $version, $prettyVersion) { parent::__construct($aliasOf, $version, $prettyVersion); } /** * {@inheritDoc} */ public function getAliases() { return $this->aliasOf->getAliases(); } /** * {@inheritDoc} */ public function getMinimumStability() { return $this->aliasOf->getMinimumStability(); } /** * {@inheritDoc} */ public function getStabilityFlags() { return $this->aliasOf->getStabilityFlags(); } /** * {@inheritDoc} */ public function getReferences() { return $this->aliasOf->getReferences(); } /** * {@inheritDoc} */ public function getPreferStable() { return $this->aliasOf->getPreferStable(); } /** * {@inheritDoc} */ public function setRequires(array $require) { $this->requires = $this->replaceSelfVersionDependencies($require, 'requires'); $this->aliasOf->setRequires($require); } /** * {@inheritDoc} */ public function setDevRequires(array $devRequire) { $this->devRequires = $this->replaceSelfVersionDependencies($devRequire, 'devRequires'); $this->aliasOf->setDevRequires($devRequire); } /** * {@inheritDoc} */ public function setConflicts(array $conflicts) { $this->conflicts = $this->replaceSelfVersionDependencies($conflicts, 'conflicts'); $this->aliasOf->setConflicts($conflicts); } /** * {@inheritDoc} */ public function setProvides(array $provides) { $this->provides = $this->replaceSelfVersionDependencies($provides, 'provides'); $this->aliasOf->setProvides($provides); } /** * {@inheritDoc} */ public function setReplaces(array $replaces) { $this->replaces = $this->replaceSelfVersionDependencies($replaces, 'replaces'); $this->aliasOf->setReplaces($replaces); } /** * {@inheritDoc} */ public function setRepositories($repositories) { $this->aliasOf->setRepositories($repositories); } /** * {@inheritDoc} */ public function setAutoload(array $autoload) { $this->aliasOf->setAutoload($autoload); } /** * {@inheritDoc} */ public function setDevAutoload(array $devAutoload) { $this->aliasOf->setDevAutoload($devAutoload); } /** * {@inheritDoc} */ public function setStabilityFlags(array $stabilityFlags) { $this->aliasOf->setStabilityFlags($stabilityFlags); } /** * {@inheritDoc} */ public function setSuggests(array $suggests) { $this->aliasOf->setSuggests($suggests); } /** * {@inheritDoc} */ public function setExtra(array $extra) { $this->aliasOf->setExtra($extra); } public function __clone() { parent::__clone(); $this->aliasOf = clone $this->aliasOf; } } composer-1.0.0-beta2/src/Composer/Package/RootPackage.php000066400000000000000000000044171267577262200232010ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package; /** * The root package represents the project's composer.json and contains additional metadata * * @author Jordi Boggiano */ class RootPackage extends CompletePackage implements RootPackageInterface { protected $minimumStability = 'stable'; protected $preferStable = false; protected $stabilityFlags = array(); protected $references = array(); protected $aliases = array(); /** * Set the minimumStability * * @param string $minimumStability */ public function setMinimumStability($minimumStability) { $this->minimumStability = $minimumStability; } /** * {@inheritDoc} */ public function getMinimumStability() { return $this->minimumStability; } /** * Set the stabilityFlags * * @param array $stabilityFlags */ public function setStabilityFlags(array $stabilityFlags) { $this->stabilityFlags = $stabilityFlags; } /** * {@inheritDoc} */ public function getStabilityFlags() { return $this->stabilityFlags; } /** * Set the preferStable * * @param bool $preferStable */ public function setPreferStable($preferStable) { $this->preferStable = $preferStable; } /** * {@inheritDoc} */ public function getPreferStable() { return $this->preferStable; } /** * Set the references * * @param array $references */ public function setReferences(array $references) { $this->references = $references; } /** * {@inheritDoc} */ public function getReferences() { return $this->references; } /** * Set the aliases * * @param array $aliases */ public function setAliases(array $aliases) { $this->aliases = $aliases; } /** * {@inheritDoc} */ public function getAliases() { return $this->aliases; } } composer-1.0.0-beta2/src/Composer/Package/RootPackageInterface.php000066400000000000000000000060121267577262200250130ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package; /** * Defines additional fields that are only needed for the root package * * @author Jordi Boggiano */ interface RootPackageInterface extends CompletePackageInterface { /** * Returns a set of package names and their aliases * * @return array */ public function getAliases(); /** * Returns the minimum stability of the package * * @return string */ public function getMinimumStability(); /** * Returns the stability flags to apply to dependencies * * array('foo/bar' => 'dev') * * @return array */ public function getStabilityFlags(); /** * Returns a set of package names and source references that must be enforced on them * * array('foo/bar' => 'abcd1234') * * @return array */ public function getReferences(); /** * Returns true if the root package prefers picking stable packages over unstable ones * * @return bool */ public function getPreferStable(); /** * Set the required packages * * @param Link[] $requires A set of package links */ public function setRequires(array $requires); /** * Set the recommended packages * * @param Link[] $devRequires A set of package links */ public function setDevRequires(array $devRequires); /** * Set the conflicting packages * * @param Link[] $conflicts A set of package links */ public function setConflicts(array $conflicts); /** * Set the provided virtual packages * * @param Link[] $provides A set of package links */ public function setProvides(array $provides); /** * Set the packages this one replaces * * @param Link[] $replaces A set of package links */ public function setReplaces(array $replaces); /** * Set the repositories * * @param array $repositories */ public function setRepositories($repositories); /** * Set the autoload mapping * * @param array $autoload Mapping of autoloading rules */ public function setAutoload(array $autoload); /** * Set the dev autoload mapping * * @param array $devAutoload Mapping of dev autoloading rules */ public function setDevAutoload(array $devAutoload); /** * Set the stabilityFlags * * @param array $stabilityFlags */ public function setStabilityFlags(array $stabilityFlags); /** * Set the suggested packages * * @param array $suggests A set of package names/comments */ public function setSuggests(array $suggests); /** * @param array $extra */ public function setExtra(array $extra); } composer-1.0.0-beta2/src/Composer/Package/Version/000077500000000000000000000000001267577262200217105ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/Package/Version/VersionGuesser.php000066400000000000000000000215521267577262200254110ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\Version; use Composer\Config; use Composer\Repository\Vcs\HgDriver; use Composer\IO\NullIO; use Composer\Semver\VersionParser as SemverVersionParser; use Composer\Util\Git as GitUtil; use Composer\Util\ProcessExecutor; use Composer\Util\Svn as SvnUtil; /** * Try to guess the current version number based on different VCS configuration. * * @author Jordi Boggiano * @author Samuel Roze */ class VersionGuesser { /** * @var Config */ private $config; /** * @var ProcessExecutor */ private $process; /** * @var SemverVersionParser */ private $versionParser; /** * @param Config $config * @param ProcessExecutor $process * @param SemverVersionParser $versionParser */ public function __construct(Config $config, ProcessExecutor $process, SemverVersionParser $versionParser) { $this->config = $config; $this->process = $process; $this->versionParser = $versionParser; } /** * @param array $packageConfig * @param string $path Path to guess into * * @return array versionData, 'version' and 'commit' keys */ public function guessVersion(array $packageConfig, $path) { if (function_exists('proc_open')) { $versionData = $this->guessGitVersion($packageConfig, $path); if (null !== $versionData) { return $versionData; } $versionData = $this->guessHgVersion($packageConfig, $path); if (null !== $versionData) { return $versionData; } return $this->guessSvnVersion($packageConfig, $path); } } private function guessGitVersion(array $packageConfig, $path) { GitUtil::cleanEnv(); $commit = null; $version = null; // try to fetch current version from git branch if (0 === $this->process->execute('git branch --no-color --no-abbrev -v', $output, $path)) { $branches = array(); $isFeatureBranch = false; // find current branch and collect all branch names foreach ($this->process->splitLines($output) as $branch) { if ($branch && preg_match('{^(?:\* ) *(\(no branch\)|\(detached from \S+\)|\S+) *([a-f0-9]+) .*$}', $branch, $match)) { if ($match[1] === '(no branch)' || substr($match[1], 0, 10) === '(detached ') { $version = 'dev-' . $match[2]; $isFeatureBranch = true; } else { $version = $this->versionParser->normalizeBranch($match[1]); $isFeatureBranch = 0 === strpos($version, 'dev-'); if ('9999999-dev' === $version) { $version = 'dev-' . $match[1]; } } if ($match[2]) { $commit = $match[2]; } } if ($branch && !preg_match('{^ *[^/]+/HEAD }', $branch)) { if (preg_match('{^(?:\* )? *(\S+) *([a-f0-9]+) .*$}', $branch, $match)) { $branches[] = $match[1]; } } } if ($isFeatureBranch) { // try to find the best (nearest) version branch to assume this feature's version $version = $this->guessFeatureVersion($packageConfig, $version, $branches, 'git rev-list %candidate%..%branch%', $path); } } if (!$version) { $version = $this->versionFromGitTags($path); } return array('version' => $version, 'commit' => $commit); } private function versionFromGitTags($path) { // try to fetch current version from git tags if (0 === $this->process->execute('git describe --exact-match --tags', $output, $path)) { try { return $this->versionParser->normalize(trim($output)); } catch (\Exception $e) { } } return null; } private function guessHgVersion(array $packageConfig, $path) { // try to fetch current version from hg branch if (0 === $this->process->execute('hg branch', $output, $path)) { $branch = trim($output); $version = $this->versionParser->normalizeBranch($branch); $isFeatureBranch = 0 === strpos($version, 'dev-'); if ('9999999-dev' === $version) { $version = 'dev-' . $branch; } if (!$isFeatureBranch) { return $version; } // re-use the HgDriver to fetch branches (this properly includes bookmarks) $driver = new HgDriver(array('url' => $path), new NullIO(), $this->config, $this->process); $branches = array_keys($driver->getBranches()); // try to find the best (nearest) version branch to assume this feature's version $version = $this->guessFeatureVersion($packageConfig, $version, $branches, 'hg log -r "not ancestors(\'%candidate%\') and ancestors(\'%branch%\')" --template "{node}\\n"', $path); return array('version' => $version, 'commit' => ''); } } private function guessFeatureVersion(array $packageConfig, $version, array $branches, $scmCmdline, $path) { // ignore feature branches if they have no branch-alias or self.version is used // and find the branch they came from to use as a version instead if ((isset($packageConfig['extra']['branch-alias']) && !isset($packageConfig['extra']['branch-alias'][$version])) || strpos(json_encode($packageConfig), '"self.version"') ) { $branch = preg_replace('{^dev-}', '', $version); $length = PHP_INT_MAX; $nonFeatureBranches = ''; if (!empty($packageConfig['non-feature-branches'])) { $nonFeatureBranches = implode('|', $packageConfig['non-feature-branches']); } foreach ($branches as $candidate) { // return directly, if branch is configured to be non-feature branch if ($candidate === $branch && preg_match('{^(' . $nonFeatureBranches . ')$}', $candidate)) { return $version; } // do not compare against other feature branches if ($candidate === $branch || !preg_match('{^(master|trunk|default|develop|\d+\..+)$}', $candidate, $match)) { continue; } $cmdLine = str_replace(array('%candidate%', '%branch%'), array($candidate, $branch), $scmCmdline); if (0 !== $this->process->execute($cmdLine, $output, $path)) { continue; } if (strlen($output) < $length) { $length = strlen($output); $version = $this->versionParser->normalizeBranch($candidate); if ('9999999-dev' === $version) { $version = 'dev-' . $match[1]; } } } } return $version; } private function guessSvnVersion(array $packageConfig, $path) { SvnUtil::cleanEnv(); // try to fetch current version from svn if (0 === $this->process->execute('svn info --xml', $output, $path)) { $trunkPath = isset($packageConfig['trunk-path']) ? preg_quote($packageConfig['trunk-path'], '#') : 'trunk'; $branchesPath = isset($packageConfig['branches-path']) ? preg_quote($packageConfig['branches-path'], '#') : 'branches'; $tagsPath = isset($packageConfig['tags-path']) ? preg_quote($packageConfig['tags-path'], '#') : 'tags'; $urlPattern = '#.*/(' . $trunkPath . '|(' . $branchesPath . '|' . $tagsPath . ')/(.*))#'; if (preg_match($urlPattern, $output, $matches)) { if (isset($matches[2]) && ($branchesPath === $matches[2] || $tagsPath === $matches[2])) { // we are in a branches path $version = $this->versionParser->normalizeBranch($matches[3]); if ('9999999-dev' === $version) { $version = 'dev-' . $matches[3]; } return array('version' => $version, 'commit' => ''); } $version = $this->versionParser->normalize(trim($matches[1])); return array('version' => $version, 'commit' => ''); } } } } composer-1.0.0-beta2/src/Composer/Package/Version/VersionParser.php000066400000000000000000000036651267577262200252350ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\Version; use Composer\Semver\VersionParser as SemverVersionParser; class VersionParser extends SemverVersionParser { private static $constraints = array(); /** * {@inheritDoc} */ public function parseConstraints($constraints) { if (!isset(self::$constraints[$constraints])) { self::$constraints[$constraints] = parent::parseConstraints($constraints); } return self::$constraints[$constraints]; } /** * Parses an array of strings representing package/version pairs. * * The parsing results in an array of arrays, each of which * contain a 'name' key with value and optionally a 'version' key with value. * * @param array $pairs a set of package/version pairs separated by ":", "=" or " " * * @return array[] array of arrays containing a name and (if provided) a version */ public function parseNameVersionPairs(array $pairs) { $pairs = array_values($pairs); $result = array(); for ($i = 0, $count = count($pairs); $i < $count; $i++) { $pair = preg_replace('{^([^=: ]+)[=: ](.*)$}', '$1 $2', trim($pairs[$i])); if (false === strpos($pair, ' ') && isset($pairs[$i + 1]) && false === strpos($pairs[$i + 1], '/')) { $pair .= ' '.$pairs[$i + 1]; $i++; } if (strpos($pair, ' ')) { list($name, $version) = explode(" ", $pair, 2); $result[] = array('name' => $name, 'version' => $version); } else { $result[] = array('name' => $pair); } } return $result; } } composer-1.0.0-beta2/src/Composer/Package/Version/VersionSelector.php000066400000000000000000000131751267577262200255560ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\Version; use Composer\DependencyResolver\Pool; use Composer\Package\BasePackage; use Composer\Package\PackageInterface; use Composer\Package\Loader\ArrayLoader; use Composer\Package\Dumper\ArrayDumper; use Composer\Semver\Constraint\Constraint; /** * Selects the best possible version for a package * * @author Ryan Weaver * @author Jordi Boggiano */ class VersionSelector { private $pool; private $parser; public function __construct(Pool $pool) { $this->pool = $pool; } /** * Given a package name and optional version, returns the latest PackageInterface * that matches. * * @param string $packageName * @param string $targetPackageVersion * @param string $targetPhpVersion * @param string $preferredStability * @return PackageInterface|bool */ public function findBestCandidate($packageName, $targetPackageVersion = null, $targetPhpVersion = null, $preferredStability = 'stable') { $constraint = $targetPackageVersion ? $this->getParser()->parseConstraints($targetPackageVersion) : null; $candidates = $this->pool->whatProvides(strtolower($packageName), $constraint, true); if ($targetPhpVersion) { $phpConstraint = new Constraint('==', $this->getParser()->normalize($targetPhpVersion)); $candidates = array_filter($candidates, function ($pkg) use ($phpConstraint) { $reqs = $pkg->getRequires(); return !isset($reqs['php']) || $reqs['php']->getConstraint()->matches($phpConstraint); }); } if (!$candidates) { return false; } // select highest version if we have many $package = reset($candidates); $minPriority = BasePackage::$stabilities[$preferredStability]; foreach ($candidates as $candidate) { $candidatePriority = $candidate->getStabilityPriority(); $currentPriority = $package->getStabilityPriority(); // candidate is less stable than our preferred stability, and we have a package that is more stable than it, so we skip it if ($minPriority < $candidatePriority && $currentPriority < $candidatePriority) { continue; } // candidate is more stable than our preferred stability, and current package is less stable than preferred stability, then we select the candidate always if ($minPriority >= $candidatePriority && $minPriority < $currentPriority) { $package = $candidate; continue; } // select highest version of the two if (version_compare($package->getVersion(), $candidate->getVersion(), '<')) { $package = $candidate; } } return $package; } /** * Given a concrete version, this returns a ~ constraint (when possible) * that should be used, for example, in composer.json. * * For example: * * 1.2.1 -> ^1.2 * * 1.2 -> ^1.2 * * v3.2.1 -> ^3.2 * * 2.0-beta.1 -> ^2.0@beta * * dev-master -> ^2.1@dev (dev version with alias) * * dev-master -> dev-master (dev versions are untouched) * * @param PackageInterface $package * @return string */ public function findRecommendedRequireVersion(PackageInterface $package) { $version = $package->getVersion(); if (!$package->isDev()) { return $this->transformVersion($version, $package->getPrettyVersion(), $package->getStability()); } $loader = new ArrayLoader($this->getParser()); $dumper = new ArrayDumper(); $extra = $loader->getBranchAlias($dumper->dump($package)); if ($extra) { $extra = preg_replace('{^(\d+\.\d+\.\d+)(\.9999999)-dev$}', '$1.0', $extra, -1, $count); if ($count) { $extra = str_replace('.9999999', '.0', $extra); return $this->transformVersion($extra, $extra, 'dev'); } } return $package->getPrettyVersion(); } private function transformVersion($version, $prettyVersion, $stability) { // attempt to transform 2.1.1 to 2.1 // this allows you to upgrade through minor versions $semanticVersionParts = explode('.', $version); // check to see if we have a semver-looking version if (count($semanticVersionParts) == 4 && preg_match('{^0\D?}', $semanticVersionParts[3])) { // remove the last parts (i.e. the patch version number and any extra) if ($semanticVersionParts[0] === '0') { unset($semanticVersionParts[3]); } else { unset($semanticVersionParts[2], $semanticVersionParts[3]); } $version = implode('.', $semanticVersionParts); } else { return $prettyVersion; } // append stability flag if not default if ($stability != 'stable') { $version .= '@'.$stability; } // 2.1 -> ^2.1 return '^' . $version; } private function getParser() { if ($this->parser === null) { $this->parser = new VersionParser(); } return $this->parser; } } composer-1.0.0-beta2/src/Composer/Plugin/000077500000000000000000000000001267577262200201665ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/Plugin/Capability/000077500000000000000000000000001267577262200222475ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/Plugin/Capability/Capability.php000066400000000000000000000007451267577262200250470ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Plugin\Capability; /** * Marker interface for Plugin capabilities. * Every new Capability which is added to the Plugin API must implement this interface. * * @api */ interface Capability { } composer-1.0.0-beta2/src/Composer/Plugin/Capable.php000066400000000000000000000022331267577262200222260ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Plugin; /** * Plugins which need to expose various implementations * of the Composer Plugin Capabilities must have their * declared Plugin class implementing this interface. * * @api */ interface Capable { /** * Method by which a Plugin announces its API implementations, through an array * with a special structure. * * The key must be a string, representing a fully qualified class/interface name * which Composer Plugin API exposes. * The value must be a string as well, representing the fully qualified class name * of the implementing class. * * @tutorial * * return array( * 'Composer\Plugin\Capability\CommandProvider' => 'My\CommandProvider', * 'Composer\Plugin\Capability\Validator' => 'My\Validator', * ); * * @return string[] */ public function getCapabilities(); } composer-1.0.0-beta2/src/Composer/Plugin/CommandEvent.php000066400000000000000000000036551267577262200232700ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Plugin; use Composer\EventDispatcher\Event; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; /** * An event for all commands. * * @author Nils Adermann */ class CommandEvent extends Event { /** * @var string */ private $commandName; /** * @var InputInterface */ private $input; /** * @var OutputInterface */ private $output; /** * Constructor. * * @param string $name The event name * @param string $commandName The command name * @param InputInterface $input * @param OutputInterface $output * @param array $args Arguments passed by the user * @param array $flags Optional flags to pass data not as argument */ public function __construct($name, $commandName, $input, $output, array $args = array(), array $flags = array()) { parent::__construct($name, $args, $flags); $this->commandName = $commandName; $this->input = $input; $this->output = $output; } /** * Returns the command input interface * * @return InputInterface */ public function getInput() { return $this->input; } /** * Retrieves the command output interface * * @return OutputInterface */ public function getOutput() { return $this->output; } /** * Retrieves the name of the command being run * * @return string */ public function getCommandName() { return $this->commandName; } } composer-1.0.0-beta2/src/Composer/Plugin/PluginEvents.php000066400000000000000000000015721267577262200233270ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Plugin; /** * The Plugin Events. * * @author Nils Adermann */ class PluginEvents { /** * The COMMAND event occurs as a command begins * * The event listener method receives a * Composer\Plugin\CommandEvent instance. * * @var string */ const COMMAND = 'command'; /** * The PRE_FILE_DOWNLOAD event occurs before downloading a file * * The event listener method receives a * Composer\Plugin\PreFileDownloadEvent instance. * * @var string */ const PRE_FILE_DOWNLOAD = 'pre-file-download'; } composer-1.0.0-beta2/src/Composer/Plugin/PluginInterface.php000066400000000000000000000014521267577262200237600ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Plugin; use Composer\Composer; use Composer\IO\IOInterface; /** * Plugin interface * * @author Nils Adermann */ interface PluginInterface { /** * Version number of the internal composer-plugin-api package * * @var string */ const PLUGIN_API_VERSION = '1.0.0'; /** * Apply plugin modifications to Composer * * @param Composer $composer * @param IOInterface $io */ public function activate(Composer $composer, IOInterface $io); } composer-1.0.0-beta2/src/Composer/Plugin/PluginManager.php000066400000000000000000000336241267577262200234400ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Plugin; use Composer\Composer; use Composer\EventDispatcher\EventSubscriberInterface; use Composer\IO\IOInterface; use Composer\Package\Package; use Composer\Package\Version\VersionParser; use Composer\Repository\RepositoryInterface; use Composer\Package\AliasPackage; use Composer\Package\PackageInterface; use Composer\Package\Link; use Composer\Semver\Constraint\Constraint; use Composer\DependencyResolver\Pool; use Composer\Plugin\Capability\Capability; /** * Plugin manager * * @author Nils Adermann * @author Jordi Boggiano */ class PluginManager { protected $composer; protected $io; protected $globalComposer; protected $versionParser; protected $disablePlugins = false; protected $plugins = array(); protected $registeredPlugins = array(); private static $classCounter = 0; /** * Initializes plugin manager * * @param IOInterface $io * @param Composer $composer * @param Composer $globalComposer * @param bool $disablePlugins */ public function __construct(IOInterface $io, Composer $composer, Composer $globalComposer = null, $disablePlugins = false) { $this->io = $io; $this->composer = $composer; $this->globalComposer = $globalComposer; $this->versionParser = new VersionParser(); $this->disablePlugins = $disablePlugins; } /** * Loads all plugins from currently installed plugin packages */ public function loadInstalledPlugins() { if ($this->disablePlugins) { return; } $repo = $this->composer->getRepositoryManager()->getLocalRepository(); $globalRepo = $this->globalComposer ? $this->globalComposer->getRepositoryManager()->getLocalRepository() : null; if ($repo) { $this->loadRepository($repo); } if ($globalRepo) { $this->loadRepository($globalRepo); } } /** * Gets all currently active plugin instances * * @return array plugins */ public function getPlugins() { return $this->plugins; } /** * Register a plugin package, activate it etc. * * If it's of type composer-installer it is registered as an installer * instead for BC * * @param PackageInterface $package * @param bool $failOnMissingClasses By default this silently skips plugins that can not be found, but if set to true it fails with an exception * * @throws \UnexpectedValueException */ public function registerPackage(PackageInterface $package, $failOnMissingClasses = false) { if ($this->disablePlugins) { return; } if ($package->getType() === 'composer-plugin') { $requiresComposer = null; foreach ($package->getRequires() as $link) { /** @var Link $link */ if ('composer-plugin-api' === $link->getTarget()) { $requiresComposer = $link->getConstraint(); break; } } if (!$requiresComposer) { throw new \RuntimeException("Plugin ".$package->getName()." is missing a require statement for a version of the composer-plugin-api package."); } $currentPluginApiVersion = $this->getPluginApiVersion(); $currentPluginApiConstraint = new Constraint('==', $this->versionParser->normalize($currentPluginApiVersion)); if ($requiresComposer->getPrettyString() === '1.0.0' && $this->getPluginApiVersion() === '1.0.0') { $this->io->writeError('The "' . $package->getName() . '" plugin requires composer-plugin-api 1.0.0, this *WILL* break in the future and it should be fixed ASAP (require ^1.0 for example).'); } elseif (!$requiresComposer->matches($currentPluginApiConstraint)) { $this->io->writeError('The "' . $package->getName() . '" plugin was skipped because it requires a Plugin API version ("' . $requiresComposer->getPrettyString() . '") that does not match your Composer installation ("' . $currentPluginApiVersion . '"). You may need to run composer update with the "--no-plugins" option.'); return; } } $oldInstallerPlugin = ($package->getType() === 'composer-installer'); if (in_array($package->getName(), $this->registeredPlugins)) { return; } $extra = $package->getExtra(); if (empty($extra['class'])) { throw new \UnexpectedValueException('Error while installing '.$package->getPrettyName().', composer-plugin packages should have a class defined in their extra key to be usable.'); } $classes = is_array($extra['class']) ? $extra['class'] : array($extra['class']); $localRepo = $this->composer->getRepositoryManager()->getLocalRepository(); $globalRepo = $this->globalComposer ? $this->globalComposer->getRepositoryManager()->getLocalRepository() : null; $pool = new Pool('dev'); $pool->addRepository($localRepo); if ($globalRepo) { $pool->addRepository($globalRepo); } $autoloadPackages = array($package->getName() => $package); $autoloadPackages = $this->collectDependencies($pool, $autoloadPackages, $package); $generator = $this->composer->getAutoloadGenerator(); $autoloads = array(); foreach ($autoloadPackages as $autoloadPackage) { $downloadPath = $this->getInstallPath($autoloadPackage, ($globalRepo && $globalRepo->hasPackage($autoloadPackage))); $autoloads[] = array($autoloadPackage, $downloadPath); } $map = $generator->parseAutoloads($autoloads, new Package('dummy', '1.0.0.0', '1.0.0')); $classLoader = $generator->createLoader($map); $classLoader->register(); foreach ($classes as $class) { if (class_exists($class, false)) { $path = $classLoader->findFile($class); $code = file_get_contents($path); $code = preg_replace('{^((?:final\s+)?(?:\s*))class\s+(\S+)}mi', '$1class $2_composer_tmp'.self::$classCounter, $code); $code = str_replace('__FILE__', var_export($path, true), $code); $code = str_replace('__DIR__', var_export(dirname($path), true), $code); $code = str_replace('__CLASS__', var_export($class, true), $code); eval('?>'.$code); $class .= '_composer_tmp'.self::$classCounter; self::$classCounter++; } if ($oldInstallerPlugin) { $installer = new $class($this->io, $this->composer); $this->composer->getInstallationManager()->addInstaller($installer); } elseif (class_exists($class)) { $plugin = new $class(); $this->addPlugin($plugin); $this->registeredPlugins[] = $package->getName(); } elseif ($failOnMissingClasses) { throw new \UnexpectedValueException('Plugin '.$package->getName().' could not be initialized, class not found: '.$class); } } } /** * Returns the version of the internal composer-plugin-api package. * * @return string */ protected function getPluginApiVersion() { return PluginInterface::PLUGIN_API_VERSION; } /** * Adds a plugin, activates it and registers it with the event dispatcher * * @param PluginInterface $plugin plugin instance */ private function addPlugin(PluginInterface $plugin) { $this->io->writeError('Loading plugin '.get_class($plugin), true, IOInterface::DEBUG); $this->plugins[] = $plugin; $plugin->activate($this->composer, $this->io); if ($plugin instanceof EventSubscriberInterface) { $this->composer->getEventDispatcher()->addSubscriber($plugin); } } /** * Load all plugins and installers from a repository * * Note that plugins in the specified repository that rely on events that * have fired prior to loading will be missed. This means you likely want to * call this method as early as possible. * * @param RepositoryInterface $repo Repository to scan for plugins to install * * @throws \RuntimeException */ private function loadRepository(RepositoryInterface $repo) { foreach ($repo->getPackages() as $package) { /** @var PackageInterface $package */ if ($package instanceof AliasPackage) { continue; } if ('composer-plugin' === $package->getType()) { $this->registerPackage($package); // Backward compatibility } elseif ('composer-installer' === $package->getType()) { $this->registerPackage($package); } } } /** * Recursively generates a map of package names to packages for all deps * * @param Pool $pool Package pool of installed packages * @param array $collected Current state of the map for recursion * @param PackageInterface $package The package to analyze * * @return array Map of package names to packages */ private function collectDependencies(Pool $pool, array $collected, PackageInterface $package) { $requires = array_merge( $package->getRequires(), $package->getDevRequires() ); foreach ($requires as $requireLink) { $requiredPackage = $this->lookupInstalledPackage($pool, $requireLink); if ($requiredPackage && !isset($collected[$requiredPackage->getName()])) { $collected[$requiredPackage->getName()] = $requiredPackage; $collected = $this->collectDependencies($pool, $collected, $requiredPackage); } } return $collected; } /** * Resolves a package link to a package in the installed pool * * Since dependencies are already installed this should always find one. * * @param Pool $pool Pool of installed packages only * @param Link $link Package link to look up * * @return PackageInterface|null The found package */ private function lookupInstalledPackage(Pool $pool, Link $link) { $packages = $pool->whatProvides($link->getTarget(), $link->getConstraint()); return (!empty($packages)) ? $packages[0] : null; } /** * Retrieves the path a package is installed to. * * @param PackageInterface $package * @param bool $global Whether this is a global package * * @return string Install path */ private function getInstallPath(PackageInterface $package, $global = false) { if (!$global) { return $this->composer->getInstallationManager()->getInstallPath($package); } return $this->globalComposer->getInstallationManager()->getInstallPath($package); } /** * @param PluginInterface $plugin * @param string $capability * @throws \RuntimeException On empty or non-string implementation class name value * @return null|string The fully qualified class of the implementation or null if Plugin is not of Capable type or does not provide it */ protected function getCapabilityImplementationClassName(PluginInterface $plugin, $capability) { if (!($plugin instanceof Capable)) { return null; } $capabilities = (array) $plugin->getCapabilities(); if (!empty($capabilities[$capability]) && is_string($capabilities[$capability]) && trim($capabilities[$capability])) { return trim($capabilities[$capability]); } if ( array_key_exists($capability, $capabilities) && (empty($capabilities[$capability]) || !is_string($capabilities[$capability]) || !trim($capabilities[$capability])) ) { throw new \UnexpectedValueException('Plugin '.get_class($plugin).' provided invalid capability class name(s), got '.var_export($capabilities[$capability], 1)); } } /** * @param PluginInterface $plugin * @param string $capabilityClassName The fully qualified name of the API interface which the plugin may provide * an implementation of. * @param array $ctorArgs Arguments passed to Capability's constructor. * Keeping it an array will allow future values to be passed w\o changing the signature. * @return null|Capability */ public function getPluginCapability(PluginInterface $plugin, $capabilityClassName, array $ctorArgs = array()) { if ($capabilityClass = $this->getCapabilityImplementationClassName($plugin, $capabilityClassName)) { if (!class_exists($capabilityClass)) { throw new \RuntimeException("Cannot instantiate Capability, as class $capabilityClass from plugin ".get_class($plugin)." does not exist."); } $capabilityObj = new $capabilityClass($ctorArgs); // FIXME these could use is_a and do the check *before* instantiating once drop support for php<5.3.9 if (!$capabilityObj instanceof Capability || !$capabilityObj instanceof $capabilityClassName) { throw new \RuntimeException( 'Class ' . $capabilityClass . ' must implement both Composer\Plugin\Capability\Capability and '. $capabilityClassName . '.' ); } return $capabilityObj; } } } composer-1.0.0-beta2/src/Composer/Plugin/PreFileDownloadEvent.php000066400000000000000000000030671267577262200247250ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Plugin; use Composer\EventDispatcher\Event; use Composer\Util\RemoteFilesystem; /** * The pre file download event. * * @author Nils Adermann */ class PreFileDownloadEvent extends Event { /** * @var RemoteFilesystem */ private $rfs; /** * @var string */ private $processedUrl; /** * Constructor. * * @param string $name The event name * @param RemoteFilesystem $rfs * @param string $processedUrl */ public function __construct($name, RemoteFilesystem $rfs, $processedUrl) { parent::__construct($name); $this->rfs = $rfs; $this->processedUrl = $processedUrl; } /** * Returns the remote filesystem * * @return RemoteFilesystem */ public function getRemoteFilesystem() { return $this->rfs; } /** * Sets the remote filesystem * * @param RemoteFilesystem $rfs */ public function setRemoteFilesystem(RemoteFilesystem $rfs) { $this->rfs = $rfs; } /** * Retrieves the processed URL this remote filesystem will be used for * * @return string */ public function getProcessedUrl() { return $this->processedUrl; } } composer-1.0.0-beta2/src/Composer/Repository/000077500000000000000000000000001267577262200211075ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/Repository/ArrayRepository.php000066400000000000000000000126041267577262200250010ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; use Composer\Package\AliasPackage; use Composer\Package\PackageInterface; use Composer\Package\CompletePackageInterface; use Composer\Package\Version\VersionParser; use Composer\Semver\Constraint\ConstraintInterface; use Composer\Semver\Constraint\Constraint; /** * A repository implementation that simply stores packages in an array * * @author Nils Adermann */ class ArrayRepository extends BaseRepository { /** @var PackageInterface[] */ protected $packages; public function __construct(array $packages = array()) { foreach ($packages as $package) { $this->addPackage($package); } } /** * {@inheritDoc} */ public function findPackage($name, $constraint) { $name = strtolower($name); if (!$constraint instanceof ConstraintInterface) { $versionParser = new VersionParser(); $constraint = $versionParser->parseConstraints($constraint); } foreach ($this->getPackages() as $package) { if ($name === $package->getName()) { $pkgConstraint = new Constraint('==', $package->getVersion()); if ($constraint->matches($pkgConstraint)) { return $package; } } } } /** * {@inheritDoc} */ public function findPackages($name, $constraint = null) { // normalize name $name = strtolower($name); $packages = array(); if (null !== $constraint && !$constraint instanceof ConstraintInterface) { $versionParser = new VersionParser(); $constraint = $versionParser->parseConstraints($constraint); } foreach ($this->getPackages() as $package) { if ($name === $package->getName()) { $pkgConstraint = new Constraint('==', $package->getVersion()); if (null === $constraint || $constraint->matches($pkgConstraint)) { $packages[] = $package; } } } return $packages; } /** * {@inheritDoc} */ public function search($query, $mode = 0) { $regex = '{(?:'.implode('|', preg_split('{\s+}', $query)).')}i'; $matches = array(); foreach ($this->getPackages() as $package) { $name = $package->getName(); if (isset($matches[$name])) { continue; } if (preg_match($regex, $name) || ($mode === self::SEARCH_FULLTEXT && $package instanceof CompletePackageInterface && preg_match($regex, implode(' ', (array) $package->getKeywords()) . ' ' . $package->getDescription())) ) { $matches[$name] = array( 'name' => $package->getPrettyName(), 'description' => $package->getDescription(), ); } } return array_values($matches); } /** * {@inheritDoc} */ public function hasPackage(PackageInterface $package) { $packageId = $package->getUniqueName(); foreach ($this->getPackages() as $repoPackage) { if ($packageId === $repoPackage->getUniqueName()) { return true; } } return false; } /** * Adds a new package to the repository * * @param PackageInterface $package */ public function addPackage(PackageInterface $package) { if (null === $this->packages) { $this->initialize(); } $package->setRepository($this); $this->packages[] = $package; if ($package instanceof AliasPackage) { $aliasedPackage = $package->getAliasOf(); if (null === $aliasedPackage->getRepository()) { $this->addPackage($aliasedPackage); } } } protected function createAliasPackage(PackageInterface $package, $alias, $prettyAlias) { return new AliasPackage($package instanceof AliasPackage ? $package->getAliasOf() : $package, $alias, $prettyAlias); } /** * Removes package from repository. * * @param PackageInterface $package package instance */ public function removePackage(PackageInterface $package) { $packageId = $package->getUniqueName(); foreach ($this->getPackages() as $key => $repoPackage) { if ($packageId === $repoPackage->getUniqueName()) { array_splice($this->packages, $key, 1); return; } } } /** * {@inheritDoc} */ public function getPackages() { if (null === $this->packages) { $this->initialize(); } return $this->packages; } /** * Returns the number of packages in this repository * * @return int Number of packages */ public function count() { return count($this->packages); } /** * Initializes the packages array. Mostly meant as an extension point. */ protected function initialize() { $this->packages = array(); } } composer-1.0.0-beta2/src/Composer/Repository/ArtifactRepository.php000066400000000000000000000115661267577262200254660ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; use Composer\IO\IOInterface; use Composer\Json\JsonFile; use Composer\Package\Loader\ArrayLoader; use Composer\Package\Loader\LoaderInterface; /** * @author Serge Smertin */ class ArtifactRepository extends ArrayRepository implements ConfigurableRepositoryInterface { /** @var LoaderInterface */ protected $loader; protected $lookup; protected $repoConfig; public function __construct(array $repoConfig, IOInterface $io) { parent::__construct(); if (!extension_loaded('zip')) { throw new \RuntimeException('The artifact repository requires PHP\'s zip extension'); } $this->loader = new ArrayLoader(); $this->lookup = $repoConfig['url']; $this->io = $io; $this->repoConfig = $repoConfig; } public function getRepoConfig() { return $this->repoConfig; } protected function initialize() { parent::initialize(); $this->scanDirectory($this->lookup); } private function scanDirectory($path) { $io = $this->io; $directory = new \RecursiveDirectoryIterator($path, \RecursiveDirectoryIterator::FOLLOW_SYMLINKS); $iterator = new \RecursiveIteratorIterator($directory); $regex = new \RegexIterator($iterator, '/^.+\.(zip|phar)$/i'); foreach ($regex as $file) { /* @var $file \SplFileInfo */ if (!$file->isFile()) { continue; } $package = $this->getComposerInformation($file); if (!$package) { $io->writeError("File {$file->getBasename()} doesn't seem to hold a package", true, IOInterface::VERBOSE); continue; } $template = 'Found package %s (%s) in file %s'; $io->writeError(sprintf($template, $package->getName(), $package->getPrettyVersion(), $file->getBasename()), true, IOInterface::VERBOSE); $this->addPackage($package); } } /** * Find a file by name, returning the one that has the shortest path. * * @param \ZipArchive $zip * @param $filename * @return bool|int */ private function locateFile(\ZipArchive $zip, $filename) { $indexOfShortestMatch = false; $lengthOfShortestMatch = -1; for ($i = 0; $i < $zip->numFiles; $i++) { $stat = $zip->statIndex($i); if (strcmp(basename($stat['name']), $filename) === 0) { $directoryName = dirname($stat['name']); if ($directoryName == '.') { //if composer.json is in root directory //it has to be the one to use. return $i; } if (strpos($directoryName, '\\') !== false || strpos($directoryName, '/') !== false) { //composer.json files below first directory are rejected continue; } $length = strlen($stat['name']); if ($indexOfShortestMatch == false || $length < $lengthOfShortestMatch) { //Check it's not a directory. $contents = $zip->getFromIndex($i); if ($contents !== false) { $indexOfShortestMatch = $i; $lengthOfShortestMatch = $length; } } } } return $indexOfShortestMatch; } private function getComposerInformation(\SplFileInfo $file) { $zip = new \ZipArchive(); $zip->open($file->getPathname()); if (0 == $zip->numFiles) { return false; } $foundFileIndex = $this->locateFile($zip, 'composer.json'); if (false === $foundFileIndex) { return false; } $configurationFileName = $zip->getNameIndex($foundFileIndex); $composerFile = "zip://{$file->getPathname()}#$configurationFileName"; $json = file_get_contents($composerFile); $package = JsonFile::parseJson($json, $composerFile); $package['dist'] = array( 'type' => 'zip', 'url' => strtr($file->getPathname(), '\\', '/'), 'shasum' => sha1_file($file->getRealPath()), ); try { $package = $this->loader->load($package); } catch (\UnexpectedValueException $e) { throw new \UnexpectedValueException('Failed loading package in '.$file.': '.$e->getMessage(), 0, $e); } return $package; } } composer-1.0.0-beta2/src/Composer/Repository/BaseRepository.php000066400000000000000000000110571267577262200245760ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; use Composer\Package\RootPackageInterface; use Composer\Semver\Constraint\ConstraintInterface; use Composer\Semver\Constraint\Constraint; /** * Common ancestor class for generic repository functionality. * * @author Niels Keurentjes */ abstract class BaseRepository implements RepositoryInterface { /** * Returns a list of links causing the requested needle packages to be installed, as an associative array with the * dependent's name as key, and an array containing in order the PackageInterface and Link describing the relationship * as values. If recursive lookup was requested a third value is returned containing an identically formed array up * to the root package. That third value will be false in case a circular recursion was detected. * * @param string|string[] $needle The package name(s) to inspect. * @param ConstraintInterface|null $constraint Optional constraint to filter by. * @param bool $invert Whether to invert matches to discover reasons for the package *NOT* to be installed. * @param bool $recurse Whether to recursively expand the requirement tree up to the root package. * @param string[] $packagesFound Used internally when recurring * @return array An associative array of arrays as described above. */ public function getDependents($needle, $constraint = null, $invert = false, $recurse = true, $packagesFound = null) { $needles = (array) $needle; $results = array(); // initialize the array with the needles before any recursion occurs if (null === $packagesFound) { $packagesFound = $needles; } // Loop over all currently installed packages. foreach ($this->getPackages() as $package) { $links = $package->getRequires(); // each loop needs its own "tree" as we want to show the complete dependent set of every needle // without warning all the time about finding circular deps $packagesInTree = $packagesFound; // Replacements are considered valid reasons for a package to be installed during forward resolution if (!$invert) { $links += $package->getReplaces(); } // Require-dev is only relevant for the root package if ($package instanceof RootPackageInterface) { $links += $package->getDevRequires(); } // Cross-reference all discovered links to the needles foreach ($links as $link) { foreach ($needles as $needle) { if ($link->getTarget() === $needle) { if (is_null($constraint) || (($link->getConstraint()->matches($constraint) === !$invert))) { // already displayed this node's dependencies, cutting short if (in_array($link->getSource(), $packagesInTree)) { $results[$link->getSource()] = array($package, $link, false); continue; } $packagesInTree[] = $link->getSource(); $dependents = $recurse ? $this->getDependents($link->getSource(), null, false, true, $packagesInTree) : array(); $results[$link->getSource()] = array($package, $link, $dependents); } } } } // When inverting, we need to check for conflicts of the needles against installed packages if ($invert && in_array($package->getName(), $needles)) { foreach ($package->getConflicts() as $link) { foreach ($this->findPackages($link->getTarget()) as $pkg) { $version = new Constraint('=', $pkg->getVersion()); if ($link->getConstraint()->matches($version) === $invert) { $results[$package->getName()] = array($package, $link, false); } } } } } ksort($results); return $results; } } composer-1.0.0-beta2/src/Composer/Repository/ComposerRepository.php000066400000000000000000000655321267577262200255220ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; use Composer\Package\Loader\ArrayLoader; use Composer\Package\PackageInterface; use Composer\Package\AliasPackage; use Composer\Package\Version\VersionParser; use Composer\DependencyResolver\Pool; use Composer\Json\JsonFile; use Composer\Cache; use Composer\Config; use Composer\Factory; use Composer\IO\IOInterface; use Composer\Util\RemoteFilesystem; use Composer\Plugin\PluginEvents; use Composer\Plugin\PreFileDownloadEvent; use Composer\EventDispatcher\EventDispatcher; use Composer\Downloader\TransportException; use Composer\Semver\Constraint\ConstraintInterface; use Composer\Semver\Constraint\Constraint; /** * @author Jordi Boggiano */ class ComposerRepository extends ArrayRepository implements ConfigurableRepositoryInterface { protected $config; protected $repoConfig; protected $options; protected $url; protected $baseUrl; protected $io; protected $rfs; protected $cache; protected $notifyUrl; protected $searchUrl; protected $hasProviders = false; protected $providersUrl; protected $lazyProvidersUrl; protected $providerListing; protected $providers = array(); protected $providersByUid = array(); protected $loader; protected $rootAliases; protected $allowSslDowngrade = false; protected $eventDispatcher; protected $sourceMirrors; protected $distMirrors; private $degradedMode = false; private $rootData; public function __construct(array $repoConfig, IOInterface $io, Config $config, EventDispatcher $eventDispatcher = null, RemoteFilesystem $rfs = null) { parent::__construct(); if (!preg_match('{^[\w.]+\??://}', $repoConfig['url'])) { // assume http as the default protocol $repoConfig['url'] = 'http://'.$repoConfig['url']; } $repoConfig['url'] = rtrim($repoConfig['url'], '/'); if ('https?' === substr($repoConfig['url'], 0, 6)) { $repoConfig['url'] = (extension_loaded('openssl') ? 'https' : 'http') . substr($repoConfig['url'], 6); } $urlBits = parse_url($repoConfig['url']); if ($urlBits === false || empty($urlBits['scheme'])) { throw new \UnexpectedValueException('Invalid url given for Composer repository: '.$repoConfig['url']); } if (!isset($repoConfig['options'])) { $repoConfig['options'] = array(); } if (isset($repoConfig['allow_ssl_downgrade']) && true === $repoConfig['allow_ssl_downgrade']) { $this->allowSslDowngrade = true; } $this->config = $config; $this->options = $repoConfig['options']; $this->url = $repoConfig['url']; $this->baseUrl = rtrim(preg_replace('{^(.*)(?:/[^/\\]+.json)?(?:[?#].*)?$}', '$1', $this->url), '/'); $this->io = $io; $this->cache = new Cache($io, $config->get('cache-repo-dir').'/'.preg_replace('{[^a-z0-9.]}i', '-', $this->url), 'a-z0-9.$'); $this->loader = new ArrayLoader(); if ($rfs && $this->options) { $rfs = clone $rfs; $rfs->setOptions($this->options); } $this->rfs = $rfs ?: Factory::createRemoteFilesystem($this->io, $this->config, $this->options); $this->eventDispatcher = $eventDispatcher; $this->repoConfig = $repoConfig; } public function getRepoConfig() { return $this->repoConfig; } public function setRootAliases(array $rootAliases) { $this->rootAliases = $rootAliases; } /** * {@inheritDoc} */ public function findPackage($name, $constraint) { if (!$this->hasProviders()) { return parent::findPackage($name, $constraint); } $name = strtolower($name); if (!$constraint instanceof ConstraintInterface) { $versionParser = new VersionParser(); $constraint = $versionParser->parseConstraints($constraint); } foreach ($this->getProviderNames() as $providerName) { if ($name === $providerName) { $packages = $this->whatProvides(new Pool('dev'), $providerName); foreach ($packages as $package) { if ($name === $package->getName()) { $pkgConstraint = new Constraint('==', $package->getVersion()); if ($constraint->matches($pkgConstraint)) { return $package; } } } break; } } } /** * {@inheritDoc} */ public function findPackages($name, $constraint = null) { if (!$this->hasProviders()) { return parent::findPackages($name, $constraint); } // normalize name $name = strtolower($name); if (null !== $constraint && !$constraint instanceof ConstraintInterface) { $versionParser = new VersionParser(); $constraint = $versionParser->parseConstraints($constraint); } $packages = array(); foreach ($this->getProviderNames() as $providerName) { if ($name === $providerName) { $candidates = $this->whatProvides(new Pool('dev'), $providerName); foreach ($candidates as $package) { if ($name === $package->getName()) { $pkgConstraint = new Constraint('==', $package->getVersion()); if (null === $constraint || $constraint->matches($pkgConstraint)) { $packages[] = $package; } } } break; } } return $packages; } public function getPackages() { if ($this->hasProviders()) { throw new \LogicException('Composer repositories that have providers can not load the complete list of packages, use getProviderNames instead.'); } return parent::getPackages(); } /** * {@inheritDoc} */ public function search($query, $mode = 0) { $this->loadRootServerFile(); if ($this->searchUrl && $mode === self::SEARCH_FULLTEXT) { $url = str_replace('%query%', $query, $this->searchUrl); $hostname = parse_url($url, PHP_URL_HOST) ?: $url; $json = $this->rfs->getContents($hostname, $url, false); $results = JsonFile::parseJson($json, $url); return $results['results']; } if ($this->hasProviders()) { $results = array(); $regex = '{(?:'.implode('|', preg_split('{\s+}', $query)).')}i'; foreach ($this->getProviderNames() as $name) { if (preg_match($regex, $name)) { $results[] = array('name' => $name); } } return $results; } return parent::search($query, $mode); } public function getProviderNames() { $this->loadRootServerFile(); if (null === $this->providerListing) { $this->loadProviderListings($this->loadRootServerFile()); } if ($this->lazyProvidersUrl) { // Can not determine list of provided packages for lazy repositories return array(); } if ($this->providersUrl) { return array_keys($this->providerListing); } return array(); } protected function configurePackageTransportOptions(PackageInterface $package) { foreach ($package->getDistUrls() as $url) { if (strpos($url, $this->baseUrl) === 0) { $package->setTransportOptions($this->options); return; } } } public function hasProviders() { $this->loadRootServerFile(); return $this->hasProviders; } public function resetPackageIds() { foreach ($this->providersByUid as $package) { if ($package instanceof AliasPackage) { $package->getAliasOf()->setId(-1); } $package->setId(-1); } } public function whatProvides(Pool $pool, $name) { if (isset($this->providers[$name])) { return $this->providers[$name]; } // skip platform packages if (preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $name) || '__root__' === $name) { return array(); } if (null === $this->providerListing) { $this->loadProviderListings($this->loadRootServerFile()); } $useLastModifiedCheck = false; if ($this->lazyProvidersUrl && !isset($this->providerListing[$name])) { $hash = null; $url = str_replace('%package%', $name, $this->lazyProvidersUrl); $cacheKey = 'provider-'.strtr($name, '/', '$').'.json'; $useLastModifiedCheck = true; } elseif ($this->providersUrl) { // package does not exist in this repo if (!isset($this->providerListing[$name])) { return array(); } $hash = $this->providerListing[$name]['sha256']; $url = str_replace(array('%package%', '%hash%'), array($name, $hash), $this->providersUrl); $cacheKey = 'provider-'.strtr($name, '/', '$').'.json'; } else { return array(); } $packages = null; if ($cacheKey) { if (!$useLastModifiedCheck && $hash && $this->cache->sha256($cacheKey) === $hash) { $packages = json_decode($this->cache->read($cacheKey), true); } elseif ($useLastModifiedCheck) { if ($contents = $this->cache->read($cacheKey)) { $contents = json_decode($contents, true); if (isset($contents['last-modified'])) { $response = $this->fetchFileIfLastModified($url, $cacheKey, $contents['last-modified']); if (true === $response) { $packages = $contents; } elseif ($response) { $packages = $response; } } } } } if (!$packages) { try { $packages = $this->fetchFile($url, $cacheKey, $hash, $useLastModifiedCheck); } catch (TransportException $e) { // 404s are acceptable for lazy provider repos if ($e->getStatusCode() === 404 && $this->lazyProvidersUrl) { $packages = array('packages' => array()); } else { throw $e; } } } $this->providers[$name] = array(); foreach ($packages['packages'] as $versions) { foreach ($versions as $version) { // avoid loading the same objects twice if (isset($this->providersByUid[$version['uid']])) { // skip if already assigned if (!isset($this->providers[$name][$version['uid']])) { // expand alias in two packages if ($this->providersByUid[$version['uid']] instanceof AliasPackage) { $this->providers[$name][$version['uid']] = $this->providersByUid[$version['uid']]->getAliasOf(); $this->providers[$name][$version['uid'].'-alias'] = $this->providersByUid[$version['uid']]; } else { $this->providers[$name][$version['uid']] = $this->providersByUid[$version['uid']]; } // check for root aliases if (isset($this->providersByUid[$version['uid'].'-root'])) { $this->providers[$name][$version['uid'].'-root'] = $this->providersByUid[$version['uid'].'-root']; } } } else { if (!$pool->isPackageAcceptable(strtolower($version['name']), VersionParser::parseStability($version['version']))) { continue; } // load acceptable packages in the providers $package = $this->createPackage($version, 'Composer\Package\CompletePackage'); $package->setRepository($this); if ($package instanceof AliasPackage) { $aliased = $package->getAliasOf(); $aliased->setRepository($this); $this->providers[$name][$version['uid']] = $aliased; $this->providers[$name][$version['uid'].'-alias'] = $package; // override provider with its alias so it can be expanded in the if block above $this->providersByUid[$version['uid']] = $package; } else { $this->providers[$name][$version['uid']] = $package; $this->providersByUid[$version['uid']] = $package; } // handle root package aliases unset($rootAliasData); if (isset($this->rootAliases[$package->getName()][$package->getVersion()])) { $rootAliasData = $this->rootAliases[$package->getName()][$package->getVersion()]; } elseif ($package instanceof AliasPackage && isset($this->rootAliases[$package->getName()][$package->getAliasOf()->getVersion()])) { $rootAliasData = $this->rootAliases[$package->getName()][$package->getAliasOf()->getVersion()]; } if (isset($rootAliasData)) { $alias = $this->createAliasPackage($package, $rootAliasData['alias_normalized'], $rootAliasData['alias']); $alias->setRepository($this); $this->providers[$name][$version['uid'].'-root'] = $alias; $this->providersByUid[$version['uid'].'-root'] = $alias; } } } } return $this->providers[$name]; } /** * {@inheritDoc} */ protected function initialize() { parent::initialize(); $repoData = $this->loadDataFromServer(); foreach ($repoData as $package) { $this->addPackage($this->createPackage($package, 'Composer\Package\CompletePackage')); } } /** * Adds a new package to the repository * * @param PackageInterface $package */ public function addPackage(PackageInterface $package) { parent::addPackage($package); $this->configurePackageTransportOptions($package); } protected function loadRootServerFile() { if (null !== $this->rootData) { return $this->rootData; } if (!extension_loaded('openssl') && 'https' === substr($this->url, 0, 5)) { throw new \RuntimeException('You must enable the openssl extension in your php.ini to load information from '.$this->url); } $jsonUrlParts = parse_url($this->url); if (isset($jsonUrlParts['path']) && false !== strpos($jsonUrlParts['path'], '.json')) { $jsonUrl = $this->url; } else { $jsonUrl = $this->url . '/packages.json'; } $data = $this->fetchFile($jsonUrl, 'packages.json'); if (!empty($data['notify-batch'])) { $this->notifyUrl = $this->canonicalizeUrl($data['notify-batch']); } elseif (!empty($data['notify'])) { $this->notifyUrl = $this->canonicalizeUrl($data['notify']); } if (!empty($data['search'])) { $this->searchUrl = $this->canonicalizeUrl($data['search']); } if (!empty($data['mirrors'])) { foreach ($data['mirrors'] as $mirror) { if (!empty($mirror['git-url'])) { $this->sourceMirrors['git'][] = array('url' => $mirror['git-url'], 'preferred' => !empty($mirror['preferred'])); } if (!empty($mirror['hg-url'])) { $this->sourceMirrors['hg'][] = array('url' => $mirror['hg-url'], 'preferred' => !empty($mirror['preferred'])); } if (!empty($mirror['dist-url'])) { $this->distMirrors[] = array('url' => $mirror['dist-url'], 'preferred' => !empty($mirror['preferred'])); } } } if (!empty($data['warning'])) { $this->io->writeError('Warning from '.$this->url.': '.$data['warning'].''); } if (!empty($data['providers-lazy-url'])) { $this->lazyProvidersUrl = $this->canonicalizeUrl($data['providers-lazy-url']); $this->hasProviders = true; } if ($this->allowSslDowngrade) { $this->url = str_replace('https://', 'http://', $this->url); $this->baseUrl = str_replace('https://', 'http://', $this->baseUrl); } if (!empty($data['providers-url'])) { $this->providersUrl = $this->canonicalizeUrl($data['providers-url']); $this->hasProviders = true; } if (!empty($data['providers']) || !empty($data['providers-includes'])) { $this->hasProviders = true; } // force values for packagist if (preg_match('{^https?://packagist.org/?$}i', $this->url) && !empty($this->repoConfig['force-lazy-providers'])) { $this->url = 'https://packagist.org'; $this->baseUrl = 'https://packagist.org'; $this->lazyProvidersUrl = $this->canonicalizeUrl('https://packagist.org/p/%package%.json'); $this->providersUrl = null; } elseif (!empty($this->repoConfig['force-lazy-providers'])) { $this->lazyProvidersUrl = $this->canonicalizeUrl('/p/%package%.json'); $this->providersUrl = null; } return $this->rootData = $data; } protected function canonicalizeUrl($url) { if ('/' === $url[0]) { return preg_replace('{(https?://[^/]+).*}i', '$1' . $url, $this->url); } return $url; } protected function loadDataFromServer() { $data = $this->loadRootServerFile(); return $this->loadIncludes($data); } protected function loadProviderListings($data) { if (isset($data['providers'])) { if (!is_array($this->providerListing)) { $this->providerListing = array(); } $this->providerListing = array_merge($this->providerListing, $data['providers']); } if ($this->providersUrl && isset($data['provider-includes'])) { $includes = $data['provider-includes']; foreach ($includes as $include => $metadata) { $url = $this->baseUrl . '/' . str_replace('%hash%', $metadata['sha256'], $include); $cacheKey = str_replace(array('%hash%','$'), '', $include); if ($this->cache->sha256($cacheKey) === $metadata['sha256']) { $includedData = json_decode($this->cache->read($cacheKey), true); } else { $includedData = $this->fetchFile($url, $cacheKey, $metadata['sha256']); } $this->loadProviderListings($includedData); } } } protected function loadIncludes($data) { $packages = array(); // legacy repo handling if (!isset($data['packages']) && !isset($data['includes'])) { foreach ($data as $pkg) { foreach ($pkg['versions'] as $metadata) { $packages[] = $metadata; } } return $packages; } if (isset($data['packages'])) { foreach ($data['packages'] as $package => $versions) { foreach ($versions as $version => $metadata) { $packages[] = $metadata; } } } if (isset($data['includes'])) { foreach ($data['includes'] as $include => $metadata) { if ($this->cache->sha1($include) === $metadata['sha1']) { $includedData = json_decode($this->cache->read($include), true); } else { $includedData = $this->fetchFile($include); } $packages = array_merge($packages, $this->loadIncludes($includedData)); } } return $packages; } protected function createPackage(array $data, $class = 'Composer\Package\CompletePackage') { try { if (!isset($data['notification-url'])) { $data['notification-url'] = $this->notifyUrl; } $package = $this->loader->load($data, $class); if (isset($this->sourceMirrors[$package->getSourceType()])) { $package->setSourceMirrors($this->sourceMirrors[$package->getSourceType()]); } $package->setDistMirrors($this->distMirrors); $this->configurePackageTransportOptions($package); return $package; } catch (\Exception $e) { throw new \RuntimeException('Could not load package '.(isset($data['name']) ? $data['name'] : json_encode($data)).' in '.$this->url.': ['.get_class($e).'] '.$e->getMessage(), 0, $e); } } protected function fetchFile($filename, $cacheKey = null, $sha256 = null, $storeLastModifiedTime = false) { if (null === $cacheKey) { $cacheKey = $filename; $filename = $this->baseUrl.'/'.$filename; } // url-encode $ signs in URLs as bad proxies choke on them if (($pos = strpos($filename, '$')) && preg_match('{^https?://.*}i', $filename)) { $filename = substr($filename, 0, $pos) . '%24' . substr($filename, $pos + 1); } $retries = 3; while ($retries--) { try { $preFileDownloadEvent = new PreFileDownloadEvent(PluginEvents::PRE_FILE_DOWNLOAD, $this->rfs, $filename); if ($this->eventDispatcher) { $this->eventDispatcher->dispatch($preFileDownloadEvent->getName(), $preFileDownloadEvent); } $hostname = parse_url($filename, PHP_URL_HOST) ?: $filename; $rfs = $preFileDownloadEvent->getRemoteFilesystem(); $json = $rfs->getContents($hostname, $filename, false); if ($sha256 && $sha256 !== hash('sha256', $json)) { if ($retries) { usleep(100000); continue; } // TODO use scarier wording once we know for sure it doesn't do false positives anymore throw new RepositorySecurityException('The contents of '.$filename.' do not match its signature. This should indicate a man-in-the-middle attack. Try running composer again and report this if you think it is a mistake.'); } $data = JsonFile::parseJson($json, $filename); if ($cacheKey) { if ($storeLastModifiedTime) { $lastModifiedDate = $rfs->findHeaderValue($rfs->getLastHeaders(), 'last-modified'); if ($lastModifiedDate) { $data['last-modified'] = $lastModifiedDate; $json = json_encode($data); } } $this->cache->write($cacheKey, $json); } break; } catch (\Exception $e) { if ($e instanceof TransportException && $e->getStatusCode() === 404) { throw $e; } if ($retries) { usleep(100000); continue; } if ($e instanceof RepositorySecurityException) { throw $e; } if ($cacheKey && ($contents = $this->cache->read($cacheKey))) { if (!$this->degradedMode) { $this->io->writeError(''.$e->getMessage().''); $this->io->writeError(''.$this->url.' could not be fully loaded, package information was loaded from the local cache and may be out of date'); } $this->degradedMode = true; $data = JsonFile::parseJson($contents, $this->cache->getRoot().$cacheKey); break; } throw $e; } } return $data; } protected function fetchFileIfLastModified($filename, $cacheKey, $lastModifiedTime) { $retries = 3; while ($retries--) { try { $preFileDownloadEvent = new PreFileDownloadEvent(PluginEvents::PRE_FILE_DOWNLOAD, $this->rfs, $filename); if ($this->eventDispatcher) { $this->eventDispatcher->dispatch($preFileDownloadEvent->getName(), $preFileDownloadEvent); } $hostname = parse_url($filename, PHP_URL_HOST) ?: $filename; $rfs = $preFileDownloadEvent->getRemoteFilesystem(); $options = array('http' => array('header' => array('If-Modified-Since: '.$lastModifiedTime))); $json = $rfs->getContents($hostname, $filename, false, $options); if ($json === '' && $rfs->findStatusCode($rfs->getLastHeaders()) === 304) { return true; } $data = JsonFile::parseJson($json, $filename); $lastModifiedDate = $rfs->findHeaderValue($rfs->getLastHeaders(), 'last-modified'); if ($lastModifiedDate) { $data['last-modified'] = $lastModifiedDate; $json = json_encode($data); } $this->cache->write($cacheKey, $json); return $data; } catch (\Exception $e) { if ($e instanceof TransportException && $e->getStatusCode() === 404) { throw $e; } if ($retries) { usleep(100000); continue; } if (!$this->degradedMode) { $this->io->writeError(''.$e->getMessage().''); $this->io->writeError(''.$this->url.' could not be fully loaded, package information was loaded from the local cache and may be out of date'); } $this->degradedMode = true; return true; } } } } composer-1.0.0-beta2/src/Composer/Repository/CompositeRepository.php000066400000000000000000000075021267577262200256660ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; use Composer\Package\PackageInterface; /** * Composite repository. * * @author Beau Simensen */ class CompositeRepository extends BaseRepository { /** * List of repositories * @var array */ private $repositories; /** * Constructor * @param array $repositories */ public function __construct(array $repositories) { $this->repositories = array(); foreach ($repositories as $repo) { $this->addRepository($repo); } } /** * Returns all the wrapped repositories * * @return array */ public function getRepositories() { return $this->repositories; } /** * {@inheritdoc} */ public function hasPackage(PackageInterface $package) { foreach ($this->repositories as $repository) { /* @var $repository RepositoryInterface */ if ($repository->hasPackage($package)) { return true; } } return false; } /** * {@inheritdoc} */ public function findPackage($name, $constraint) { foreach ($this->repositories as $repository) { /* @var $repository RepositoryInterface */ $package = $repository->findPackage($name, $constraint); if (null !== $package) { return $package; } } return null; } /** * {@inheritdoc} */ public function findPackages($name, $constraint = null) { $packages = array(); foreach ($this->repositories as $repository) { /* @var $repository RepositoryInterface */ $packages[] = $repository->findPackages($name, $constraint); } return $packages ? call_user_func_array('array_merge', $packages) : array(); } /** * {@inheritdoc} */ public function search($query, $mode = 0) { $matches = array(); foreach ($this->repositories as $repository) { /* @var $repository RepositoryInterface */ $matches[] = $repository->search($query, $mode); } return $matches ? call_user_func_array('array_merge', $matches) : array(); } /** * {@inheritdoc} */ public function getPackages() { $packages = array(); foreach ($this->repositories as $repository) { /* @var $repository RepositoryInterface */ $packages[] = $repository->getPackages(); } return $packages ? call_user_func_array('array_merge', $packages) : array(); } /** * {@inheritdoc} */ public function removePackage(PackageInterface $package) { foreach ($this->repositories as $repository) { /* @var $repository RepositoryInterface */ $repository->removePackage($package); } } /** * {@inheritdoc} */ public function count() { $total = 0; foreach ($this->repositories as $repository) { /* @var $repository RepositoryInterface */ $total += $repository->count(); } return $total; } /** * Add a repository. * @param RepositoryInterface $repository */ public function addRepository(RepositoryInterface $repository) { if ($repository instanceof self) { foreach ($repository->getRepositories() as $repo) { $this->addRepository($repo); } } else { $this->repositories[] = $repository; } } } composer-1.0.0-beta2/src/Composer/Repository/ConfigurableRepositoryInterface.php000066400000000000000000000007361267577262200301470ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; /** * Configurable repository interface. * * @author Lukas Homza */ interface ConfigurableRepositoryInterface { public function getRepoConfig(); } composer-1.0.0-beta2/src/Composer/Repository/FilesystemRepository.php000066400000000000000000000041771267577262200260550ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; use Composer\Json\JsonFile; use Composer\Package\Loader\ArrayLoader; use Composer\Package\Dumper\ArrayDumper; /** * Filesystem repository. * * @author Konstantin Kudryashov * @author Jordi Boggiano */ class FilesystemRepository extends WritableArrayRepository { private $file; /** * Initializes filesystem repository. * * @param JsonFile $repositoryFile repository json file */ public function __construct(JsonFile $repositoryFile) { parent::__construct(); $this->file = $repositoryFile; } /** * Initializes repository (reads file, or remote address). */ protected function initialize() { parent::initialize(); if (!$this->file->exists()) { return; } try { $packages = $this->file->read(); if (!is_array($packages)) { throw new \UnexpectedValueException('Could not parse package list from the repository'); } } catch (\Exception $e) { throw new InvalidRepositoryException('Invalid repository data in '.$this->file->getPath().', packages could not be loaded: ['.get_class($e).'] '.$e->getMessage()); } $loader = new ArrayLoader(null, true); foreach ($packages as $packageData) { $package = $loader->load($packageData); $this->addPackage($package); } } public function reload() { $this->packages = null; $this->initialize(); } /** * Writes writable repository. */ public function write() { $data = array(); $dumper = new ArrayDumper(); foreach ($this->getCanonicalPackages() as $package) { $data[] = $dumper->dump($package); } $this->file->write($data); } } composer-1.0.0-beta2/src/Composer/Repository/InstalledArrayRepository.php000066400000000000000000000011101267577262200266270ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; /** * Installed array repository. * * This is used for serving the RootPackage inside an in-memory InstalledRepository * * @author Jordi Boggiano */ class InstalledArrayRepository extends WritableArrayRepository implements InstalledRepositoryInterface { } composer-1.0.0-beta2/src/Composer/Repository/InstalledFilesystemRepository.php000066400000000000000000000007701267577262200277100ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; /** * Installed filesystem repository. * * @author Jordi Boggiano */ class InstalledFilesystemRepository extends FilesystemRepository implements InstalledRepositoryInterface { } composer-1.0.0-beta2/src/Composer/Repository/InstalledRepositoryInterface.php000066400000000000000000000011031267577262200274530ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; /** * Installable repository interface. * * Just used to tag installed repositories so the base classes can act differently on Alias packages * * @author Jordi Boggiano */ interface InstalledRepositoryInterface extends WritableRepositoryInterface { } composer-1.0.0-beta2/src/Composer/Repository/InvalidRepositoryException.php000066400000000000000000000007371267577262200271740ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; /** * Exception thrown when a package repository is utterly broken * * @author Jordi Boggiano */ class InvalidRepositoryException extends \Exception { } composer-1.0.0-beta2/src/Composer/Repository/PackageRepository.php000066400000000000000000000031341267577262200252540ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; use Composer\Package\Loader\ArrayLoader; use Composer\Package\Loader\ValidatingArrayLoader; /** * Package repository. * * @author Jordi Boggiano */ class PackageRepository extends ArrayRepository { private $config; /** * Initializes filesystem repository. * * @param array $config package definition */ public function __construct(array $config) { parent::__construct(); $this->config = $config['package']; // make sure we have an array of package definitions if (!is_numeric(key($this->config))) { $this->config = array($this->config); } } /** * Initializes repository (reads file, or remote address). */ protected function initialize() { parent::initialize(); $loader = new ValidatingArrayLoader(new ArrayLoader(null, true), false); foreach ($this->config as $package) { try { $package = $loader->load($package); } catch (\Exception $e) { throw new InvalidRepositoryException('A repository of type "package" contains an invalid package definition: '.$e->getMessage()."\n\nInvalid package definition:\n".json_encode($package)); } $this->addPackage($package); } } } composer-1.0.0-beta2/src/Composer/Repository/PathRepository.php000066400000000000000000000110551267577262200246160ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; use Composer\Config; use Composer\IO\IOInterface; use Composer\Json\JsonFile; use Composer\Package\Loader\ArrayLoader; use Composer\Package\Version\VersionGuesser; use Composer\Package\Version\VersionParser; use Composer\Util\ProcessExecutor; /** * This repository allows installing local packages that are not necessarily under their own VCS. * * The local packages will be symlinked when possible, else they will be copied. * * @code * "require": { * "/": "*" * }, * "repositories": [ * { * "type": "path", * "url": "../../relative/path/to/package/" * }, * { * "type": "path", * "url": "/absolute/path/to/package/" * }, * { * "type": "path", * "url": "/absolute/path/to/several/packages/*" * }, * { * "type": "path", * "url": "../../relative/path/to/package/", * "options": { * "symlink": false * } * }, * ] * @endcode * * @author Samuel Roze * @author Johann Reinke */ class PathRepository extends ArrayRepository implements ConfigurableRepositoryInterface { /** * @var ArrayLoader */ private $loader; /** * @var VersionGuesser */ private $versionGuesser; /** * @var string */ private $url; /** * @var array */ private $repoConfig; /** * @var ProcessExecutor */ private $process; /** * @var array */ private $options; /** * Initializes path repository. * * @param array $repoConfig * @param IOInterface $io * @param Config $config */ public function __construct(array $repoConfig, IOInterface $io, Config $config) { if (!isset($repoConfig['url'])) { throw new \RuntimeException('You must specify the `url` configuration for the path repository'); } $this->loader = new ArrayLoader(null, true); $this->url = $repoConfig['url']; $this->process = new ProcessExecutor($io); $this->versionGuesser = new VersionGuesser($config, $this->process, new VersionParser()); $this->repoConfig = $repoConfig; $this->options = isset($repoConfig['options']) ? $repoConfig['options'] : array(); parent::__construct(); } public function getRepoConfig() { return $this->repoConfig; } /** * Initializes path repository. * * This method will basically read the folder and add the found package. */ protected function initialize() { parent::initialize(); foreach ($this->getUrlMatches() as $url) { $path = realpath($url) . DIRECTORY_SEPARATOR; $composerFilePath = $path.'composer.json'; if (!file_exists($composerFilePath)) { continue; } $json = file_get_contents($composerFilePath); $package = JsonFile::parseJson($json, $composerFilePath); $package['dist'] = array( 'type' => 'path', 'url' => $url, 'reference' => sha1($json . serialize($this->options)), ); $package['transport-options'] = $this->options; if (!isset($package['version'])) { $versionData = $this->versionGuesser->guessVersion($package, $path); $package['version'] = $versionData['version'] ?: 'dev-master'; } $output = ''; if (is_dir($path . DIRECTORY_SEPARATOR . '.git') && 0 === $this->process->execute('git log -n1 --pretty=%H', $output, $path)) { $package['dist']['reference'] = trim($output); } $package = $this->loader->load($package); $this->addPackage($package); } } /** * Get a list of all (possibly relative) path names matching given url (supports globbing). * * @return string[] */ private function getUrlMatches() { // Ensure environment-specific path separators are normalized to URL separators return array_map(function ($val) { return str_replace(DIRECTORY_SEPARATOR, '/', $val); }, glob($this->url, GLOB_MARK | GLOB_ONLYDIR)); } } composer-1.0.0-beta2/src/Composer/Repository/Pear/000077500000000000000000000000001267577262200217765ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/Repository/Pear/BaseChannelReader.php000066400000000000000000000047361267577262200260070ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Pear; use Composer\Util\RemoteFilesystem; /** * Base PEAR Channel reader. * * Provides xml namespaces and red * * @author Alexey Prilipko */ abstract class BaseChannelReader { /** * PEAR REST Interface namespaces */ const CHANNEL_NS = 'http://pear.php.net/channel-1.0'; const ALL_CATEGORIES_NS = 'http://pear.php.net/dtd/rest.allcategories'; const CATEGORY_PACKAGES_INFO_NS = 'http://pear.php.net/dtd/rest.categorypackageinfo'; const ALL_PACKAGES_NS = 'http://pear.php.net/dtd/rest.allpackages'; const ALL_RELEASES_NS = 'http://pear.php.net/dtd/rest.allreleases'; const PACKAGE_INFO_NS = 'http://pear.php.net/dtd/rest.package'; /** @var RemoteFilesystem */ private $rfs; protected function __construct(RemoteFilesystem $rfs) { $this->rfs = $rfs; } /** * Read content from remote filesystem. * * @param $origin string server * @param $path string relative path to content * @throws \UnexpectedValueException * @return \SimpleXMLElement */ protected function requestContent($origin, $path) { $url = rtrim($origin, '/') . '/' . ltrim($path, '/'); $content = $this->rfs->getContents($origin, $url, false); if (!$content) { throw new \UnexpectedValueException('The PEAR channel at ' . $url . ' did not respond.'); } return str_replace('http://pear.php.net/rest/', 'https://pear.php.net/rest/', $content); } /** * Read xml content from remote filesystem * * @param $origin string server * @param $path string relative path to content * @throws \UnexpectedValueException * @return \SimpleXMLElement */ protected function requestXml($origin, $path) { // http://components.ez.no/p/packages.xml is malformed. to read it we must ignore parsing errors. $xml = simplexml_load_string($this->requestContent($origin, $path), "SimpleXMLElement", LIBXML_NOERROR); if (false == $xml) { throw new \UnexpectedValueException(sprintf('The PEAR channel at ' . $origin . ' is broken. (Invalid XML at file `%s`)', $path)); } return $xml; } } composer-1.0.0-beta2/src/Composer/Repository/Pear/ChannelInfo.php000066400000000000000000000023021267577262200246700ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Pear; /** * PEAR channel info * * @author Alexey Prilipko */ class ChannelInfo { private $name; private $alias; private $packages; /** * @param string $name * @param string $alias * @param PackageInfo[] $packages */ public function __construct($name, $alias, array $packages) { $this->name = $name; $this->alias = $alias; $this->packages = $packages; } /** * Name of the channel * * @return string */ public function getName() { return $this->name; } /** * Alias of the channel * * @return string */ public function getAlias() { return $this->alias; } /** * List of channel packages * * @return PackageInfo[] */ public function getPackages() { return $this->packages; } } composer-1.0.0-beta2/src/Composer/Repository/Pear/ChannelReader.php000066400000000000000000000063021267577262200252030ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Pear; use Composer\Util\RemoteFilesystem; /** * PEAR Channel package reader. * * Reads channel packages info from and builds Package's * * @author Alexey Prilipko */ class ChannelReader extends BaseChannelReader { /** @var array of ('xpath test' => 'rest implementation') */ private $readerMap; public function __construct(RemoteFilesystem $rfs) { parent::__construct($rfs); $rest10reader = new ChannelRest10Reader($rfs); $rest11reader = new ChannelRest11Reader($rfs); $this->readerMap = array( 'REST1.3' => $rest11reader, 'REST1.2' => $rest11reader, 'REST1.1' => $rest11reader, 'REST1.0' => $rest10reader, ); } /** * Reads PEAR channel through REST interface and builds list of packages * * @param $url string PEAR Channel url * @throws \UnexpectedValueException * @return ChannelInfo */ public function read($url) { $xml = $this->requestXml($url, "/channel.xml"); $channelName = (string) $xml->name; $channelSummary = (string) $xml->summary; $channelAlias = (string) $xml->suggestedalias; $supportedVersions = array_keys($this->readerMap); $selectedRestVersion = $this->selectRestVersion($xml, $supportedVersions); if (!$selectedRestVersion) { throw new \UnexpectedValueException(sprintf('PEAR repository %s does not supports any of %s protocols.', $url, implode(', ', $supportedVersions))); } $reader = $this->readerMap[$selectedRestVersion['version']]; $packageDefinitions = $reader->read($selectedRestVersion['baseUrl']); return new ChannelInfo($channelName, $channelAlias, $packageDefinitions); } /** * Reads channel supported REST interfaces and selects one of them * * @param $channelXml \SimpleXMLElement * @param $supportedVersions string[] supported PEAR REST protocols * @return array|null hash with selected version and baseUrl */ private function selectRestVersion($channelXml, $supportedVersions) { $channelXml->registerXPathNamespace('ns', self::CHANNEL_NS); foreach ($supportedVersions as $version) { $xpathTest = "ns:servers/ns:*/ns:rest/ns:baseurl[@type='{$version}']"; $testResult = $channelXml->xpath($xpathTest); foreach ($testResult as $result) { // Choose first https:// option. $result = (string) $result; if (preg_match('{^https://}i', $result)) { return array('version' => $version, 'baseUrl' => $result); } } // Fallback to non-https if it does not exist. if (count($testResult) > 0) { return array('version' => $version, 'baseUrl' => (string) $testResult[0]); } } return null; } } composer-1.0.0-beta2/src/Composer/Repository/Pear/ChannelRest10Reader.php000066400000000000000000000114121267577262200262000ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Pear; use Composer\Downloader\TransportException; /** * Read PEAR packages using REST 1.0 interface * * At version 1.0 package descriptions read from: * {baseUrl}/p/packages.xml * {baseUrl}/p/{package}/info.xml * {baseUrl}/p/{package}/allreleases.xml * {baseUrl}/p/{package}/deps.{version}.txt * * @author Alexey Prilipko */ class ChannelRest10Reader extends BaseChannelReader { private $dependencyReader; public function __construct($rfs) { parent::__construct($rfs); $this->dependencyReader = new PackageDependencyParser(); } /** * Reads package descriptions using PEAR Rest 1.0 interface * * @param $baseUrl string base Url interface * * @return PackageInfo[] */ public function read($baseUrl) { return $this->readPackages($baseUrl); } /** * Read list of packages from * {baseUrl}/p/packages.xml * * @param $baseUrl string * @return PackageInfo[] */ private function readPackages($baseUrl) { $result = array(); $xmlPath = '/p/packages.xml'; $xml = $this->requestXml($baseUrl, $xmlPath); $xml->registerXPathNamespace('ns', self::ALL_PACKAGES_NS); foreach ($xml->xpath('ns:p') as $node) { $packageName = (string) $node; $packageInfo = $this->readPackage($baseUrl, $packageName); $result[] = $packageInfo; } return $result; } /** * Read package info from * {baseUrl}/p/{package}/info.xml * * @param $baseUrl string * @param $packageName string * @return PackageInfo */ private function readPackage($baseUrl, $packageName) { $xmlPath = '/p/' . strtolower($packageName) . '/info.xml'; $xml = $this->requestXml($baseUrl, $xmlPath); $xml->registerXPathNamespace('ns', self::PACKAGE_INFO_NS); $channelName = (string) $xml->c; $packageName = (string) $xml->n; $license = (string) $xml->l; $shortDescription = (string) $xml->s; $description = (string) $xml->d; return new PackageInfo( $channelName, $packageName, $license, $shortDescription, $description, $this->readPackageReleases($baseUrl, $packageName) ); } /** * Read package releases from * {baseUrl}/p/{package}/allreleases.xml * * @param $baseUrl string * @param $packageName string * @throws \Composer\Downloader\TransportException|\Exception * @return ReleaseInfo[] hash array with keys as version numbers */ private function readPackageReleases($baseUrl, $packageName) { $result = array(); try { $xmlPath = '/r/' . strtolower($packageName) . '/allreleases.xml'; $xml = $this->requestXml($baseUrl, $xmlPath); $xml->registerXPathNamespace('ns', self::ALL_RELEASES_NS); foreach ($xml->xpath('ns:r') as $node) { $releaseVersion = (string) $node->v; $releaseStability = (string) $node->s; try { $result[$releaseVersion] = new ReleaseInfo( $releaseStability, $this->readPackageReleaseDependencies($baseUrl, $packageName, $releaseVersion) ); } catch (TransportException $exception) { if ($exception->getCode() != 404) { throw $exception; } } } } catch (TransportException $exception) { if ($exception->getCode() != 404) { throw $exception; } } return $result; } /** * Read package dependencies from * {baseUrl}/p/{package}/deps.{version}.txt * * @param $baseUrl string * @param $packageName string * @param $version string * @return DependencyInfo[] */ private function readPackageReleaseDependencies($baseUrl, $packageName, $version) { $dependencyReader = new PackageDependencyParser(); $depthPath = '/r/' . strtolower($packageName) . '/deps.' . $version . '.txt'; $content = $this->requestContent($baseUrl, $depthPath); $dependencyArray = unserialize($content); $result = $dependencyReader->buildDependencyInfo($dependencyArray); return $result; } } composer-1.0.0-beta2/src/Composer/Repository/Pear/ChannelRest11Reader.php000066400000000000000000000100011267577262200261720ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Pear; /** * Read PEAR packages using REST 1.1 interface * * At version 1.1 package descriptions read from: * {baseUrl}/c/categories.xml * {baseUrl}/c/{category}/packagesinfo.xml * * @author Alexey Prilipko */ class ChannelRest11Reader extends BaseChannelReader { private $dependencyReader; public function __construct($rfs) { parent::__construct($rfs); $this->dependencyReader = new PackageDependencyParser(); } /** * Reads package descriptions using PEAR Rest 1.1 interface * * @param $baseUrl string base Url interface * * @return PackageInfo[] */ public function read($baseUrl) { return $this->readChannelPackages($baseUrl); } /** * Read list of channel categories from * {baseUrl}/c/categories.xml * * @param $baseUrl string * @return PackageInfo[] */ private function readChannelPackages($baseUrl) { $result = array(); $xml = $this->requestXml($baseUrl, "/c/categories.xml"); $xml->registerXPathNamespace('ns', self::ALL_CATEGORIES_NS); foreach ($xml->xpath('ns:c') as $node) { $categoryName = (string) $node; $categoryPackages = $this->readCategoryPackages($baseUrl, $categoryName); $result = array_merge($result, $categoryPackages); } return $result; } /** * Read packages from * {baseUrl}/c/{category}/packagesinfo.xml * * @param $baseUrl string * @param $categoryName string * @return PackageInfo[] */ private function readCategoryPackages($baseUrl, $categoryName) { $result = array(); $categoryPath = '/c/'.urlencode($categoryName).'/packagesinfo.xml'; $xml = $this->requestXml($baseUrl, $categoryPath); $xml->registerXPathNamespace('ns', self::CATEGORY_PACKAGES_INFO_NS); foreach ($xml->xpath('ns:pi') as $node) { $packageInfo = $this->parsePackage($node); $result[] = $packageInfo; } return $result; } /** * Parses package node. * * @param $packageInfo \SimpleXMLElement xml element describing package * @return PackageInfo */ private function parsePackage($packageInfo) { $packageInfo->registerXPathNamespace('ns', self::CATEGORY_PACKAGES_INFO_NS); $channelName = (string) $packageInfo->p->c; $packageName = (string) $packageInfo->p->n; $license = (string) $packageInfo->p->l; $shortDescription = (string) $packageInfo->p->s; $description = (string) $packageInfo->p->d; $dependencies = array(); foreach ($packageInfo->xpath('ns:deps') as $node) { $dependencyVersion = (string) $node->v; $dependencyArray = unserialize((string) $node->d); $dependencyInfo = $this->dependencyReader->buildDependencyInfo($dependencyArray); $dependencies[$dependencyVersion] = $dependencyInfo; } $releases = array(); $releasesInfo = $packageInfo->xpath('ns:a/ns:r'); if ($releasesInfo) { foreach ($releasesInfo as $node) { $releaseVersion = (string) $node->v; $releaseStability = (string) $node->s; $releases[$releaseVersion] = new ReleaseInfo( $releaseStability, isset($dependencies[$releaseVersion]) ? $dependencies[$releaseVersion] : new DependencyInfo(array(), array()) ); } } return new PackageInfo( $channelName, $packageName, $license, $shortDescription, $description, $releases ); } } composer-1.0.0-beta2/src/Composer/Repository/Pear/DependencyConstraint.php000066400000000000000000000023401267577262200266310ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Pear; /** * PEAR package release dependency info * * @author Alexey Prilipko */ class DependencyConstraint { private $type; private $constraint; private $channelName; private $packageName; /** * @param string $type * @param string $constraint * @param string $channelName * @param string $packageName */ public function __construct($type, $constraint, $channelName, $packageName) { $this->type = $type; $this->constraint = $constraint; $this->channelName = $channelName; $this->packageName = $packageName; } public function getChannelName() { return $this->channelName; } public function getConstraint() { return $this->constraint; } public function getPackageName() { return $this->packageName; } public function getType() { return $this->type; } } composer-1.0.0-beta2/src/Composer/Repository/Pear/DependencyInfo.php000066400000000000000000000022331267577262200254010ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Pear; /** * PEAR package release dependency info * * @author Alexey Prilipko */ class DependencyInfo { private $requires; private $optionals; /** * @param DependencyConstraint[] $requires list of requires/conflicts/replaces * @param array $optionals [groupName => DependencyConstraint[]] list of optional groups */ public function __construct($requires, $optionals) { $this->requires = $requires; $this->optionals = $optionals; } /** * @return DependencyConstraint[] list of requires/conflicts/replaces */ public function getRequires() { return $this->requires; } /** * @return array [groupName => DependencyConstraint[]] list of optional groups */ public function getOptionals() { return $this->optionals; } } composer-1.0.0-beta2/src/Composer/Repository/Pear/PackageDependencyParser.php000066400000000000000000000250261267577262200272230ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Pear; /** * Read PEAR packages using REST 1.0 interface * * @author Alexey Prilipko */ class PackageDependencyParser { /** * Builds dependency information. It detects used package.xml format. * * @param $depArray array * @return DependencyInfo */ public function buildDependencyInfo($depArray) { if (!is_array($depArray)) { return new DependencyInfo(array(), array()); } if (!$this->isHash($depArray)) { return new DependencyInfo($this->buildDependency10Info($depArray), array()); } return $this->buildDependency20Info($depArray); } /** * Builds dependency information from package.xml 1.0 format * * https://pear.php.net/manual/en/guide.developers.package2.dependencies.php * * package.xml 1.0 format consists of array of * { type="php|os|sapi|ext|pkg" rel="has|not|eq|ge|gt|le|lt" optional="yes" * channel="channelName" name="extName|packageName" } * * @param $depArray array Dependency data in package.xml 1.0 format * @return DependencyConstraint[] */ private function buildDependency10Info($depArray) { static $dep10toOperatorMap = array('has' => '==', 'eq' => '==', 'ge' => '>=', 'gt' => '>', 'le' => '<=', 'lt' => '<', 'not' => '!='); $result = array(); foreach ($depArray as $depItem) { if (empty($depItem['rel']) || !array_key_exists($depItem['rel'], $dep10toOperatorMap)) { // 'unknown rel type:' . $depItem['rel']; continue; } $depType = !empty($depItem['optional']) && 'yes' == $depItem['optional'] ? 'optional' : 'required'; $depType = 'not' == $depItem['rel'] ? 'conflicts' : $depType; $depVersion = !empty($depItem['version']) ? $this->parseVersion($depItem['version']) : '*'; // has & not are special operators that does not requires version $depVersionConstraint = ('has' == $depItem['rel'] || 'not' == $depItem['rel']) && '*' == $depVersion ? '*' : $dep10toOperatorMap[$depItem['rel']] . $depVersion; switch ($depItem['type']) { case 'php': $depChannelName = 'php'; $depPackageName = ''; break; case 'pkg': $depChannelName = !empty($depItem['channel']) ? $depItem['channel'] : 'pear.php.net'; $depPackageName = $depItem['name']; break; case 'ext': $depChannelName = 'ext'; $depPackageName = $depItem['name']; break; case 'os': case 'sapi': $depChannelName = ''; $depPackageName = ''; break; default: $depChannelName = ''; $depPackageName = ''; break; } if ('' != $depChannelName) { $result[] = new DependencyConstraint( $depType, $depVersionConstraint, $depChannelName, $depPackageName ); } } return $result; } /** * Builds dependency information from package.xml 2.0 format * * @param $depArray array Dependency data in package.xml 1.0 format * @return DependencyInfo */ private function buildDependency20Info($depArray) { $result = array(); $optionals = array(); $defaultOptionals = array(); foreach ($depArray as $depType => $depTypeGroup) { if (!is_array($depTypeGroup)) { continue; } if ('required' == $depType || 'optional' == $depType) { foreach ($depTypeGroup as $depItemType => $depItem) { switch ($depItemType) { case 'php': $result[] = new DependencyConstraint( $depType, $this->parse20VersionConstraint($depItem), 'php', '' ); break; case 'package': $deps = $this->buildDepPackageConstraints($depItem, $depType); $result = array_merge($result, $deps); break; case 'extension': $deps = $this->buildDepExtensionConstraints($depItem, $depType); $result = array_merge($result, $deps); break; case 'subpackage': $deps = $this->buildDepPackageConstraints($depItem, 'replaces'); $defaultOptionals += $deps; break; case 'os': case 'pearinstaller': break; default: break; } } } elseif ('group' == $depType) { if ($this->isHash($depTypeGroup)) { $depTypeGroup = array($depTypeGroup); } foreach ($depTypeGroup as $depItem) { $groupName = $depItem['attribs']['name']; if (!isset($optionals[$groupName])) { $optionals[$groupName] = array(); } if (isset($depItem['subpackage'])) { $optionals[$groupName] += $this->buildDepPackageConstraints($depItem['subpackage'], 'replaces'); } else { $result += $this->buildDepPackageConstraints($depItem['package'], 'optional'); } } } } if (count($defaultOptionals) > 0) { $optionals['*'] = $defaultOptionals; } return new DependencyInfo($result, $optionals); } /** * Builds dependency constraint of 'extension' type * * @param $depItem array dependency constraint or array of dependency constraints * @param $depType string target type of building constraint. * @return DependencyConstraint[] */ private function buildDepExtensionConstraints($depItem, $depType) { if ($this->isHash($depItem)) { $depItem = array($depItem); } $result = array(); foreach ($depItem as $subDepItem) { $depChannelName = 'ext'; $depPackageName = $subDepItem['name']; $depVersionConstraint = $this->parse20VersionConstraint($subDepItem); $result[] = new DependencyConstraint( $depType, $depVersionConstraint, $depChannelName, $depPackageName ); } return $result; } /** * Builds dependency constraint of 'package' type * * @param $depItem array dependency constraint or array of dependency constraints * @param $depType string target type of building constraint. * @return DependencyConstraint[] */ private function buildDepPackageConstraints($depItem, $depType) { if ($this->isHash($depItem)) { $depItem = array($depItem); } $result = array(); foreach ($depItem as $subDepItem) { $depChannelName = $subDepItem['channel']; $depPackageName = $subDepItem['name']; $depVersionConstraint = $this->parse20VersionConstraint($subDepItem); if (isset($subDepItem['conflicts'])) { $depType = 'conflicts'; } $result[] = new DependencyConstraint( $depType, $depVersionConstraint, $depChannelName, $depPackageName ); } return $result; } /** * Parses version constraint * * @param array $data array containing several 'min', 'max', 'has', 'exclude' and other keys. * @return string */ private function parse20VersionConstraint(array $data) { static $dep20toOperatorMap = array('has' => '==', 'min' => '>=', 'max' => '<=', 'exclude' => '!='); $versions = array(); $values = array_intersect_key($data, $dep20toOperatorMap); if (0 == count($values)) { return '*'; } if (isset($values['min']) && isset($values['exclude']) && $data['min'] == $data['exclude']) { $versions[] = '>' . $this->parseVersion($values['min']); } elseif (isset($values['max']) && isset($values['exclude']) && $data['max'] == $data['exclude']) { $versions[] = '<' . $this->parseVersion($values['max']); } else { foreach ($values as $op => $version) { if ('exclude' == $op && is_array($version)) { foreach ($version as $versionPart) { $versions[] = $dep20toOperatorMap[$op] . $this->parseVersion($versionPart); } } else { $versions[] = $dep20toOperatorMap[$op] . $this->parseVersion($version); } } } return implode(',', $versions); } /** * Softened version parser * * @param $version * @return null|string */ private function parseVersion($version) { if (preg_match('{^v?(\d{1,3})(\.\d+)?(\.\d+)?(\.\d+)?}i', $version, $matches)) { $version = $matches[1] .(!empty($matches[2]) ? $matches[2] : '.0') .(!empty($matches[3]) ? $matches[3] : '.0') .(!empty($matches[4]) ? $matches[4] : '.0'); return $version; } return null; } /** * Test if array is associative or hash type * * @param array $array * @return bool */ private function isHash(array $array) { return !array_key_exists(1, $array) && !array_key_exists(0, $array); } } composer-1.0.0-beta2/src/Composer/Repository/Pear/PackageInfo.php000066400000000000000000000041121267577262200246540ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Pear; /** * PEAR Package info * * @author Alexey Prilipko */ class PackageInfo { private $channelName; private $packageName; private $license; private $shortDescription; private $description; private $releases; /** * @param string $channelName * @param string $packageName * @param string $license * @param string $shortDescription * @param string $description * @param ReleaseInfo[] $releases associative array maps release version to release info */ public function __construct($channelName, $packageName, $license, $shortDescription, $description, $releases) { $this->channelName = $channelName; $this->packageName = $packageName; $this->license = $license; $this->shortDescription = $shortDescription; $this->description = $description; $this->releases = $releases; } /** * @return string the package channel name */ public function getChannelName() { return $this->channelName; } /** * @return string the package name */ public function getPackageName() { return $this->packageName; } /** * @return string the package description */ public function getDescription() { return $this->description; } /** * @return string the package short description */ public function getShortDescription() { return $this->shortDescription; } /** * @return string the package license */ public function getLicense() { return $this->license; } /** * @return ReleaseInfo[] */ public function getReleases() { return $this->releases; } } composer-1.0.0-beta2/src/Composer/Repository/Pear/ReleaseInfo.php000066400000000000000000000020021267577262200246750ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Pear; /** * PEAR package release info * * @author Alexey Prilipko */ class ReleaseInfo { private $stability; private $dependencyInfo; /** * @param string $stability * @param DependencyInfo $dependencyInfo */ public function __construct($stability, $dependencyInfo) { $this->stability = $stability; $this->dependencyInfo = $dependencyInfo; } /** * @return DependencyInfo release dependencies */ public function getDependencyInfo() { return $this->dependencyInfo; } /** * @return string release stability */ public function getStability() { return $this->stability; } } composer-1.0.0-beta2/src/Composer/Repository/PearRepository.php000066400000000000000000000210471267577262200246130ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; use Composer\IO\IOInterface; use Composer\Semver\VersionParser as SemverVersionParser; use Composer\Package\Version\VersionParser; use Composer\Repository\Pear\ChannelReader; use Composer\Package\CompletePackage; use Composer\Repository\Pear\ChannelInfo; use Composer\EventDispatcher\EventDispatcher; use Composer\Package\Link; use Composer\Semver\Constraint\Constraint; use Composer\Util\RemoteFilesystem; use Composer\Config; use Composer\Factory; /** * Builds list of package from PEAR channel. * * Packages read from channel are named as 'pear-{channelName}/{packageName}' * and has aliased as 'pear-{channelAlias}/{packageName}' * * @author Benjamin Eberlei * @author Jordi Boggiano */ class PearRepository extends ArrayRepository implements ConfigurableRepositoryInterface { private $url; private $io; private $rfs; private $versionParser; private $repoConfig; /** @var string vendor makes additional alias for each channel as {prefix}/{packagename}. It allows smoother * package transition to composer-like repositories. */ private $vendorAlias; public function __construct(array $repoConfig, IOInterface $io, Config $config, EventDispatcher $dispatcher = null, RemoteFilesystem $rfs = null) { parent::__construct(); if (!preg_match('{^https?://}', $repoConfig['url'])) { $repoConfig['url'] = 'http://'.$repoConfig['url']; } $urlBits = parse_url($repoConfig['url']); if (empty($urlBits['scheme']) || empty($urlBits['host'])) { throw new \UnexpectedValueException('Invalid url given for PEAR repository: '.$repoConfig['url']); } $this->url = rtrim($repoConfig['url'], '/'); $this->io = $io; $this->rfs = $rfs ?: Factory::createRemoteFilesystem($this->io, $config); $this->vendorAlias = isset($repoConfig['vendor-alias']) ? $repoConfig['vendor-alias'] : null; $this->versionParser = new VersionParser(); $this->repoConfig = $repoConfig; } public function getRepoConfig() { return $this->repoConfig; } protected function initialize() { parent::initialize(); $this->io->writeError('Initializing PEAR repository '.$this->url); $reader = new ChannelReader($this->rfs); try { $channelInfo = $reader->read($this->url); } catch (\Exception $e) { $this->io->writeError('PEAR repository from '.$this->url.' could not be loaded. '.$e->getMessage().''); return; } $packages = $this->buildComposerPackages($channelInfo, $this->versionParser); foreach ($packages as $package) { $this->addPackage($package); } } /** * Builds CompletePackages from PEAR package definition data. * * @param ChannelInfo $channelInfo * @param SemverVersionParser $versionParser * @return CompletePackage */ private function buildComposerPackages(ChannelInfo $channelInfo, SemverVersionParser $versionParser) { $result = array(); foreach ($channelInfo->getPackages() as $packageDefinition) { foreach ($packageDefinition->getReleases() as $version => $releaseInfo) { try { $normalizedVersion = $versionParser->normalize($version); } catch (\UnexpectedValueException $e) { $this->io->writeError('Could not load '.$packageDefinition->getPackageName().' '.$version.': '.$e->getMessage(), true, IOInterface::VERBOSE); continue; } $composerPackageName = $this->buildComposerPackageName($packageDefinition->getChannelName(), $packageDefinition->getPackageName()); // distribution url must be read from /r/{packageName}/{version}.xml::/r/g:text() // but this location is 'de-facto' standard $urlBits = parse_url($this->url); $scheme = (isset($urlBits['scheme']) && 'https' === $urlBits['scheme'] && extension_loaded('openssl')) ? 'https' : 'http'; $distUrl = "{$scheme}://{$packageDefinition->getChannelName()}/get/{$packageDefinition->getPackageName()}-{$version}.tgz"; $requires = array(); $suggests = array(); $conflicts = array(); $replaces = array(); // alias package only when its channel matches repository channel, // cause we've know only repository channel alias if ($channelInfo->getName() == $packageDefinition->getChannelName()) { $composerPackageAlias = $this->buildComposerPackageName($channelInfo->getAlias(), $packageDefinition->getPackageName()); $aliasConstraint = new Constraint('==', $normalizedVersion); $replaces[] = new Link($composerPackageName, $composerPackageAlias, $aliasConstraint, 'replaces', (string) $aliasConstraint); } // alias package with user-specified prefix. it makes private pear channels looks like composer's. if (!empty($this->vendorAlias) && ($this->vendorAlias != 'pear-'.$channelInfo->getAlias() || $channelInfo->getName() != $packageDefinition->getChannelName()) ) { $composerPackageAlias = "{$this->vendorAlias}/{$packageDefinition->getPackageName()}"; $aliasConstraint = new Constraint('==', $normalizedVersion); $replaces[] = new Link($composerPackageName, $composerPackageAlias, $aliasConstraint, 'replaces', (string) $aliasConstraint); } foreach ($releaseInfo->getDependencyInfo()->getRequires() as $dependencyConstraint) { $dependencyPackageName = $this->buildComposerPackageName($dependencyConstraint->getChannelName(), $dependencyConstraint->getPackageName()); $constraint = $versionParser->parseConstraints($dependencyConstraint->getConstraint()); $link = new Link($composerPackageName, $dependencyPackageName, $constraint, $dependencyConstraint->getType(), $dependencyConstraint->getConstraint()); switch ($dependencyConstraint->getType()) { case 'required': $requires[] = $link; break; case 'conflicts': $conflicts[] = $link; break; case 'replaces': $replaces[] = $link; break; } } foreach ($releaseInfo->getDependencyInfo()->getOptionals() as $group => $dependencyConstraints) { foreach ($dependencyConstraints as $dependencyConstraint) { $dependencyPackageName = $this->buildComposerPackageName($dependencyConstraint->getChannelName(), $dependencyConstraint->getPackageName()); $suggests[$group.'-'.$dependencyPackageName] = $dependencyConstraint->getConstraint(); } } $package = new CompletePackage($composerPackageName, $normalizedVersion, $version); $package->setType('pear-library'); $package->setDescription($packageDefinition->getDescription()); $package->setLicense(array($packageDefinition->getLicense())); $package->setDistType('file'); $package->setDistUrl($distUrl); $package->setAutoload(array('classmap' => array(''))); $package->setIncludePaths(array('/')); $package->setRequires($requires); $package->setConflicts($conflicts); $package->setSuggests($suggests); $package->setReplaces($replaces); $result[] = $package; } } return $result; } private function buildComposerPackageName($channelName, $packageName) { if ('php' === $channelName) { return "php"; } if ('ext' === $channelName) { return "ext-{$packageName}"; } return "pear-{$channelName}/{$packageName}"; } } composer-1.0.0-beta2/src/Composer/Repository/PlatformRepository.php000066400000000000000000000203071267577262200255060ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; use Composer\Config; use Composer\Package\PackageInterface; use Composer\Package\CompletePackage; use Composer\Package\Version\VersionParser; use Composer\Plugin\PluginInterface; /** * @author Jordi Boggiano */ class PlatformRepository extends ArrayRepository { const PLATFORM_PACKAGE_REGEX = '{^(?:php(?:-64bit)?|hhvm|(?:ext|lib)-[^/]+)$}i'; /** * Defines overrides so that the platform can be mocked * * Should be an array of package name => version number mappings * * @var array */ private $overrides = array(); public function __construct(array $packages = array(), array $overrides = array()) { foreach ($overrides as $name => $version) { $this->overrides[strtolower($name)] = array('name' => $name, 'version' => $version); } parent::__construct($packages); } protected function initialize() { parent::initialize(); $versionParser = new VersionParser(); // Add each of the override versions as options. // Later we might even replace the extensions instead. foreach ($this->overrides as $override) { // Check that it's a platform package. if (!preg_match(self::PLATFORM_PACKAGE_REGEX, $override['name'])) { throw new \InvalidArgumentException('Invalid platform package name in config.platform: '.$override['name']); } $version = $versionParser->normalize($override['version']); $package = new CompletePackage($override['name'], $version, $override['version']); $package->setDescription('Package overridden via config.platform'); $package->setExtra(array('config.platform' => true)); parent::addPackage($package); } $prettyVersion = PluginInterface::PLUGIN_API_VERSION; $version = $versionParser->normalize($prettyVersion); $composerPluginApi = new CompletePackage('composer-plugin-api', $version, $prettyVersion); $composerPluginApi->setDescription('The Composer Plugin API'); $this->addPackage($composerPluginApi); try { $prettyVersion = PHP_VERSION; $version = $versionParser->normalize($prettyVersion); } catch (\UnexpectedValueException $e) { $prettyVersion = preg_replace('#^([^~+-]+).*$#', '$1', PHP_VERSION); $version = $versionParser->normalize($prettyVersion); } $php = new CompletePackage('php', $version, $prettyVersion); $php->setDescription('The PHP interpreter'); $this->addPackage($php); if (PHP_INT_SIZE === 8) { $php64 = new CompletePackage('php-64bit', $version, $prettyVersion); $php64->setDescription('The PHP interpreter, 64bit'); $this->addPackage($php64); } $loadedExtensions = get_loaded_extensions(); // Extensions scanning foreach ($loadedExtensions as $name) { if (in_array($name, array('standard', 'Core'))) { continue; } $reflExt = new \ReflectionExtension($name); try { $prettyVersion = $reflExt->getVersion(); $version = $versionParser->normalize($prettyVersion); } catch (\UnexpectedValueException $e) { $prettyVersion = '0'; $version = $versionParser->normalize($prettyVersion); } $packageName = $this->buildPackageName($name); $ext = new CompletePackage($packageName, $version, $prettyVersion); $ext->setDescription('The '.$name.' PHP extension'); $this->addPackage($ext); } // Another quick loop, just for possible libraries // Doing it this way to know that functions or constants exist before // relying on them. foreach ($loadedExtensions as $name) { $prettyVersion = null; $description = 'The '.$name.' PHP library'; switch ($name) { case 'curl': $curlVersion = curl_version(); $prettyVersion = $curlVersion['version']; break; case 'iconv': $prettyVersion = ICONV_VERSION; break; case 'intl': $name = 'ICU'; if (defined('INTL_ICU_VERSION')) { $prettyVersion = INTL_ICU_VERSION; } else { $reflector = new \ReflectionExtension('intl'); ob_start(); $reflector->info(); $output = ob_get_clean(); preg_match('/^ICU version => (.*)$/m', $output, $matches); $prettyVersion = $matches[1]; } break; case 'libxml': $prettyVersion = LIBXML_DOTTED_VERSION; break; case 'openssl': $prettyVersion = preg_replace_callback('{^(?:OpenSSL\s*)?([0-9.]+)([a-z]*).*}', function ($match) { if (empty($match[2])) { return $match[1]; } // OpenSSL versions add another letter when they reach Z. // e.g. OpenSSL 0.9.8zh 3 Dec 2015 if (!preg_match('{^z*[a-z]$}', $match[2])) { // 0.9.8abc is garbage return 0; } $len = strlen($match[2]); $patchVersion = ($len - 1) * 26; // All Z $patchVersion += ord($match[2][$len - 1]) - 96; return $match[1].'.'.$patchVersion; }, OPENSSL_VERSION_TEXT); $description = OPENSSL_VERSION_TEXT; break; case 'pcre': $prettyVersion = preg_replace('{^(\S+).*}', '$1', PCRE_VERSION); break; case 'uuid': $prettyVersion = phpversion('uuid'); break; case 'xsl': $prettyVersion = LIBXSLT_DOTTED_VERSION; break; default: // None handled extensions have no special cases, skip continue 2; } try { $version = $versionParser->normalize($prettyVersion); } catch (\UnexpectedValueException $e) { continue; } $lib = new CompletePackage('lib-'.$name, $version, $prettyVersion); $lib->setDescription($description); $this->addPackage($lib); } if (defined('HHVM_VERSION')) { try { $prettyVersion = HHVM_VERSION; $version = $versionParser->normalize($prettyVersion); } catch (\UnexpectedValueException $e) { $prettyVersion = preg_replace('#^([^~+-]+).*$#', '$1', HHVM_VERSION); $version = $versionParser->normalize($prettyVersion); } $hhvm = new CompletePackage('hhvm', $version, $prettyVersion); $hhvm->setDescription('The HHVM Runtime (64bit)'); $this->addPackage($hhvm); } } /** * {@inheritDoc} */ public function addPackage(PackageInterface $package) { // Skip if overridden if (isset($this->overrides[strtolower($package->getName())])) { $overrider = $this->findPackage($package->getName(), '*'); $overrider->setDescription($overrider->getDescription().' (actual: '.$package->getPrettyVersion().')'); return; } parent::addPackage($package); } private function buildPackageName($name) { return 'ext-' . str_replace(' ', '-', $name); } } composer-1.0.0-beta2/src/Composer/Repository/RepositoryFactory.php000066400000000000000000000134371267577262200253370ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; use Composer\Factory; use Composer\IO\IOInterface; use Composer\Config; use Composer\EventDispatcher\EventDispatcher; use Composer\Util\RemoteFilesystem; use Composer\Json\JsonFile; /** * @author Jordi Boggiano */ class RepositoryFactory { /** * @return array */ public static function configFromString(IOInterface $io, Config $config, $repository, $allowFilesystem = false) { if ("json" === pathinfo($repository, PATHINFO_EXTENSION)) { $json = new JsonFile($repository, Factory::createRemoteFilesystem($io, $config)); $data = $json->read(); if (!empty($data['packages']) || !empty($data['includes']) || !empty($data['provider-includes'])) { $repoConfig = array('type' => 'composer', 'url' => 'file://' . strtr(realpath($repository), '\\', '/')); } elseif ($allowFilesystem) { $repoConfig = array('type' => 'filesystem', 'json' => $json); } else { throw new \InvalidArgumentException("Invalid repository URL ($repository) given. This file does not contain a valid composer repository."); } } elseif (0 === strpos($repository, 'http')) { $repoConfig = array('type' => 'composer', 'url' => $repository); } elseif ('{' === substr($repository, 0, 1)) { // assume it is a json object that makes a repo config $repoConfig = JsonFile::parseJson($repository); } else { throw new \InvalidArgumentException("Invalid repository url ($repository) given. Has to be a .json file, an http url or a JSON object."); } return $repoConfig; } /** * @return RepositoryInterface */ public static function fromString(IOInterface $io, Config $config, $repository, $allowFilesystem = false) { $repoConfig = static::configFromString($io, $config, $repository, $allowFilesystem); return static::createRepo($io, $config, $repoConfig); } /** * @return RepositoryInterface */ public static function createRepo($io, $config, array $repoConfig) { $rm = static::manager($io, $config, null, Factory::createRemoteFilesystem($io, $config)); $repos = static::createRepos($rm, array($repoConfig)); return reset($repos); } /** * @return RepositoryInterface[] */ public static function defaultRepos(IOInterface $io = null, Config $config = null, RepositoryManager $rm = null) { if (!$config) { $config = Factory::createConfig($io); } if (!$rm) { if (!$io) { throw new \InvalidArgumentException('This function requires either an IOInterface or a RepositoryManager'); } $rm = static::manager($io, $config, null, Factory::createRemoteFilesystem($io, $config)); } return static::createRepos($rm, $config->getRepositories()); } /** * @param IOInterface $io * @param Config $config * @param EventDispatcher $eventDispatcher * @param RemoteFilesystem $rfs * @return RepositoryManager */ public static function manager(IOInterface $io, Config $config, EventDispatcher $eventDispatcher = null, RemoteFilesystem $rfs = null) { $rm = new RepositoryManager($io, $config, $eventDispatcher, $rfs); $rm->setRepositoryClass('composer', 'Composer\Repository\ComposerRepository'); $rm->setRepositoryClass('vcs', 'Composer\Repository\VcsRepository'); $rm->setRepositoryClass('package', 'Composer\Repository\PackageRepository'); $rm->setRepositoryClass('pear', 'Composer\Repository\PearRepository'); $rm->setRepositoryClass('git', 'Composer\Repository\VcsRepository'); $rm->setRepositoryClass('gitlab', 'Composer\Repository\VcsRepository'); $rm->setRepositoryClass('svn', 'Composer\Repository\VcsRepository'); $rm->setRepositoryClass('perforce', 'Composer\Repository\VcsRepository'); $rm->setRepositoryClass('hg', 'Composer\Repository\VcsRepository'); $rm->setRepositoryClass('artifact', 'Composer\Repository\ArtifactRepository'); $rm->setRepositoryClass('path', 'Composer\Repository\PathRepository'); return $rm; } /** * @return RepositoryInterface[] */ private static function createRepos(RepositoryManager $rm, array $repoConfigs) { $repos = array(); foreach ($repoConfigs as $index => $repo) { if (is_string($repo)) { throw new \UnexpectedValueException('"repositories" should be an array of repository definitions, only a single repository was given'); } if (!is_array($repo)) { throw new \UnexpectedValueException('Repository "'.$index.'" ('.json_encode($repo).') should be an array, '.gettype($repo).' given'); } if (!isset($repo['type'])) { throw new \UnexpectedValueException('Repository "'.$index.'" ('.json_encode($repo).') must have a type defined'); } $name = is_int($index) && isset($repo['url']) ? preg_replace('{^https?://}i', '', $repo['url']) : $index; while (isset($repos[$name])) { $name .= '2'; } if ($repo['type'] === 'filesystem') { $repos[$name] = new FilesystemRepository($repo['json']); } else { $repos[$name] = $rm->createRepository($repo['type'], $repo); } } return $repos; } } composer-1.0.0-beta2/src/Composer/Repository/RepositoryInterface.php000066400000000000000000000042661267577262200256300ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; use Composer\Package\PackageInterface; /** * Repository interface. * * @author Nils Adermann * @author Konstantin Kudryashov * @author Jordi Boggiano */ interface RepositoryInterface extends \Countable { const SEARCH_FULLTEXT = 0; const SEARCH_NAME = 1; /** * Checks if specified package registered (installed). * * @param PackageInterface $package package instance * * @return bool */ public function hasPackage(PackageInterface $package); /** * Searches for the first match of a package by name and version. * * @param string $name package name * @param string|\Composer\Semver\Constraint\ConstraintInterface $constraint package version or version constraint to match against * * @return PackageInterface|null */ public function findPackage($name, $constraint); /** * Searches for all packages matching a name and optionally a version. * * @param string $name package name * @param string|\Composer\Semver\Constraint\ConstraintInterface $constraint package version or version constraint to match against * * @return PackageInterface[] */ public function findPackages($name, $constraint = null); /** * Returns list of registered packages. * * @return PackageInterface[] */ public function getPackages(); /** * Searches the repository for packages containing the query * * @param string $query search query * @param int $mode a set of SEARCH_* constants to search on, implementations should do a best effort only * @return array[] an array of array('name' => '...', 'description' => '...') */ public function search($query, $mode = 0); } composer-1.0.0-beta2/src/Composer/Repository/RepositoryManager.php000066400000000000000000000120771267577262200253010ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; use Composer\IO\IOInterface; use Composer\Config; use Composer\EventDispatcher\EventDispatcher; use Composer\Package\PackageInterface; use Composer\Util\RemoteFilesystem; /** * Repositories manager. * * @author Jordi Boggiano * @author Konstantin Kudryashov * @author François Pluchino */ class RepositoryManager { private $localRepository; private $repositories = array(); private $repositoryClasses = array(); private $io; private $config; private $eventDispatcher; private $rfs; public function __construct(IOInterface $io, Config $config, EventDispatcher $eventDispatcher = null, RemoteFilesystem $rfs = null) { $this->io = $io; $this->config = $config; $this->eventDispatcher = $eventDispatcher; $this->rfs = $rfs; } /** * Searches for a package by it's name and version in managed repositories. * * @param string $name package name * @param string|\Composer\Semver\Constraint\ConstraintInterface $constraint package version or version constraint to match against * * @return PackageInterface|null */ public function findPackage($name, $constraint) { foreach ($this->repositories as $repository) { if ($package = $repository->findPackage($name, $constraint)) { return $package; } } } /** * Searches for all packages matching a name and optionally a version in managed repositories. * * @param string $name package name * @param string|\Composer\Semver\Constraint\ConstraintInterface $constraint package version or version constraint to match against * * @return array */ public function findPackages($name, $constraint) { $packages = array(); foreach ($this->repositories as $repository) { $packages = array_merge($packages, $repository->findPackages($name, $constraint)); } return $packages; } /** * Adds repository * * @param RepositoryInterface $repository repository instance */ public function addRepository(RepositoryInterface $repository) { $this->repositories[] = $repository; } /** * Adds a repository to the beginning of the chain * * This is useful when injecting additional repositories that should trump Packagist, e.g. from a plugin. * * @param RepositoryInterface $repository repository instance */ public function prependRepository(RepositoryInterface $repository) { array_unshift($this->repositories, $repository); } /** * Returns a new repository for a specific installation type. * * @param string $type repository type * @param array $config repository configuration * @throws \InvalidArgumentException if repository for provided type is not registered * @return RepositoryInterface */ public function createRepository($type, $config) { if (!isset($this->repositoryClasses[$type])) { throw new \InvalidArgumentException('Repository type is not registered: '.$type); } $class = $this->repositoryClasses[$type]; $reflMethod = new \ReflectionMethod($class, '__construct'); $params = $reflMethod->getParameters(); if (isset($params[4]) && $params[4]->getClass() && $params[4]->getClass()->getName() === 'Composer\Util\RemoteFilesystem') { return new $class($config, $this->io, $this->config, $this->eventDispatcher, $this->rfs); } return new $class($config, $this->io, $this->config, $this->eventDispatcher); } /** * Stores repository class for a specific installation type. * * @param string $type installation type * @param string $class class name of the repo implementation */ public function setRepositoryClass($type, $class) { $this->repositoryClasses[$type] = $class; } /** * Returns all repositories, except local one. * * @return array */ public function getRepositories() { return $this->repositories; } /** * Sets local repository for the project. * * @param WritableRepositoryInterface $repository repository instance */ public function setLocalRepository(WritableRepositoryInterface $repository) { $this->localRepository = $repository; } /** * Returns local repository for the project. * * @return WritableRepositoryInterface */ public function getLocalRepository() { return $this->localRepository; } } composer-1.0.0-beta2/src/Composer/Repository/RepositorySecurityException.php000066400000000000000000000007421267577262200274110ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; /** * Thrown when a security problem, like a broken or missing signature * * @author Eric Daspet */ class RepositorySecurityException extends \Exception { } composer-1.0.0-beta2/src/Composer/Repository/Vcs/000077500000000000000000000000001267577262200216425ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/Repository/Vcs/GitBitbucketDriver.php000066400000000000000000000120421267577262200261060ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Vcs; use Composer\Cache; use Composer\Config; use Composer\Json\JsonFile; use Composer\IO\IOInterface; /** * @author Per Bernhardt */ class GitBitbucketDriver extends VcsDriver implements VcsDriverInterface { protected $cache; protected $owner; protected $repository; protected $tags; protected $branches; protected $rootIdentifier; protected $infoCache = array(); /** * {@inheritDoc} */ public function initialize() { preg_match('#^https?://bitbucket\.org/([^/]+)/(.+?)\.git$#', $this->url, $match); $this->owner = $match[1]; $this->repository = $match[2]; $this->originUrl = 'bitbucket.org'; $this->cache = new Cache($this->io, $this->config->get('cache-repo-dir').'/'.$this->originUrl.'/'.$this->owner.'/'.$this->repository); } /** * {@inheritDoc} */ public function getRootIdentifier() { if (null === $this->rootIdentifier) { $resource = $this->getScheme() . '://api.bitbucket.org/1.0/repositories/'.$this->owner.'/'.$this->repository; $repoData = JsonFile::parseJson($this->getContents($resource), $resource); $this->rootIdentifier = !empty($repoData['main_branch']) ? $repoData['main_branch'] : 'master'; } return $this->rootIdentifier; } /** * {@inheritDoc} */ public function getUrl() { return $this->url; } /** * {@inheritDoc} */ public function getSource($identifier) { return array('type' => 'git', 'url' => $this->getUrl(), 'reference' => $identifier); } /** * {@inheritDoc} */ public function getDist($identifier) { $url = $this->getScheme() . '://bitbucket.org/'.$this->owner.'/'.$this->repository.'/get/'.$identifier.'.zip'; return array('type' => 'zip', 'url' => $url, 'reference' => $identifier, 'shasum' => ''); } /** * {@inheritDoc} */ public function getComposerInformation($identifier) { if (preg_match('{[a-f0-9]{40}}i', $identifier) && $res = $this->cache->read($identifier)) { $this->infoCache[$identifier] = JsonFile::parseJson($res); } if (!isset($this->infoCache[$identifier])) { $resource = $this->getScheme() . '://bitbucket.org/'.$this->owner.'/'.$this->repository.'/raw/'.$identifier.'/composer.json'; $composer = $this->getContents($resource); if (!$composer) { return; } $composer = JsonFile::parseJson($composer, $resource); if (empty($composer['time'])) { $resource = $this->getScheme() . '://api.bitbucket.org/1.0/repositories/'.$this->owner.'/'.$this->repository.'/changesets/'.$identifier; $changeset = JsonFile::parseJson($this->getContents($resource), $resource); $composer['time'] = $changeset['timestamp']; } if (preg_match('{[a-f0-9]{40}}i', $identifier)) { $this->cache->write($identifier, json_encode($composer)); } $this->infoCache[$identifier] = $composer; } return $this->infoCache[$identifier]; } /** * {@inheritDoc} */ public function getTags() { if (null === $this->tags) { $resource = $this->getScheme() . '://api.bitbucket.org/1.0/repositories/'.$this->owner.'/'.$this->repository.'/tags'; $tagsData = JsonFile::parseJson($this->getContents($resource), $resource); $this->tags = array(); foreach ($tagsData as $tag => $data) { $this->tags[$tag] = $data['raw_node']; } } return $this->tags; } /** * {@inheritDoc} */ public function getBranches() { if (null === $this->branches) { $resource = $this->getScheme() . '://api.bitbucket.org/1.0/repositories/'.$this->owner.'/'.$this->repository.'/branches'; $branchData = JsonFile::parseJson($this->getContents($resource), $resource); $this->branches = array(); foreach ($branchData as $branch => $data) { $this->branches[$branch] = $data['raw_node']; } } return $this->branches; } /** * {@inheritDoc} */ public static function supports(IOInterface $io, Config $config, $url, $deep = false) { if (!preg_match('#^https?://bitbucket\.org/([^/]+)/(.+?)\.git$#', $url)) { return false; } if (!extension_loaded('openssl')) { $io->writeError('Skipping Bitbucket git driver for '.$url.' because the OpenSSL PHP extension is missing.', true, IOInterface::VERBOSE); return false; } return true; } } composer-1.0.0-beta2/src/Composer/Repository/Vcs/GitDriver.php000066400000000000000000000177631267577262200242700ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Vcs; use Composer\Json\JsonFile; use Composer\Util\ProcessExecutor; use Composer\Util\Filesystem; use Composer\Util\Git as GitUtil; use Composer\IO\IOInterface; use Composer\Cache; use Composer\Config; /** * @author Jordi Boggiano */ class GitDriver extends VcsDriver { protected $cache; protected $tags; protected $branches; protected $rootIdentifier; protected $repoDir; protected $infoCache = array(); /** * {@inheritDoc} */ public function initialize() { if (Filesystem::isLocalPath($this->url)) { $this->repoDir = $this->url; $cacheUrl = realpath($this->url); } else { $this->repoDir = $this->config->get('cache-vcs-dir') . '/' . preg_replace('{[^a-z0-9.]}i', '-', $this->url) . '/'; GitUtil::cleanEnv(); $fs = new Filesystem(); $fs->ensureDirectoryExists(dirname($this->repoDir)); if (!is_writable(dirname($this->repoDir))) { throw new \RuntimeException('Can not clone '.$this->url.' to access package information. The "'.dirname($this->repoDir).'" directory is not writable by the current user.'); } if (preg_match('{^ssh://[^@]+@[^:]+:[^0-9]+}', $this->url)) { throw new \InvalidArgumentException('The source URL '.$this->url.' is invalid, ssh URLs should have a port number after ":".'."\n".'Use ssh://git@example.com:22/path or just git@example.com:path if you do not want to provide a password or custom port.'); } $gitUtil = new GitUtil($this->io, $this->config, $this->process, $fs); // update the repo if it is a valid git repository if (is_dir($this->repoDir) && 0 === $this->process->execute('git rev-parse --git-dir', $output, $this->repoDir) && trim($output) === '.') { try { $commandCallable = function ($url) { return sprintf('git remote set-url origin %s && git remote update --prune origin', ProcessExecutor::escape($url)); }; $gitUtil->runCommand($commandCallable, $this->url, $this->repoDir); } catch (\Exception $e) { $this->io->writeError('Failed to update '.$this->url.', package information from this repository may be outdated ('.$e->getMessage().')'); } } else { // clean up directory and do a fresh clone into it $fs->removeDirectory($this->repoDir); $repoDir = $this->repoDir; $commandCallable = function ($url) use ($repoDir) { return sprintf('git clone --mirror %s %s', ProcessExecutor::escape($url), ProcessExecutor::escape($repoDir)); }; $gitUtil->runCommand($commandCallable, $this->url, $this->repoDir, true); } $cacheUrl = $this->url; } $this->getTags(); $this->getBranches(); $this->cache = new Cache($this->io, $this->config->get('cache-repo-dir').'/'.preg_replace('{[^a-z0-9.]}i', '-', $cacheUrl)); } /** * {@inheritDoc} */ public function getRootIdentifier() { if (null === $this->rootIdentifier) { $this->rootIdentifier = 'master'; // select currently checked out branch if master is not available $this->process->execute('git branch --no-color', $output, $this->repoDir); $branches = $this->process->splitLines($output); if (!in_array('* master', $branches)) { foreach ($branches as $branch) { if ($branch && preg_match('{^\* +(\S+)}', $branch, $match)) { $this->rootIdentifier = $match[1]; break; } } } } return $this->rootIdentifier; } /** * {@inheritDoc} */ public function getUrl() { return $this->url; } /** * {@inheritDoc} */ public function getSource($identifier) { return array('type' => 'git', 'url' => $this->getUrl(), 'reference' => $identifier); } /** * {@inheritDoc} */ public function getDist($identifier) { return null; } /** * {@inheritDoc} */ public function getComposerInformation($identifier) { if (preg_match('{[a-f0-9]{40}}i', $identifier) && $res = $this->cache->read($identifier)) { $this->infoCache[$identifier] = JsonFile::parseJson($res); } if (!isset($this->infoCache[$identifier])) { $resource = sprintf('%s:composer.json', ProcessExecutor::escape($identifier)); $this->process->execute(sprintf('git show %s', $resource), $composer, $this->repoDir); if (!trim($composer)) { return; } $composer = JsonFile::parseJson($composer, $resource); if (empty($composer['time'])) { $this->process->execute(sprintf('git log -1 --format=%%at %s', ProcessExecutor::escape($identifier)), $output, $this->repoDir); $date = new \DateTime('@'.trim($output), new \DateTimeZone('UTC')); $composer['time'] = $date->format('Y-m-d H:i:s'); } if (preg_match('{[a-f0-9]{40}}i', $identifier)) { $this->cache->write($identifier, json_encode($composer)); } $this->infoCache[$identifier] = $composer; } return $this->infoCache[$identifier]; } /** * {@inheritDoc} */ public function getTags() { if (null === $this->tags) { $this->tags = array(); $this->process->execute('git show-ref --tags', $output, $this->repoDir); foreach ($output = $this->process->splitLines($output) as $tag) { if ($tag && preg_match('{^([a-f0-9]{40}) refs/tags/(\S+)$}', $tag, $match)) { $this->tags[$match[2]] = $match[1]; } } } return $this->tags; } /** * {@inheritDoc} */ public function getBranches() { if (null === $this->branches) { $branches = array(); $this->process->execute('git branch --no-color --no-abbrev -v', $output, $this->repoDir); foreach ($this->process->splitLines($output) as $branch) { if ($branch && !preg_match('{^ *[^/]+/HEAD }', $branch)) { if (preg_match('{^(?:\* )? *(\S+) *([a-f0-9]+)(?: .*)?$}', $branch, $match)) { $branches[$match[1]] = $match[2]; } } } $this->branches = $branches; } return $this->branches; } /** * {@inheritDoc} */ public static function supports(IOInterface $io, Config $config, $url, $deep = false) { if (preg_match('#(^git://|\.git$|git(?:olite)?@|//git\.|//github.com/)#i', $url)) { return true; } // local filesystem if (Filesystem::isLocalPath($url)) { $url = Filesystem::getPlatformPath($url); if (!is_dir($url)) { return false; } $process = new ProcessExecutor($io); // check whether there is a git repo in that path if ($process->execute('git tag', $output, $url) === 0) { return true; } } if (!$deep) { return false; } $process = new ProcessExecutor($io); if ($process->execute('git ls-remote --heads ' . ProcessExecutor::escape($url), $output) === 0) { return true; } return false; } } composer-1.0.0-beta2/src/Composer/Repository/Vcs/GitHubDriver.php000066400000000000000000000364311267577262200247200ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Vcs; use Composer\Config; use Composer\Downloader\TransportException; use Composer\Json\JsonFile; use Composer\Cache; use Composer\IO\IOInterface; use Composer\Util\GitHub; /** * @author Jordi Boggiano */ class GitHubDriver extends VcsDriver { protected $cache; protected $owner; protected $repository; protected $tags; protected $branches; protected $rootIdentifier; protected $hasIssues; protected $infoCache = array(); protected $isPrivate = false; /** * Git Driver * * @var GitDriver */ protected $gitDriver; /** * {@inheritDoc} */ public function initialize() { preg_match('#^(?:(?:https?|git)://([^/]+)/|git@([^:]+):)([^/]+)/(.+?)(?:\.git|/)?$#', $this->url, $match); $this->owner = $match[3]; $this->repository = $match[4]; $this->originUrl = !empty($match[1]) ? $match[1] : $match[2]; if ($this->originUrl === 'www.github.com') { $this->originUrl = 'github.com'; } $this->cache = new Cache($this->io, $this->config->get('cache-repo-dir').'/'.$this->originUrl.'/'.$this->owner.'/'.$this->repository); if (isset($this->repoConfig['no-api']) && $this->repoConfig['no-api']) { $this->setupGitDriver($this->url); return; } $this->fetchRootIdentifier(); } public function getRepositoryUrl() { return 'https://'.$this->originUrl.'/'.$this->owner.'/'.$this->repository; } /** * {@inheritDoc} */ public function getRootIdentifier() { if ($this->gitDriver) { return $this->gitDriver->getRootIdentifier(); } return $this->rootIdentifier; } /** * {@inheritDoc} */ public function getUrl() { if ($this->gitDriver) { return $this->gitDriver->getUrl(); } return 'https://' . $this->originUrl . '/'.$this->owner.'/'.$this->repository.'.git'; } /** * {@inheritDoc} */ protected function getApiUrl() { if ('github.com' === $this->originUrl) { $apiUrl = 'api.github.com'; } else { $apiUrl = $this->originUrl . '/api/v3'; } return 'https://' . $apiUrl; } /** * {@inheritDoc} */ public function getSource($identifier) { if ($this->gitDriver) { return $this->gitDriver->getSource($identifier); } if ($this->isPrivate) { // Private GitHub repositories should be accessed using the // SSH version of the URL. $url = $this->generateSshUrl(); } else { $url = $this->getUrl(); } return array('type' => 'git', 'url' => $url, 'reference' => $identifier); } /** * {@inheritDoc} */ public function getDist($identifier) { $url = $this->getApiUrl() . '/repos/'.$this->owner.'/'.$this->repository.'/zipball/'.$identifier; return array('type' => 'zip', 'url' => $url, 'reference' => $identifier, 'shasum' => ''); } /** * {@inheritDoc} */ public function getComposerInformation($identifier) { if ($this->gitDriver) { return $this->gitDriver->getComposerInformation($identifier); } if (preg_match('{[a-f0-9]{40}}i', $identifier) && $res = $this->cache->read($identifier)) { $this->infoCache[$identifier] = JsonFile::parseJson($res); } if (!isset($this->infoCache[$identifier])) { $notFoundRetries = 2; while ($notFoundRetries) { try { $resource = $this->getApiUrl() . '/repos/'.$this->owner.'/'.$this->repository.'/contents/composer.json?ref='.urlencode($identifier); $resource = JsonFile::parseJson($this->getContents($resource)); if (empty($resource['content']) || $resource['encoding'] !== 'base64' || !($composer = base64_decode($resource['content']))) { throw new \RuntimeException('Could not retrieve composer.json for '.$identifier); } break; } catch (TransportException $e) { if (404 !== $e->getCode()) { throw $e; } // TODO should be removed when possible // retry fetching if github returns a 404 since they happen randomly $notFoundRetries--; $composer = null; } } if ($composer) { $composer = JsonFile::parseJson($composer, $resource); if (empty($composer['time'])) { $resource = $this->getApiUrl() . '/repos/'.$this->owner.'/'.$this->repository.'/commits/'.urlencode($identifier); $commit = JsonFile::parseJson($this->getContents($resource), $resource); $composer['time'] = $commit['commit']['committer']['date']; } if (!isset($composer['support']['source'])) { $label = array_search($identifier, $this->getTags()) ?: array_search($identifier, $this->getBranches()) ?: $identifier; $composer['support']['source'] = sprintf('https://%s/%s/%s/tree/%s', $this->originUrl, $this->owner, $this->repository, $label); } if (!isset($composer['support']['issues']) && $this->hasIssues) { $composer['support']['issues'] = sprintf('https://%s/%s/%s/issues', $this->originUrl, $this->owner, $this->repository); } } if (preg_match('{[a-f0-9]{40}}i', $identifier)) { $this->cache->write($identifier, json_encode($composer)); } $this->infoCache[$identifier] = $composer; } return $this->infoCache[$identifier]; } /** * {@inheritDoc} */ public function getTags() { if ($this->gitDriver) { return $this->gitDriver->getTags(); } if (null === $this->tags) { $this->tags = array(); $resource = $this->getApiUrl() . '/repos/'.$this->owner.'/'.$this->repository.'/tags?per_page=100'; do { $tagsData = JsonFile::parseJson($this->getContents($resource), $resource); foreach ($tagsData as $tag) { $this->tags[$tag['name']] = $tag['commit']['sha']; } $resource = $this->getNextPage(); } while ($resource); } return $this->tags; } /** * {@inheritDoc} */ public function getBranches() { if ($this->gitDriver) { return $this->gitDriver->getBranches(); } if (null === $this->branches) { $this->branches = array(); $resource = $this->getApiUrl() . '/repos/'.$this->owner.'/'.$this->repository.'/git/refs/heads?per_page=100'; $branchBlacklist = array('gh-pages'); do { $branchData = JsonFile::parseJson($this->getContents($resource), $resource); foreach ($branchData as $branch) { $name = substr($branch['ref'], 11); if (!in_array($name, $branchBlacklist)) { $this->branches[$name] = $branch['object']['sha']; } } $resource = $this->getNextPage(); } while ($resource); } return $this->branches; } /** * {@inheritDoc} */ public static function supports(IOInterface $io, Config $config, $url, $deep = false) { if (!preg_match('#^((?:https?|git)://([^/]+)/|git@([^:]+):)([^/]+)/(.+?)(?:\.git|/)?$#', $url, $matches)) { return false; } $originUrl = !empty($matches[2]) ? $matches[2] : $matches[3]; if (!in_array(preg_replace('{^www\.}i', '', $originUrl), $config->get('github-domains'))) { return false; } if (!extension_loaded('openssl')) { $io->writeError('Skipping GitHub driver for '.$url.' because the OpenSSL PHP extension is missing.', true, IOInterface::VERBOSE); return false; } return true; } /** * Generate an SSH URL * * @return string */ protected function generateSshUrl() { return 'git@' . $this->originUrl . ':'.$this->owner.'/'.$this->repository.'.git'; } /** * {@inheritDoc} */ protected function getContents($url, $fetchingRepoData = false) { try { return parent::getContents($url); } catch (TransportException $e) { $gitHubUtil = new GitHub($this->io, $this->config, $this->process, $this->remoteFilesystem); switch ($e->getCode()) { case 401: case 404: // try to authorize only if we are fetching the main /repos/foo/bar data, otherwise it must be a real 404 if (!$fetchingRepoData) { throw $e; } if ($gitHubUtil->authorizeOAuth($this->originUrl)) { return parent::getContents($url); } if (!$this->io->isInteractive()) { return $this->attemptCloneFallback(); } $gitHubUtil->authorizeOAuthInteractively($this->originUrl, 'Your GitHub credentials are required to fetch private repository metadata ('.$this->url.')'); return parent::getContents($url); case 403: if (!$this->io->hasAuthentication($this->originUrl) && $gitHubUtil->authorizeOAuth($this->originUrl)) { return parent::getContents($url); } if (!$this->io->isInteractive() && $fetchingRepoData) { return $this->attemptCloneFallback(); } $rateLimited = false; foreach ($e->getHeaders() as $header) { if (preg_match('{^X-RateLimit-Remaining: *0$}i', trim($header))) { $rateLimited = true; } } if (!$this->io->hasAuthentication($this->originUrl)) { if (!$this->io->isInteractive()) { $this->io->writeError('GitHub API limit exhausted. Failed to get metadata for the '.$this->url.' repository, try running in interactive mode so that you can enter your GitHub credentials to increase the API limit'); throw $e; } $gitHubUtil->authorizeOAuthInteractively($this->originUrl, 'API limit exhausted. Enter your GitHub credentials to get a larger API limit ('.$this->url.')'); return parent::getContents($url); } if ($rateLimited) { $rateLimit = $this->getRateLimit($e->getHeaders()); $this->io->writeError(sprintf( 'GitHub API limit (%d calls/hr) is exhausted. You are already authorized so you have to wait until %s before doing more requests', $rateLimit['limit'], $rateLimit['reset'] )); } throw $e; default: throw $e; } } } /** * Extract ratelimit from response. * * @param array $headers Headers from Composer\Downloader\TransportException. * * @return array Associative array with the keys limit and reset. */ protected function getRateLimit(array $headers) { $rateLimit = array( 'limit' => '?', 'reset' => '?', ); foreach ($headers as $header) { $header = trim($header); if (false === strpos($header, 'X-RateLimit-')) { continue; } list($type, $value) = explode(':', $header, 2); switch ($type) { case 'X-RateLimit-Limit': $rateLimit['limit'] = (int) trim($value); break; case 'X-RateLimit-Reset': $rateLimit['reset'] = date('Y-m-d H:i:s', (int) trim($value)); break; } } return $rateLimit; } /** * Fetch root identifier from GitHub * * @throws TransportException */ protected function fetchRootIdentifier() { $repoDataUrl = $this->getApiUrl() . '/repos/'.$this->owner.'/'.$this->repository; $repoData = JsonFile::parseJson($this->getContents($repoDataUrl, true), $repoDataUrl); if (null === $repoData && null !== $this->gitDriver) { return; } $this->owner = $repoData['owner']['login']; $this->repository = $repoData['name']; $this->isPrivate = !empty($repoData['private']); if (isset($repoData['default_branch'])) { $this->rootIdentifier = $repoData['default_branch']; } elseif (isset($repoData['master_branch'])) { $this->rootIdentifier = $repoData['master_branch']; } else { $this->rootIdentifier = 'master'; } $this->hasIssues = !empty($repoData['has_issues']); } protected function attemptCloneFallback() { $this->isPrivate = true; try { // If this repository may be private (hard to say for sure, // GitHub returns 404 for private repositories) and we // cannot ask for authentication credentials (because we // are not interactive) then we fallback to GitDriver. $this->setupGitDriver($this->generateSshUrl()); return; } catch (\RuntimeException $e) { $this->gitDriver = null; $this->io->writeError('Failed to clone the '.$this->generateSshUrl().' repository, try running in interactive mode so that you can enter your GitHub credentials'); throw $e; } } protected function setupGitDriver($url) { $this->gitDriver = new GitDriver( array('url' => $url), $this->io, $this->config, $this->process, $this->remoteFilesystem ); $this->gitDriver->initialize(); } protected function getNextPage() { $headers = $this->remoteFilesystem->getLastHeaders(); foreach ($headers as $header) { if (substr($header, 0, 5) === 'Link:') { $links = explode(',', substr($header, 5)); foreach ($links as $link) { if (preg_match('{<(.+?)>; *rel="next"}', $link, $match)) { return $match[1]; } } } } } } composer-1.0.0-beta2/src/Composer/Repository/Vcs/GitLabDriver.php000066400000000000000000000250721267577262200246770ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Vcs; use Composer\Config; use Composer\Cache; use Composer\IO\IOInterface; use Composer\Json\JsonFile; use Composer\Downloader\TransportException; use Composer\Util\RemoteFilesystem; use Composer\Util\GitLab; /** * Driver for GitLab API, use the Git driver for local checkouts. * * @author Henrik Bjørnskov * @author Jérôme Tamarelle */ class GitLabDriver extends VcsDriver { private $scheme; private $owner; private $repository; private $cache; private $infoCache = array(); /** * @var array Project data returned by GitLab API */ private $project; /** * @var array Keeps commits returned by GitLab API */ private $commits = array(); /** * @var array List of tag => reference */ private $tags; /** * @var array List of branch => reference */ private $branches; /** * Git Driver * * @var GitDriver */ protected $gitDriver; const URL_REGEX = '#^(?:(?Phttps?)://(?P.+?)/|git@(?P[^:]+):)(?P[^/]+)/(?P[^/]+?)(?:\.git|/)?$#'; /** * Extracts information from the repository url. * SSH urls uses https by default. * * {@inheritDoc} */ public function initialize() { if (!preg_match(self::URL_REGEX, $this->url, $match)) { throw new \InvalidArgumentException('The URL provided is invalid. It must be the HTTP URL of a GitLab project.'); } $this->scheme = !empty($match['scheme']) ? $match['scheme'] : 'https'; $this->originUrl = !empty($match['domain']) ? $match['domain'] : $match['domain2']; $this->owner = $match['owner']; $this->repository = preg_replace('#(\.git)$#', '', $match['repo']); $this->cache = new Cache($this->io, $this->config->get('cache-repo-dir').'/'.$this->originUrl.'/'.$this->owner.'/'.$this->repository); $this->fetchProject(); } /** * Updates the RemoteFilesystem instance. * Mainly useful for tests. * * @internal */ public function setRemoteFilesystem(RemoteFilesystem $remoteFilesystem) { $this->remoteFilesystem = $remoteFilesystem; } /** * Fetches the composer.json file from the project by a identifier. * * if specific keys arent present it will try and infer them by default values. * * {@inheritDoc} */ public function getComposerInformation($identifier) { // Convert the root identifier to a cachable commit id if (!preg_match('{[a-f0-9]{40}}i', $identifier)) { $branches = $this->getBranches(); if (isset($branches[$identifier])) { $identifier = $branches[$identifier]; } } if (isset($this->infoCache[$identifier])) { return $this->infoCache[$identifier]; } if (preg_match('{[a-f0-9]{40}}i', $identifier) && $res = $this->cache->read($identifier)) { return $this->infoCache[$identifier] = JsonFile::parseJson($res, $res); } try { $composer = $this->fetchComposerFile($identifier); } catch (TransportException $e) { if ($e->getCode() !== 404) { throw $e; } $composer = false; } if ($composer && !isset($composer['time']) && isset($this->commits[$identifier])) { $composer['time'] = $this->commits[$identifier]['committed_date']; } if (preg_match('{[a-f0-9]{40}}i', $identifier)) { $this->cache->write($identifier, json_encode($composer)); } return $this->infoCache[$identifier] = $composer; } /** * {@inheritDoc} */ public function getRepositoryUrl() { return $this->project['ssh_url_to_repo']; } /** * {@inheritDoc} */ public function getUrl() { return $this->project['web_url']; } /** * {@inheritDoc} */ public function getDist($identifier) { $url = $this->getApiUrl().'/repository/archive.zip?sha='.$identifier; return array('type' => 'zip', 'url' => $url, 'reference' => $identifier, 'shasum' => ''); } /** * {@inheritDoc} */ public function getSource($identifier) { return array('type' => 'git', 'url' => $this->getRepositoryUrl(), 'reference' => $identifier); } /** * {@inheritDoc} */ public function getRootIdentifier() { return $this->project['default_branch']; } /** * {@inheritDoc} */ public function getBranches() { if (!$this->branches) { $this->branches = $this->getReferences('branches'); } return $this->branches; } /** * {@inheritDoc} */ public function getTags() { if (!$this->tags) { $this->tags = $this->getReferences('tags'); } return $this->tags; } /** * Fetches composer.json file from the repository through api. * * @param string $identifier * * @return array */ protected function fetchComposerFile($identifier) { $resource = $this->getApiUrl().'/repository/blobs/'.$identifier.'?filepath=composer.json'; return JsonFile::parseJson($this->getContents($resource), $resource); } /** * @return string Base URL for GitLab API v3 */ public function getApiUrl() { return $this->scheme.'://'.$this->originUrl.'/api/v3/projects/'.$this->owner.'%2F'.$this->repository; } /** * @param string $type * * @return string[] where keys are named references like tags or branches and the value a sha */ protected function getReferences($type) { $resource = $this->getApiUrl().'/repository/'.$type; $data = JsonFile::parseJson($this->getContents($resource), $resource); $references = array(); foreach ($data as $datum) { $references[$datum['name']] = $datum['commit']['id']; // Keep the last commit date of a reference to avoid // unnecessary API call when retrieving the composer file. $this->commits[$datum['commit']['id']] = $datum['commit']; } return $references; } protected function fetchProject() { // we need to fetch the default branch from the api $resource = $this->getApiUrl(); $this->project = JsonFile::parseJson($this->getContents($resource, true), $resource); } protected function attemptCloneFallback() { try { // If this repository may be private and we // cannot ask for authentication credentials (because we // are not interactive) then we fallback to GitDriver. $this->setupGitDriver($this->generateSshUrl()); return; } catch (\RuntimeException $e) { $this->gitDriver = null; $this->io->writeError('Failed to clone the '.$this->generateSshUrl().' repository, try running in interactive mode so that you can enter your credentials'); throw $e; } } /** * Generate an SSH URL * * @return string */ protected function generateSshUrl() { return 'git@' . $this->originUrl . ':'.$this->owner.'/'.$this->repository.'.git'; } protected function setupGitDriver($url) { $this->gitDriver = new GitDriver( array('url' => $url), $this->io, $this->config, $this->process, $this->remoteFilesystem ); $this->gitDriver->initialize(); } /** * {@inheritDoc} */ protected function getContents($url, $fetchingRepoData = false) { try { return parent::getContents($url); } catch (TransportException $e) { $gitLabUtil = new GitLab($this->io, $this->config, $this->process, $this->remoteFilesystem); switch ($e->getCode()) { case 401: case 404: // try to authorize only if we are fetching the main /repos/foo/bar data, otherwise it must be a real 404 if (!$fetchingRepoData) { throw $e; } if ($gitLabUtil->authorizeOAuth($this->originUrl)) { return parent::getContents($url); } if (!$this->io->isInteractive()) { return $this->attemptCloneFallback(); } $this->io->writeError('Failed to download ' . $this->owner . '/' . $this->repository . ':' . $e->getMessage() . ''); $gitLabUtil->authorizeOAuthInteractively($this->originUrl, 'Your credentials are required to fetch private repository metadata ('.$this->url.')'); return parent::getContents($url); case 403: if (!$this->io->hasAuthentication($this->originUrl) && $gitLabUtil->authorizeOAuth($this->originUrl)) { return parent::getContents($url); } if (!$this->io->isInteractive() && $fetchingRepoData) { return $this->attemptCloneFallback(); } throw $e; default: throw $e; } } } /** * Uses the config `gitlab-domains` to see if the driver supports the url for the * repository given. * * {@inheritDoc} */ public static function supports(IOInterface $io, Config $config, $url, $deep = false) { if (!preg_match(self::URL_REGEX, $url, $match)) { return false; } $scheme = !empty($match['scheme']) ? $match['scheme'] : 'https'; $originUrl = !empty($match['domain']) ? $match['domain'] : $match['domain2']; if (!in_array($originUrl, (array) $config->get('gitlab-domains'))) { return false; } if ('https' === $scheme && !extension_loaded('openssl')) { $io->writeError('Skipping GitLab driver for '.$url.' because the OpenSSL PHP extension is missing.', true, IOInterface::VERBOSE); return false; } return true; } } composer-1.0.0-beta2/src/Composer/Repository/Vcs/HgBitbucketDriver.php000066400000000000000000000131761267577262200257320ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Vcs; use Composer\Cache; use Composer\Config; use Composer\Json\JsonFile; use Composer\IO\IOInterface; /** * @author Per Bernhardt */ class HgBitbucketDriver extends VcsDriver { protected $cache; protected $owner; protected $repository; protected $tags; protected $branches; protected $rootIdentifier; protected $infoCache = array(); /** * {@inheritDoc} */ public function initialize() { preg_match('#^https?://bitbucket\.org/([^/]+)/([^/]+)/?$#', $this->url, $match); $this->owner = $match[1]; $this->repository = $match[2]; $this->originUrl = 'bitbucket.org'; $this->cache = new Cache($this->io, $this->config->get('cache-repo-dir').'/'.$this->originUrl.'/'.$this->owner.'/'.$this->repository); } /** * {@inheritDoc} */ public function getRootIdentifier() { if (null === $this->rootIdentifier) { $resource = $this->getScheme() . '://bitbucket.org/api/1.0/repositories/'.$this->owner.'/'.$this->repository.'/tags'; $repoData = JsonFile::parseJson($this->getContents($resource), $resource); if (array() === $repoData || !isset($repoData['tip'])) { throw new \RuntimeException($this->url.' does not appear to be a mercurial repository, use '.$this->url.'.git if this is a git bitbucket repository'); } $this->rootIdentifier = $repoData['tip']['raw_node']; } return $this->rootIdentifier; } /** * {@inheritDoc} */ public function getUrl() { return $this->url; } /** * {@inheritDoc} */ public function getSource($identifier) { return array('type' => 'hg', 'url' => $this->getUrl(), 'reference' => $identifier); } /** * {@inheritDoc} */ public function getDist($identifier) { $url = $this->getScheme() . '://bitbucket.org/'.$this->owner.'/'.$this->repository.'/get/'.$identifier.'.zip'; return array('type' => 'zip', 'url' => $url, 'reference' => $identifier, 'shasum' => ''); } /** * {@inheritDoc} */ public function getComposerInformation($identifier) { if (preg_match('{[a-f0-9]{40}}i', $identifier) && $res = $this->cache->read($identifier)) { $this->infoCache[$identifier] = JsonFile::parseJson($res); } if (!isset($this->infoCache[$identifier])) { $resource = $this->getScheme() . '://bitbucket.org/api/1.0/repositories/'.$this->owner.'/'.$this->repository.'/src/'.$identifier.'/composer.json'; $repoData = JsonFile::parseJson($this->getContents($resource), $resource); // Bitbucket does not send different response codes for found and // not found files, so we have to check the response structure. // found: {node: ..., data: ..., size: ..., ...} // not found: {node: ..., files: [...], directories: [...], ...} if (!array_key_exists('data', $repoData)) { return; } $composer = JsonFile::parseJson($repoData['data'], $resource); if (empty($composer['time'])) { $resource = $this->getScheme() . '://bitbucket.org/api/1.0/repositories/'.$this->owner.'/'.$this->repository.'/changesets/'.$identifier; $changeset = JsonFile::parseJson($this->getContents($resource), $resource); $composer['time'] = $changeset['timestamp']; } if (preg_match('{[a-f0-9]{40}}i', $identifier)) { $this->cache->write($identifier, json_encode($composer)); } $this->infoCache[$identifier] = $composer; } return $this->infoCache[$identifier]; } /** * {@inheritDoc} */ public function getTags() { if (null === $this->tags) { $resource = $this->getScheme() . '://bitbucket.org/api/1.0/repositories/'.$this->owner.'/'.$this->repository.'/tags'; $tagsData = JsonFile::parseJson($this->getContents($resource), $resource); $this->tags = array(); foreach ($tagsData as $tag => $data) { $this->tags[$tag] = $data['raw_node']; } unset($this->tags['tip']); } return $this->tags; } /** * {@inheritDoc} */ public function getBranches() { if (null === $this->branches) { $resource = $this->getScheme() . '://bitbucket.org/api/1.0/repositories/'.$this->owner.'/'.$this->repository.'/branches'; $branchData = JsonFile::parseJson($this->getContents($resource), $resource); $this->branches = array(); foreach ($branchData as $branch => $data) { $this->branches[$branch] = $data['raw_node']; } } return $this->branches; } /** * {@inheritDoc} */ public static function supports(IOInterface $io, Config $config, $url, $deep = false) { if (!preg_match('#^https?://bitbucket\.org/([^/]+)/([^/]+)/?$#', $url)) { return false; } if (!extension_loaded('openssl')) { $io->writeError('Skipping Bitbucket hg driver for '.$url.' because the OpenSSL PHP extension is missing.', true, IOInterface::VERBOSE); return false; } return true; } } composer-1.0.0-beta2/src/Composer/Repository/Vcs/HgDriver.php000066400000000000000000000163241267577262200240730ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Vcs; use Composer\Config; use Composer\Json\JsonFile; use Composer\Util\ProcessExecutor; use Composer\Util\Filesystem; use Composer\IO\IOInterface; use Composer\Downloader\TransportException; /** * @author Per Bernhardt */ class HgDriver extends VcsDriver { protected $tags; protected $branches; protected $rootIdentifier; protected $repoDir; protected $infoCache = array(); /** * {@inheritDoc} */ public function initialize() { if (Filesystem::isLocalPath($this->url)) { $this->repoDir = $this->url; } else { $cacheDir = $this->config->get('cache-vcs-dir'); $this->repoDir = $cacheDir . '/' . preg_replace('{[^a-z0-9]}i', '-', $this->url) . '/'; $fs = new Filesystem(); $fs->ensureDirectoryExists($cacheDir); if (!is_writable(dirname($this->repoDir))) { throw new \RuntimeException('Can not clone '.$this->url.' to access package information. The "'.$cacheDir.'" directory is not writable by the current user.'); } if (preg_match('{^http:}i', $this->url) && $this->config->get('secure-http')) { throw new TransportException("Your configuration does not allow connection to $url. See https://getcomposer.org/doc/06-config.md#secure-http for details."); } // update the repo if it is a valid hg repository if (is_dir($this->repoDir) && 0 === $this->process->execute('hg summary', $output, $this->repoDir)) { if (0 !== $this->process->execute('hg pull', $output, $this->repoDir)) { $this->io->writeError('Failed to update '.$this->url.', package information from this repository may be outdated ('.$this->process->getErrorOutput().')'); } } else { // clean up directory and do a fresh clone into it $fs->removeDirectory($this->repoDir); if (0 !== $this->process->execute(sprintf('hg clone --noupdate %s %s', ProcessExecutor::escape($this->url), ProcessExecutor::escape($this->repoDir)), $output, $cacheDir)) { $output = $this->process->getErrorOutput(); if (0 !== $this->process->execute('hg --version', $ignoredOutput)) { throw new \RuntimeException('Failed to clone '.$this->url.', hg was not found, check that it is installed and in your PATH env.' . "\n\n" . $this->process->getErrorOutput()); } throw new \RuntimeException('Failed to clone '.$this->url.', could not read packages from it' . "\n\n" .$output); } } } $this->getTags(); $this->getBranches(); } /** * {@inheritDoc} */ public function getRootIdentifier() { if (null === $this->rootIdentifier) { $this->process->execute(sprintf('hg tip --template "{node}"'), $output, $this->repoDir); $output = $this->process->splitLines($output); $this->rootIdentifier = $output[0]; } return $this->rootIdentifier; } /** * {@inheritDoc} */ public function getUrl() { return $this->url; } /** * {@inheritDoc} */ public function getSource($identifier) { return array('type' => 'hg', 'url' => $this->getUrl(), 'reference' => $identifier); } /** * {@inheritDoc} */ public function getDist($identifier) { return null; } /** * {@inheritDoc} */ public function getComposerInformation($identifier) { if (!isset($this->infoCache[$identifier])) { $this->process->execute(sprintf('hg cat -r %s composer.json', ProcessExecutor::escape($identifier)), $composer, $this->repoDir); if (!trim($composer)) { return; } $composer = JsonFile::parseJson($composer, $identifier); if (empty($composer['time'])) { $this->process->execute(sprintf('hg log --template "{date|rfc3339date}" -r %s', ProcessExecutor::escape($identifier)), $output, $this->repoDir); $date = new \DateTime(trim($output), new \DateTimeZone('UTC')); $composer['time'] = $date->format('Y-m-d H:i:s'); } $this->infoCache[$identifier] = $composer; } return $this->infoCache[$identifier]; } /** * {@inheritDoc} */ public function getTags() { if (null === $this->tags) { $tags = array(); $this->process->execute('hg tags', $output, $this->repoDir); foreach ($this->process->splitLines($output) as $tag) { if ($tag && preg_match('(^([^\s]+)\s+\d+:(.*)$)', $tag, $match)) { $tags[$match[1]] = $match[2]; } } unset($tags['tip']); $this->tags = $tags; } return $this->tags; } /** * {@inheritDoc} */ public function getBranches() { if (null === $this->branches) { $branches = array(); $bookmarks = array(); $this->process->execute('hg branches', $output, $this->repoDir); foreach ($this->process->splitLines($output) as $branch) { if ($branch && preg_match('(^([^\s]+)\s+\d+:([a-f0-9]+))', $branch, $match)) { $branches[$match[1]] = $match[2]; } } $this->process->execute('hg bookmarks', $output, $this->repoDir); foreach ($this->process->splitLines($output) as $branch) { if ($branch && preg_match('(^(?:[\s*]*)([^\s]+)\s+\d+:(.*)$)', $branch, $match)) { $bookmarks[$match[1]] = $match[2]; } } // Branches will have preference over bookmarks $this->branches = array_merge($bookmarks, $branches); } return $this->branches; } /** * {@inheritDoc} */ public static function supports(IOInterface $io, Config $config, $url, $deep = false) { if (preg_match('#(^(?:https?|ssh)://(?:[^@]@)?bitbucket.org|https://(?:.*?)\.kilnhg.com)#i', $url)) { return true; } // local filesystem if (Filesystem::isLocalPath($url)) { $url = Filesystem::getPlatformPath($url); if (!is_dir($url)) { return false; } $process = new ProcessExecutor(); // check whether there is a hg repo in that path if ($process->execute('hg summary', $output, $url) === 0) { return true; } } if (!$deep) { return false; } $processExecutor = new ProcessExecutor(); $exit = $processExecutor->execute(sprintf('hg identify %s', ProcessExecutor::escape($url)), $ignored); return $exit === 0; } } composer-1.0.0-beta2/src/Composer/Repository/Vcs/PerforceDriver.php000066400000000000000000000075771267577262200253140ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Vcs; use Composer\Config; use Composer\IO\IOInterface; use Composer\Util\ProcessExecutor; use Composer\Util\Perforce; /** * @author Matt Whittom */ class PerforceDriver extends VcsDriver { protected $depot; protected $branch; protected $perforce; protected $composerInfo; protected $composerInfoIdentifier; /** * {@inheritDoc} */ public function initialize() { $this->depot = $this->repoConfig['depot']; $this->branch = ''; if (!empty($this->repoConfig['branch'])) { $this->branch = $this->repoConfig['branch']; } $this->initPerforce($this->repoConfig); $this->perforce->p4Login($this->io); $this->perforce->checkStream($this->depot); $this->perforce->writeP4ClientSpec(); $this->perforce->connectClient(); return true; } private function initPerforce($repoConfig) { if (!empty($this->perforce)) { return; } $repoDir = $this->config->get('cache-vcs-dir') . '/' . $this->depot; $this->perforce = Perforce::create($repoConfig, $this->getUrl(), $repoDir, $this->process, $this->io); } /** * {@inheritDoc} */ public function getComposerInformation($identifier) { if (!empty($this->composerInfoIdentifier)) { if (strcmp($identifier, $this->composerInfoIdentifier) === 0) { return $this->composerInfo; } } $composer_info = $this->perforce->getComposerInformation($identifier); return $composer_info; } /** * {@inheritDoc} */ public function getRootIdentifier() { return $this->branch; } /** * {@inheritDoc} */ public function getBranches() { $branches = $this->perforce->getBranches(); return $branches; } /** * {@inheritDoc} */ public function getTags() { $tags = $this->perforce->getTags(); return $tags; } /** * {@inheritDoc} */ public function getDist($identifier) { return null; } /** * {@inheritDoc} */ public function getSource($identifier) { $source = array( 'type' => 'perforce', 'url' => $this->repoConfig['url'], 'reference' => $identifier, 'p4user' => $this->perforce->getUser(), ); return $source; } /** * {@inheritDoc} */ public function getUrl() { return $this->url; } /** * {@inheritDoc} */ public function hasComposerFile($identifier) { $this->composerInfo = $this->perforce->getComposerInformation('//' . $this->depot . '/' . $identifier); $this->composerInfoIdentifier = $identifier; return !empty($this->composerInfo); } /** * {@inheritDoc} */ public function getContents($url) { return false; } /** * {@inheritDoc} */ public static function supports(IOInterface $io, Config $config, $url, $deep = false) { if ($deep || preg_match('#\b(perforce|p4)\b#i', $url)) { return Perforce::checkServerExists($url, new ProcessExecutor($io)); } return false; } /** * {@inheritDoc} */ public function cleanup() { $this->perforce->cleanupClientSpec(); $this->perforce = null; } public function getDepot() { return $this->depot; } public function getBranch() { return $this->branch; } } composer-1.0.0-beta2/src/Composer/Repository/Vcs/SvnDriver.php000066400000000000000000000251621267577262200243030ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Vcs; use Composer\Cache; use Composer\Config; use Composer\Json\JsonFile; use Composer\Util\ProcessExecutor; use Composer\Util\Filesystem; use Composer\Util\Svn as SvnUtil; use Composer\IO\IOInterface; use Composer\Downloader\TransportException; /** * @author Jordi Boggiano * @author Till Klampaeckel */ class SvnDriver extends VcsDriver { /** * @var Cache */ protected $cache; protected $baseUrl; protected $tags; protected $branches; protected $rootIdentifier; protected $infoCache = array(); protected $trunkPath = 'trunk'; protected $branchesPath = 'branches'; protected $tagsPath = 'tags'; protected $packagePath = ''; protected $cacheCredentials = true; /** * @var \Composer\Util\Svn */ private $util; /** * {@inheritDoc} */ public function initialize() { $this->url = $this->baseUrl = rtrim(self::normalizeUrl($this->url), '/'); SvnUtil::cleanEnv(); if (isset($this->repoConfig['trunk-path'])) { $this->trunkPath = $this->repoConfig['trunk-path']; } if (isset($this->repoConfig['branches-path'])) { $this->branchesPath = $this->repoConfig['branches-path']; } if (isset($this->repoConfig['tags-path'])) { $this->tagsPath = $this->repoConfig['tags-path']; } if (array_key_exists('svn-cache-credentials', $this->repoConfig)) { $this->cacheCredentials = (bool) $this->repoConfig['svn-cache-credentials']; } if (isset($this->repoConfig['package-path'])) { $this->packagePath = '/' . trim($this->repoConfig['package-path'], '/'); } if (false !== ($pos = strrpos($this->url, '/' . $this->trunkPath))) { $this->baseUrl = substr($this->url, 0, $pos); } $this->cache = new Cache($this->io, $this->config->get('cache-repo-dir').'/'.preg_replace('{[^a-z0-9.]}i', '-', $this->baseUrl)); $this->getBranches(); $this->getTags(); } /** * {@inheritDoc} */ public function getRootIdentifier() { return $this->rootIdentifier ?: $this->trunkPath; } /** * {@inheritDoc} */ public function getUrl() { return $this->url; } /** * {@inheritDoc} */ public function getSource($identifier) { return array('type' => 'svn', 'url' => $this->baseUrl, 'reference' => $identifier); } /** * {@inheritDoc} */ public function getDist($identifier) { return null; } /** * {@inheritDoc} */ public function getComposerInformation($identifier) { $identifier = '/' . trim($identifier, '/') . '/'; if ($res = $this->cache->read($identifier.'.json')) { $this->infoCache[$identifier] = JsonFile::parseJson($res); } if (!isset($this->infoCache[$identifier])) { preg_match('{^(.+?)(@\d+)?/$}', $identifier, $match); if (!empty($match[2])) { $path = $match[1]; $rev = $match[2]; } else { $path = $identifier; $rev = ''; } try { $resource = $path.'composer.json'; $output = $this->execute('svn cat', $this->baseUrl . $resource . $rev); if (!trim($output)) { return; } } catch (\RuntimeException $e) { throw new TransportException($e->getMessage()); } $composer = JsonFile::parseJson($output, $this->baseUrl . $resource . $rev); if (empty($composer['time'])) { $output = $this->execute('svn info', $this->baseUrl . $path . $rev); foreach ($this->process->splitLines($output) as $line) { if ($line && preg_match('{^Last Changed Date: ([^(]+)}', $line, $match)) { $date = new \DateTime($match[1], new \DateTimeZone('UTC')); $composer['time'] = $date->format('Y-m-d H:i:s'); break; } } } $this->cache->write($identifier.'.json', json_encode($composer)); $this->infoCache[$identifier] = $composer; } return $this->infoCache[$identifier]; } /** * {@inheritDoc} */ public function getTags() { if (null === $this->tags) { $this->tags = array(); if ($this->tagsPath !== false) { $output = $this->execute('svn ls --verbose', $this->baseUrl . '/' . $this->tagsPath); if ($output) { foreach ($this->process->splitLines($output) as $line) { $line = trim($line); if ($line && preg_match('{^\s*(\S+).*?(\S+)\s*$}', $line, $match)) { if (isset($match[1]) && isset($match[2]) && $match[2] !== './') { $this->tags[rtrim($match[2], '/')] = $this->buildIdentifier( '/' . $this->tagsPath . '/' . $match[2], $match[1] ); } } } } } } return $this->tags; } /** * {@inheritDoc} */ public function getBranches() { if (null === $this->branches) { $this->branches = array(); if (false === $this->trunkPath) { $trunkParent = $this->baseUrl . '/'; } else { $trunkParent = $this->baseUrl . '/' . $this->trunkPath; } $output = $this->execute('svn ls --verbose', $trunkParent); if ($output) { foreach ($this->process->splitLines($output) as $line) { $line = trim($line); if ($line && preg_match('{^\s*(\S+).*?(\S+)\s*$}', $line, $match)) { if (isset($match[1]) && isset($match[2]) && $match[2] === './') { $this->branches['trunk'] = $this->buildIdentifier( '/' . $this->trunkPath, $match[1] ); $this->rootIdentifier = $this->branches['trunk']; break; } } } } unset($output); if ($this->branchesPath !== false) { $output = $this->execute('svn ls --verbose', $this->baseUrl . '/' . $this->branchesPath); if ($output) { foreach ($this->process->splitLines(trim($output)) as $line) { $line = trim($line); if ($line && preg_match('{^\s*(\S+).*?(\S+)\s*$}', $line, $match)) { if (isset($match[1]) && isset($match[2]) && $match[2] !== './') { $this->branches[rtrim($match[2], '/')] = $this->buildIdentifier( '/' . $this->branchesPath . '/' . $match[2], $match[1] ); } } } } } } return $this->branches; } /** * {@inheritDoc} */ public static function supports(IOInterface $io, Config $config, $url, $deep = false) { $url = self::normalizeUrl($url); if (preg_match('#(^svn://|^svn\+ssh://|svn\.)#i', $url)) { return true; } // proceed with deep check for local urls since they are fast to process if (!$deep && !Filesystem::isLocalPath($url)) { return false; } $processExecutor = new ProcessExecutor(); $exit = $processExecutor->execute( "svn info --non-interactive {$url}", $ignoredOutput ); if ($exit === 0) { // This is definitely a Subversion repository. return true; } if (false !== stripos($processExecutor->getErrorOutput(), 'authorization failed:')) { // This is likely a remote Subversion repository that requires // authentication. We will handle actual authentication later. return true; } return false; } /** * An absolute path (leading '/') is converted to a file:// url. * * @param string $url * * @return string */ protected static function normalizeUrl($url) { $fs = new Filesystem(); if ($fs->isAbsolutePath($url)) { return 'file://' . strtr($url, '\\', '/'); } return $url; } /** * Execute an SVN command and try to fix up the process with credentials * if necessary. * * @param string $command The svn command to run. * @param string $url The SVN URL. * @throws \RuntimeException * @return string */ protected function execute($command, $url) { if (null === $this->util) { $this->util = new SvnUtil($this->baseUrl, $this->io, $this->config, $this->process); $this->util->setCacheCredentials($this->cacheCredentials); } try { return $this->util->execute($command, $url); } catch (\RuntimeException $e) { if (0 !== $this->process->execute('svn --version', $ignoredOutput)) { throw new \RuntimeException('Failed to load '.$this->url.', svn was not found, check that it is installed and in your PATH env.' . "\n\n" . $this->process->getErrorOutput()); } throw new \RuntimeException( 'Repository '.$this->url.' could not be processed, '.$e->getMessage() ); } } /** * Build the identifier respecting "package-path" config option * * @param string $baseDir The path to trunk/branch/tag * @param int $revision The revision mark to add to identifier * * @return string */ protected function buildIdentifier($baseDir, $revision) { return rtrim($baseDir, '/') . $this->packagePath . '/@' . $revision; } } composer-1.0.0-beta2/src/Composer/Repository/Vcs/VcsDriver.php000066400000000000000000000062131267577262200242640ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Vcs; use Composer\Downloader\TransportException; use Composer\Config; use Composer\Factory; use Composer\IO\IOInterface; use Composer\Util\ProcessExecutor; use Composer\Util\RemoteFilesystem; use Composer\Util\Filesystem; /** * A driver implementation for driver with authentication interaction. * * @author François Pluchino */ abstract class VcsDriver implements VcsDriverInterface { /** @var string */ protected $url; /** @var string */ protected $originUrl; /** @var array */ protected $repoConfig; /** @var IOInterface */ protected $io; /** @var Config */ protected $config; /** @var ProcessExecutor */ protected $process; /** @var RemoteFilesystem */ protected $remoteFilesystem; /** * Constructor. * * @param array $repoConfig The repository configuration * @param IOInterface $io The IO instance * @param Config $config The composer configuration * @param ProcessExecutor $process Process instance, injectable for mocking * @param RemoteFilesystem $remoteFilesystem Remote Filesystem, injectable for mocking */ final public function __construct(array $repoConfig, IOInterface $io, Config $config, ProcessExecutor $process = null, RemoteFilesystem $remoteFilesystem = null) { if (Filesystem::isLocalPath($repoConfig['url'])) { $repoConfig['url'] = Filesystem::getPlatformPath($repoConfig['url']); } $this->url = $repoConfig['url']; $this->originUrl = $repoConfig['url']; $this->repoConfig = $repoConfig; $this->io = $io; $this->config = $config; $this->process = $process ?: new ProcessExecutor($io); $this->remoteFilesystem = $remoteFilesystem ?: Factory::createRemoteFilesystem($this->io, $config); } /** * {@inheritDoc} */ public function hasComposerFile($identifier) { try { return (bool) $this->getComposerInformation($identifier); } catch (TransportException $e) { } return false; } /** * Get the https or http protocol depending on SSL support. * * Call this only if you know that the server supports both. * * @return string The correct type of protocol */ protected function getScheme() { if (extension_loaded('openssl')) { return 'https'; } return 'http'; } /** * Get the remote content. * * @param string $url The URL of content * * @return mixed The result */ protected function getContents($url) { return $this->remoteFilesystem->getContents($this->originUrl, $url, false); } /** * {@inheritDoc} */ public function cleanup() { return; } } composer-1.0.0-beta2/src/Composer/Repository/Vcs/VcsDriverInterface.php000066400000000000000000000053421267577262200261070ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Vcs; use Composer\Config; use Composer\IO\IOInterface; /** * @author Jordi Boggiano */ interface VcsDriverInterface { /** * Initializes the driver (git clone, svn checkout, fetch info etc) */ public function initialize(); /** * Return the composer.json file information * * @param string $identifier Any identifier to a specific branch/tag/commit * @return array containing all infos from the composer.json file */ public function getComposerInformation($identifier); /** * Return the root identifier (trunk, master, default/tip ..) * * @return string Identifier */ public function getRootIdentifier(); /** * Return list of branches in the repository * * @return array Branch names as keys, identifiers as values */ public function getBranches(); /** * Return list of tags in the repository * * @return array Tag names as keys, identifiers as values */ public function getTags(); /** * @param string $identifier Any identifier to a specific branch/tag/commit * @return array With type, url reference and shasum keys. */ public function getDist($identifier); /** * @param string $identifier Any identifier to a specific branch/tag/commit * @return array With type, url and reference keys. */ public function getSource($identifier); /** * Return the URL of the repository * * @return string */ public function getUrl(); /** * Return true if the repository has a composer file for a given identifier, * false otherwise. * * @param string $identifier Any identifier to a specific branch/tag/commit * @return bool Whether the repository has a composer file for a given identifier. */ public function hasComposerFile($identifier); /** * Performs any cleanup necessary as the driver is not longer needed */ public function cleanup(); /** * Checks if this driver can handle a given url * * @param IOInterface $io IO instance * @param Config $config current $config * @param string $url URL to validate/check * @param bool $deep unless true, only shallow checks (url matching typically) should be done * @return bool */ public static function supports(IOInterface $io, Config $config, $url, $deep = false); } composer-1.0.0-beta2/src/Composer/Repository/VcsRepository.php000066400000000000000000000262301267577262200244560ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; use Composer\Downloader\TransportException; use Composer\Repository\Vcs\VcsDriverInterface; use Composer\Package\Version\VersionParser; use Composer\Package\Loader\ArrayLoader; use Composer\Package\Loader\ValidatingArrayLoader; use Composer\Package\Loader\InvalidPackageException; use Composer\Package\Loader\LoaderInterface; use Composer\EventDispatcher\EventDispatcher; use Composer\IO\IOInterface; use Composer\Config; /** * @author Jordi Boggiano */ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInterface { protected $url; protected $packageName; protected $verbose; protected $io; protected $config; protected $versionParser; protected $type; protected $loader; protected $repoConfig; protected $branchErrorOccurred = false; private $drivers; public function __construct(array $repoConfig, IOInterface $io, Config $config, EventDispatcher $dispatcher = null, array $drivers = null) { parent::__construct(); $this->drivers = $drivers ?: array( 'github' => 'Composer\Repository\Vcs\GitHubDriver', 'gitlab' => 'Composer\Repository\Vcs\GitLabDriver', 'git-bitbucket' => 'Composer\Repository\Vcs\GitBitbucketDriver', 'git' => 'Composer\Repository\Vcs\GitDriver', 'hg-bitbucket' => 'Composer\Repository\Vcs\HgBitbucketDriver', 'hg' => 'Composer\Repository\Vcs\HgDriver', 'perforce' => 'Composer\Repository\Vcs\PerforceDriver', // svn must be last because identifying a subversion server for sure is practically impossible 'svn' => 'Composer\Repository\Vcs\SvnDriver', ); $this->url = $repoConfig['url']; $this->io = $io; $this->type = isset($repoConfig['type']) ? $repoConfig['type'] : 'vcs'; $this->verbose = $io->isVeryVerbose(); $this->config = $config; $this->repoConfig = $repoConfig; } public function getRepoConfig() { return $this->repoConfig; } public function setLoader(LoaderInterface $loader) { $this->loader = $loader; } public function getDriver() { if (isset($this->drivers[$this->type])) { $class = $this->drivers[$this->type]; $driver = new $class($this->repoConfig, $this->io, $this->config); /** @var VcsDriverInterface $driver */ $driver->initialize(); return $driver; } foreach ($this->drivers as $driver) { if ($driver::supports($this->io, $this->config, $this->url)) { $driver = new $driver($this->repoConfig, $this->io, $this->config); /** @var VcsDriverInterface $driver */ $driver->initialize(); return $driver; } } foreach ($this->drivers as $driver) { if ($driver::supports($this->io, $this->config, $this->url, true)) { $driver = new $driver($this->repoConfig, $this->io, $this->config); /** @var VcsDriverInterface $driver */ $driver->initialize(); return $driver; } } } public function hadInvalidBranches() { return $this->branchErrorOccurred; } protected function initialize() { parent::initialize(); $verbose = $this->verbose; $driver = $this->getDriver(); if (!$driver) { throw new \InvalidArgumentException('No driver found to handle VCS repository '.$this->url); } $this->versionParser = new VersionParser; if (!$this->loader) { $this->loader = new ArrayLoader($this->versionParser); } try { if ($driver->hasComposerFile($driver->getRootIdentifier())) { $data = $driver->getComposerInformation($driver->getRootIdentifier()); $this->packageName = !empty($data['name']) ? $data['name'] : null; } } catch (\Exception $e) { if ($verbose) { $this->io->writeError('Skipped parsing '.$driver->getRootIdentifier().', '.$e->getMessage().''); } } foreach ($driver->getTags() as $tag => $identifier) { $msg = 'Reading composer.json of ' . ($this->packageName ?: $this->url) . ' (' . $tag . ')'; if ($verbose) { $this->io->writeError($msg); } else { $this->io->overwriteError($msg, false); } // strip the release- prefix from tags if present $tag = str_replace('release-', '', $tag); if (!$parsedTag = $this->validateTag($tag)) { if ($verbose) { $this->io->writeError('Skipped tag '.$tag.', invalid tag name'); } continue; } try { if (!$data = $driver->getComposerInformation($identifier)) { if ($verbose) { $this->io->writeError('Skipped tag '.$tag.', no composer file'); } continue; } // manually versioned package if (isset($data['version'])) { $data['version_normalized'] = $this->versionParser->normalize($data['version']); } else { // auto-versioned package, read value from tag $data['version'] = $tag; $data['version_normalized'] = $parsedTag; } // make sure tag packages have no -dev flag $data['version'] = preg_replace('{[.-]?dev$}i', '', $data['version']); $data['version_normalized'] = preg_replace('{(^dev-|[.-]?dev$)}i', '', $data['version_normalized']); // broken package, version doesn't match tag if ($data['version_normalized'] !== $parsedTag) { if ($verbose) { $this->io->writeError('Skipped tag '.$tag.', tag ('.$parsedTag.') does not match version ('.$data['version_normalized'].') in composer.json'); } continue; } if ($verbose) { $this->io->writeError('Importing tag '.$tag.' ('.$data['version_normalized'].')'); } $this->addPackage($this->loader->load($this->preProcess($driver, $data, $identifier))); } catch (\Exception $e) { if ($verbose) { $this->io->writeError('Skipped tag '.$tag.', '.($e instanceof TransportException ? 'no composer file was found' : $e->getMessage()).''); } continue; } } if (!$verbose) { $this->io->overwriteError('', false); } foreach ($driver->getBranches() as $branch => $identifier) { $msg = 'Reading composer.json of ' . ($this->packageName ?: $this->url) . ' (' . $branch . ')'; if ($verbose) { $this->io->writeError($msg); } else { $this->io->overwriteError($msg, false); } if (!$parsedBranch = $this->validateBranch($branch)) { if ($verbose) { $this->io->writeError('Skipped branch '.$branch.', invalid name'); } continue; } try { if (!$data = $driver->getComposerInformation($identifier)) { if ($verbose) { $this->io->writeError('Skipped branch '.$branch.', no composer file'); } continue; } // branches are always auto-versioned, read value from branch name $data['version'] = $branch; $data['version_normalized'] = $parsedBranch; // make sure branch packages have a dev flag if ('dev-' === substr($parsedBranch, 0, 4) || '9999999-dev' === $parsedBranch) { $data['version'] = 'dev-' . $data['version']; } else { $prefix = substr($branch, 0, 1) === 'v' ? 'v' : ''; $data['version'] = $prefix . preg_replace('{(\.9{7})+}', '.x', $parsedBranch); } if ($verbose) { $this->io->writeError('Importing branch '.$branch.' ('.$data['version'].')'); } $packageData = $this->preProcess($driver, $data, $identifier); $package = $this->loader->load($packageData); if ($this->loader instanceof ValidatingArrayLoader && $this->loader->getWarnings()) { throw new InvalidPackageException($this->loader->getErrors(), $this->loader->getWarnings(), $packageData); } $this->addPackage($package); } catch (TransportException $e) { if ($verbose) { $this->io->writeError('Skipped branch '.$branch.', no composer file was found'); } continue; } catch (\Exception $e) { if (!$verbose) { $this->io->writeError(''); } $this->branchErrorOccurred = true; $this->io->writeError('Skipped branch '.$branch.', '.$e->getMessage().''); $this->io->writeError(''); continue; } } $driver->cleanup(); if (!$verbose) { $this->io->overwriteError('', false); } if (!$this->getPackages()) { throw new InvalidRepositoryException('No valid composer.json was found in any branch or tag of '.$this->url.', could not load a package from it.'); } } protected function preProcess(VcsDriverInterface $driver, array $data, $identifier) { // keep the name of the main identifier for all packages $data['name'] = $this->packageName ?: $data['name']; if (!isset($data['dist'])) { $data['dist'] = $driver->getDist($identifier); } if (!isset($data['source'])) { $data['source'] = $driver->getSource($identifier); } return $data; } private function validateBranch($branch) { try { return $this->versionParser->normalizeBranch($branch); } catch (\Exception $e) { } return false; } private function validateTag($version) { try { return $this->versionParser->normalize($version); } catch (\Exception $e) { } return false; } } composer-1.0.0-beta2/src/Composer/Repository/WritableArrayRepository.php000066400000000000000000000027601267577262200264750ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; use Composer\Package\AliasPackage; /** * Writable array repository. * * @author Jordi Boggiano */ class WritableArrayRepository extends ArrayRepository implements WritableRepositoryInterface { /** * {@inheritDoc} */ public function write() { } /** * {@inheritDoc} */ public function reload() { } /** * {@inheritDoc} */ public function getCanonicalPackages() { $packages = $this->getPackages(); // get at most one package of each name, preferring non-aliased ones $packagesByName = array(); foreach ($packages as $package) { if (!isset($packagesByName[$package->getName()]) || $packagesByName[$package->getName()] instanceof AliasPackage) { $packagesByName[$package->getName()] = $package; } } $canonicalPackages = array(); // unfold aliased packages foreach ($packagesByName as $package) { while ($package instanceof AliasPackage) { $package = $package->getAliasOf(); } $canonicalPackages[] = $package; } return $canonicalPackages; } } composer-1.0.0-beta2/src/Composer/Repository/WritableRepositoryInterface.php000066400000000000000000000023451267577262200273160ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; use Composer\Package\PackageInterface; /** * Writable repository interface. * * @author Konstantin Kudryashov */ interface WritableRepositoryInterface extends RepositoryInterface { /** * Writes repository (f.e. to the disc). */ public function write(); /** * Adds package to the repository. * * @param PackageInterface $package package instance */ public function addPackage(PackageInterface $package); /** * Removes package from the repository. * * @param PackageInterface $package package instance */ public function removePackage(PackageInterface $package); /** * Get unique packages (at most one package of each name), with aliases resolved and removed. * * @return PackageInterface[] */ public function getCanonicalPackages(); /** * Forces a reload of all packages. */ public function reload(); } composer-1.0.0-beta2/src/Composer/Script/000077500000000000000000000000001267577262200201745ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/Script/CommandEvent.php000066400000000000000000000006401267577262200232650ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Script; /** * The Command Event. * * @deprecated use Composer\Script\Event instead */ class CommandEvent extends Event { } composer-1.0.0-beta2/src/Composer/Script/Event.php000066400000000000000000000037201267577262200217700ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Script; use Composer\Composer; use Composer\IO\IOInterface; use Composer\EventDispatcher\Event as BaseEvent; /** * The script event class * * @author François Pluchino * @author Nils Adermann */ class Event extends BaseEvent { /** * @var Composer The composer instance */ private $composer; /** * @var IOInterface The IO instance */ private $io; /** * @var bool Dev mode flag */ private $devMode; /** * Constructor. * * @param string $name The event name * @param Composer $composer The composer object * @param IOInterface $io The IOInterface object * @param bool $devMode Whether or not we are in dev mode * @param array $args Arguments passed by the user * @param array $flags Optional flags to pass data not as argument */ public function __construct($name, Composer $composer, IOInterface $io, $devMode = false, array $args = array(), array $flags = array()) { parent::__construct($name, $args, $flags); $this->composer = $composer; $this->io = $io; $this->devMode = $devMode; } /** * Returns the composer instance. * * @return Composer */ public function getComposer() { return $this->composer; } /** * Returns the IO instance. * * @return IOInterface */ public function getIO() { return $this->io; } /** * Return the dev mode flag * * @return bool */ public function isDevMode() { return $this->devMode; } } composer-1.0.0-beta2/src/Composer/Script/PackageEvent.php000066400000000000000000000007571267577262200232530ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Script; use Composer\Installer\PackageEvent as BasePackageEvent; /** * The Package Event. * * @deprecated Use Composer\Installer\PackageEvent instead */ class PackageEvent extends BasePackageEvent { } composer-1.0.0-beta2/src/Composer/Script/ScriptEvents.php000066400000000000000000000133371267577262200233450ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Script; /** * The Script Events. * * @author François Pluchino * @author Jordi Boggiano */ class ScriptEvents { /** * The PRE_INSTALL_CMD event occurs before the install command is executed. * * The event listener method receives a Composer\Script\CommandEvent instance. * * @var string */ const PRE_INSTALL_CMD = 'pre-install-cmd'; /** * The POST_INSTALL_CMD event occurs after the install command is executed. * * The event listener method receives a Composer\Script\CommandEvent instance. * * @var string */ const POST_INSTALL_CMD = 'post-install-cmd'; /** * The PRE_UPDATE_CMD event occurs before the update command is executed. * * The event listener method receives a Composer\Script\CommandEvent instance. * * @var string */ const PRE_UPDATE_CMD = 'pre-update-cmd'; /** * The POST_UPDATE_CMD event occurs after the update command is executed. * * The event listener method receives a Composer\Script\CommandEvent instance. * * @var string */ const POST_UPDATE_CMD = 'post-update-cmd'; /** * The PRE_STATUS_CMD event occurs before the status command is executed. * * The event listener method receives a Composer\Script\CommandEvent instance. * * @var string */ const PRE_STATUS_CMD = 'pre-status-cmd'; /** * The POST_STATUS_CMD event occurs after the status command is executed. * * The event listener method receives a Composer\Script\CommandEvent instance. * * @var string */ const POST_STATUS_CMD = 'post-status-cmd'; /** * The PRE_AUTOLOAD_DUMP event occurs before the autoload file is generated. * * The event listener method receives a Composer\Script\Event instance. * * @var string */ const PRE_AUTOLOAD_DUMP = 'pre-autoload-dump'; /** * The POST_AUTOLOAD_DUMP event occurs after the autoload file has been generated. * * The event listener method receives a Composer\Script\Event instance. * * @var string */ const POST_AUTOLOAD_DUMP = 'post-autoload-dump'; /** * The POST_ROOT_PACKAGE_INSTALL event occurs after the root package has been installed. * * The event listener method receives a Composer\Script\PackageEvent instance. * * @var string */ const POST_ROOT_PACKAGE_INSTALL = 'post-root-package-install'; /** * The POST_CREATE_PROJECT event occurs after the create-project command has been executed. * Note: Event occurs after POST_INSTALL_CMD * * The event listener method receives a Composer\Script\PackageEvent instance. * * @var string */ const POST_CREATE_PROJECT_CMD = 'post-create-project-cmd'; /** * The PRE_ARCHIVE_CMD event occurs before the update command is executed. * * The event listener method receives a Composer\Script\CommandEvent instance. * * @var string */ const PRE_ARCHIVE_CMD = 'pre-archive-cmd'; /** * The POST_ARCHIVE_CMD event occurs after the status command is executed. * * The event listener method receives a Composer\Script\CommandEvent instance. * * @var string */ const POST_ARCHIVE_CMD = 'post-archive-cmd'; /** Deprecated constants below */ /** * The PRE_PACKAGE_INSTALL event occurs before a package is installed. * * The event listener method receives a Composer\Script\PackageEvent instance. * * @deprecated Use Composer\Installer\PackageEvents::PRE_PACKAGE_INSTALL instead. * @var string */ const PRE_PACKAGE_INSTALL = 'pre-package-install'; /** * The POST_PACKAGE_INSTALL event occurs after a package is installed. * * The event listener method receives a Composer\Script\PackageEvent instance. * * @deprecated Use Composer\Installer\PackageEvents::POST_PACKAGE_INSTALL instead. * @var string */ const POST_PACKAGE_INSTALL = 'post-package-install'; /** * The PRE_PACKAGE_UPDATE event occurs before a package is updated. * * The event listener method receives a Composer\Script\PackageEvent instance. * * @deprecated Use Composer\Installer\PackageEvents::PRE_PACKAGE_UPDATE instead. * @var string */ const PRE_PACKAGE_UPDATE = 'pre-package-update'; /** * The POST_PACKAGE_UPDATE event occurs after a package is updated. * * The event listener method receives a Composer\Script\PackageEvent instance. * * @deprecated Use Composer\Installer\PackageEvents::POST_PACKAGE_UPDATE instead. * @var string */ const POST_PACKAGE_UPDATE = 'post-package-update'; /** * The PRE_PACKAGE_UNINSTALL event occurs before a package has been uninstalled. * * The event listener method receives a Composer\Script\PackageEvent instance. * * @deprecated Use Composer\Installer\PackageEvents::PRE_PACKAGE_UNINSTALL instead. * @var string */ const PRE_PACKAGE_UNINSTALL = 'pre-package-uninstall'; /** * The POST_PACKAGE_UNINSTALL event occurs after a package has been uninstalled. * * The event listener method receives a Composer\Script\PackageEvent instance. * * @deprecated Use Composer\Installer\PackageEvents::POST_PACKAGE_UNINSTALL instead. * @var string */ const POST_PACKAGE_UNINSTALL = 'post-package-uninstall'; } composer-1.0.0-beta2/src/Composer/SelfUpdate/000077500000000000000000000000001267577262200207645ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/SelfUpdate/Keys.php000066400000000000000000000015521267577262200224130ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\SelfUpdate; /** * @author Jordi Boggiano */ class Keys { public static function fingerprint($path) { $hash = strtoupper(hash('sha256', preg_replace('{\s}', '', file_get_contents($path)))); return implode(' ', array( substr($hash, 0, 8), substr($hash, 8, 8), substr($hash, 16, 8), substr($hash, 24, 8), '', // Extra space substr($hash, 32, 8), substr($hash, 40, 8), substr($hash, 48, 8), substr($hash, 56, 8), )); } } composer-1.0.0-beta2/src/Composer/SelfUpdate/Versions.php000066400000000000000000000041341267577262200233070ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\SelfUpdate; use Composer\Util\RemoteFilesystem; use Composer\Config; use Composer\Json\JsonFile; /** * @author Jordi Boggiano */ class Versions { private $rfs; private $config; private $channel; public function __construct(Config $config, RemoteFilesystem $rfs) { $this->rfs = $rfs; $this->config = $config; } public function getChannel() { if ($this->channel) { return $this->channel; } $channelFile = $this->config->get('home').'/update-channel'; if (file_exists($channelFile)) { $channel = trim(file_get_contents($channelFile)); if (in_array($channel, array('stable', 'preview', 'snapshot'), true)) { return $this->channel = $channel; } } return $this->channel = 'stable'; } public function setChannel($channel) { if (!in_array($channel, array('stable', 'preview', 'snapshot'), true)) { throw new \InvalidArgumentException('Invalid channel '.$channel.', must be one of: stable, preview, snapshot'); } $channelFile = $this->config->get('home').'/update-channel'; $this->channel = $channel; file_put_contents($channelFile, $channel.PHP_EOL); } public function getLatest() { $protocol = extension_loaded('openssl') ? 'https' : 'http'; $versions = JsonFile::parseJson($this->rfs->getContents('getcomposer.org', $protocol . '://getcomposer.org/versions', false)); foreach ($versions[$this->getChannel()] as $version) { if ($version['min-php'] <= PHP_VERSION_ID) { return $version; } } throw new \LogicException('There is no version of Composer available for your PHP version ('.PHP_VERSION.')'); } } composer-1.0.0-beta2/src/Composer/Util/000077500000000000000000000000001267577262200176455ustar00rootroot00000000000000composer-1.0.0-beta2/src/Composer/Util/AuthHelper.php000066400000000000000000000032371267577262200224240ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Util; use Composer\Config; use Composer\IO\IOInterface; /** * @author Jordi Boggiano */ class AuthHelper { protected $io; protected $config; public function __construct(IOInterface $io, Config $config) { $this->io = $io; $this->config = $config; } public function storeAuth($originUrl, $storeAuth) { $store = false; $configSource = $this->config->getAuthConfigSource(); if ($storeAuth === true) { $store = $configSource; } elseif ($storeAuth === 'prompt') { $answer = $this->io->askAndValidate( 'Do you want to store credentials for '.$originUrl.' in '.$configSource->getName().' ? [Yn] ', function ($value) { $input = strtolower(substr(trim($value), 0, 1)); if (in_array($input, array('y','n'))) { return $input; } throw new \RuntimeException('Please answer (y)es or (n)o'); }, null, 'y' ); if ($answer === 'y') { $store = $configSource; } } if ($store) { $store->addConfigSetting( 'http-basic.'.$originUrl, $this->io->getAuthentication($originUrl) ); } } } composer-1.0.0-beta2/src/Composer/Util/ComposerMirror.php000066400000000000000000000033731267577262200233460ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Util; /** * Composer mirror utilities * * @author Jordi Boggiano */ class ComposerMirror { public static function processUrl($mirrorUrl, $packageName, $version, $reference, $type) { if ($reference) { $reference = preg_match('{^([a-f0-9]*|%reference%)$}', $reference) ? $reference : md5($reference); } $version = strpos($version, '/') === false ? $version : md5($version); return str_replace( array('%package%', '%version%', '%reference%', '%type%'), array($packageName, $version, $reference, $type), $mirrorUrl ); } public static function processGitUrl($mirrorUrl, $packageName, $url, $type) { if (preg_match('#^(?:(?:https?|git)://github\.com/|git@github\.com:)([^/]+)/(.+?)(?:\.git)?$#', $url, $match)) { $url = 'gh-'.$match[1].'/'.$match[2]; } elseif (preg_match('#^https://bitbucket\.org/([^/]+)/(.+?)(?:\.git)?/?$#', $url, $match)) { $url = 'bb-'.$match[1].'/'.$match[2]; } else { $url = preg_replace('{[^a-z0-9_.-]}i', '-', trim($url, '/')); } return str_replace( array('%package%', '%normalizedUrl%', '%type%'), array($packageName, $url, $type), $mirrorUrl ); } public static function processHgUrl($mirrorUrl, $packageName, $url, $type) { return self::processGitUrl($mirrorUrl, $packageName, $url, $type); } } composer-1.0.0-beta2/src/Composer/Util/ConfigValidator.php000066400000000000000000000146561267577262200234450ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Util; use Composer\Package\Loader\ArrayLoader; use Composer\Package\Loader\ValidatingArrayLoader; use Composer\Package\Loader\InvalidPackageException; use Composer\Json\JsonValidationException; use Composer\IO\IOInterface; use Composer\Json\JsonFile; use Composer\Spdx\SpdxLicenses; /** * Validates a composer configuration. * * @author Robert Schönthal * @author Jordi Boggiano */ class ConfigValidator { private $io; public function __construct(IOInterface $io) { $this->io = $io; } /** * Validates the config, and returns the result. * * @param string $file The path to the file * @param int $arrayLoaderValidationFlags Flags for ArrayLoader validation * * @return array a triple containing the errors, publishable errors, and warnings */ public function validate($file, $arrayLoaderValidationFlags = ValidatingArrayLoader::CHECK_ALL) { $errors = array(); $publishErrors = array(); $warnings = array(); // validate json schema $laxValid = false; try { $json = new JsonFile($file, null, $this->io); $manifest = $json->read(); $json->validateSchema(JsonFile::LAX_SCHEMA); $laxValid = true; $json->validateSchema(); } catch (JsonValidationException $e) { foreach ($e->getErrors() as $message) { if ($laxValid) { $publishErrors[] = $message; } else { $errors[] = $message; } } } catch (\Exception $e) { $errors[] = $e->getMessage(); return array($errors, $publishErrors, $warnings); } // validate actual data if (!empty($manifest['license'])) { // strip proprietary since it's not a valid SPDX identifier, but is accepted by composer if (is_array($manifest['license'])) { foreach ($manifest['license'] as $key => $license) { if ('proprietary' === $license) { unset($manifest['license'][$key]); } } } $licenseValidator = new SpdxLicenses(); if ('proprietary' !== $manifest['license'] && array() !== $manifest['license'] && !$licenseValidator->validate($manifest['license'])) { $warnings[] = sprintf( 'License %s is not a valid SPDX license identifier, see https://spdx.org/licenses/ if you use an open license.' ."\nIf the software is closed-source, you may use \"proprietary\" as license.", json_encode($manifest['license']) ); } } else { $warnings[] = 'No license specified, it is recommended to do so. For closed-source software you may use "proprietary" as license.'; } if (isset($manifest['version'])) { $warnings[] = 'The version field is present, it is recommended to leave it out if the package is published on Packagist.'; } if (!empty($manifest['name']) && preg_match('{[A-Z]}', $manifest['name'])) { $suggestName = preg_replace('{(?:([a-z])([A-Z])|([A-Z])([A-Z][a-z]))}', '\\1\\3-\\2\\4', $manifest['name']); $suggestName = strtolower($suggestName); $publishErrors[] = sprintf( 'Name "%s" does not match the best practice (e.g. lower-cased/with-dashes). We suggest using "%s" instead. As such you will not be able to submit it to Packagist.', $manifest['name'], $suggestName ); } if (!empty($manifest['type']) && $manifest['type'] == 'composer-installer') { $warnings[] = "The package type 'composer-installer' is deprecated. Please distribute your custom installers as plugins from now on. See https://getcomposer.org/doc/articles/plugins.md for plugin documentation."; } // check for require-dev overrides if (isset($manifest['require']) && isset($manifest['require-dev'])) { $requireOverrides = array_intersect_key($manifest['require'], $manifest['require-dev']); if (!empty($requireOverrides)) { $plural = (count($requireOverrides) > 1) ? 'are' : 'is'; $warnings[] = implode(', ', array_keys($requireOverrides)). " {$plural} required both in require and require-dev, this can lead to unexpected behavior"; } } // check for commit references $require = isset($manifest['require']) ? $manifest['require'] : array(); $requireDev = isset($manifest['require-dev']) ? $manifest['require-dev'] : array(); $packages = array_merge($require, $requireDev); foreach ($packages as $package => $version) { if (preg_match('/#/', $version) === 1) { $warnings[] = sprintf( 'The package "%s" is pointing to a commit-ref, this is bad practice and can cause unforeseen issues.', $package ); } } // check for empty psr-0/psr-4 namespace prefixes if (isset($manifest['autoload']['psr-0'][''])) { $warnings[] = "Defining autoload.psr-0 with an empty namespace prefix is a bad idea for performance"; } if (isset($manifest['autoload']['psr-4'][''])) { $warnings[] = "Defining autoload.psr-4 with an empty namespace prefix is a bad idea for performance"; } try { $loader = new ValidatingArrayLoader(new ArrayLoader(), true, null, $arrayLoaderValidationFlags); if (!isset($manifest['version'])) { $manifest['version'] = '1.0.0'; } if (!isset($manifest['name'])) { $manifest['name'] = 'dummy/dummy'; } $loader->load($manifest); } catch (InvalidPackageException $e) { $errors = array_merge($errors, $e->getErrors()); } $warnings = array_merge($warnings, $loader->getWarnings()); return array($errors, $publishErrors, $warnings); } } composer-1.0.0-beta2/src/Composer/Util/ErrorHandler.php000066400000000000000000000043371267577262200227540ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Util; use Composer\IO\IOInterface; /** * Convert PHP errors into exceptions * * @author Artem Lopata */ class ErrorHandler { private static $io; /** * Error handler * * @param int $level Level of the error raised * @param string $message Error message * @param string $file Filename that the error was raised in * @param int $line Line number the error was raised at * * @static * @throws \ErrorException */ public static function handle($level, $message, $file, $line) { // error code is not included in error_reporting if (!(error_reporting() & $level)) { return; } if (ini_get('xdebug.scream')) { $message .= "\n\nWarning: You have xdebug.scream enabled, the warning above may be". "\na legitimately suppressed error that you were not supposed to see."; } if ($level !== E_DEPRECATED && $level !== E_USER_DEPRECATED) { throw new \ErrorException($message, 0, $level, $file, $line); } if (self::$io) { self::$io->writeError('Deprecation Notice: '.$message.' in '.$file.':'.$line.''); if (self::$io->isVerbose()) { self::$io->writeError('Stack trace:'); self::$io->writeError(array_filter(array_map(function ($a) { if (isset($a['line'], $a['file'])) { return ' '.$a['file'].':'.$a['line'].''; } return null; }, array_slice(debug_backtrace(), 2)))); } } } /** * Register error handler * * @static */ public static function register(IOInterface $io = null) { set_error_handler(array(__CLASS__, 'handle')); error_reporting(E_ALL | E_STRICT); self::$io = $io; } } composer-1.0.0-beta2/src/Composer/Util/Filesystem.php000066400000000000000000000511011267577262200225000ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Util; use RecursiveDirectoryIterator; use RecursiveIteratorIterator; use Symfony\Component\Filesystem\Exception\IOException; use Symfony\Component\Finder\Finder; /** * @author Jordi Boggiano * @author Johannes M. Schmitt */ class Filesystem { private $processExecutor; public function __construct(ProcessExecutor $executor = null) { $this->processExecutor = $executor ?: new ProcessExecutor(); } public function remove($file) { if (is_dir($file)) { return $this->removeDirectory($file); } if (file_exists($file)) { return $this->unlink($file); } return false; } /** * Checks if a directory is empty * * @param string $dir * @return bool */ public function isDirEmpty($dir) { $finder = Finder::create() ->ignoreVCS(false) ->ignoreDotFiles(false) ->depth(0) ->in($dir); return count($finder) === 0; } public function emptyDirectory($dir, $ensureDirectoryExists = true) { if (file_exists($dir) && is_link($dir)) { $this->unlink($dir); } if ($ensureDirectoryExists) { $this->ensureDirectoryExists($dir); } if (is_dir($dir)) { $finder = Finder::create() ->ignoreVCS(false) ->ignoreDotFiles(false) ->depth(0) ->in($dir); foreach ($finder as $path) { $this->remove((string) $path); } } } /** * Recursively remove a directory * * Uses the process component if proc_open is enabled on the PHP * installation. * * @param string $directory * @throws \RuntimeException * @return bool */ public function removeDirectory($directory) { if ($this->isSymlinkedDirectory($directory)) { return $this->unlinkSymlinkedDirectory($directory); } if ($this->isJunction($directory)) { return $this->removeJunction($directory); } if (!file_exists($directory) || !is_dir($directory)) { return true; } if (preg_match('{^(?:[a-z]:)?[/\\\\]+$}i', $directory)) { throw new \RuntimeException('Aborting an attempted deletion of '.$directory.', this was probably not intended, if it is a real use case please report it.'); } if (!function_exists('proc_open')) { return $this->removeDirectoryPhp($directory); } if (Platform::isWindows()) { $cmd = sprintf('rmdir /S /Q %s', ProcessExecutor::escape(realpath($directory))); } else { $cmd = sprintf('rm -rf %s', ProcessExecutor::escape($directory)); } $result = $this->getProcess()->execute($cmd, $output) === 0; // clear stat cache because external processes aren't tracked by the php stat cache clearstatcache(); if ($result && !file_exists($directory)) { return true; } return $this->removeDirectoryPhp($directory); } /** * Recursively delete directory using PHP iterators. * * Uses a CHILD_FIRST RecursiveIteratorIterator to sort files * before directories, creating a single non-recursive loop * to delete files/directories in the correct order. * * @param string $directory * @return bool */ public function removeDirectoryPhp($directory) { try { $it = new RecursiveDirectoryIterator($directory, RecursiveDirectoryIterator::SKIP_DOTS); } catch (\UnexpectedValueException $e) { // re-try once after clearing the stat cache if it failed as it // sometimes fails without apparent reason, see https://github.com/composer/composer/issues/4009 clearstatcache(); usleep(100000); if (!is_dir($directory)) { return true; } $it = new RecursiveDirectoryIterator($directory, RecursiveDirectoryIterator::SKIP_DOTS); } $ri = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::CHILD_FIRST); foreach ($ri as $file) { if ($file->isDir()) { $this->rmdir($file->getPathname()); } else { $this->unlink($file->getPathname()); } } return $this->rmdir($directory); } public function ensureDirectoryExists($directory) { if (!is_dir($directory)) { if (file_exists($directory)) { throw new \RuntimeException( $directory.' exists and is not a directory.' ); } if (!@mkdir($directory, 0777, true)) { throw new \RuntimeException( $directory.' does not exist and could not be created.' ); } } } /** * Attempts to unlink a file and in case of failure retries after 350ms on windows * * @param string $path * @throws \RuntimeException * @return bool */ public function unlink($path) { if (!@$this->unlinkImplementation($path)) { // retry after a bit on windows since it tends to be touchy with mass removals if (!Platform::isWindows() || (usleep(350000) && !@$this->unlinkImplementation($path))) { $error = error_get_last(); $message = 'Could not delete '.$path.': ' . @$error['message']; if (Platform::isWindows()) { $message .= "\nThis can be due to an antivirus or the Windows Search Indexer locking the file while they are analyzed"; } throw new \RuntimeException($message); } } return true; } /** * Attempts to rmdir a file and in case of failure retries after 350ms on windows * * @param string $path * @throws \RuntimeException * @return bool */ public function rmdir($path) { if (!@rmdir($path)) { // retry after a bit on windows since it tends to be touchy with mass removals if (!Platform::isWindows() || (usleep(350000) && !@rmdir($path))) { $error = error_get_last(); $message = 'Could not delete '.$path.': ' . @$error['message']; if (Platform::isWindows()) { $message .= "\nThis can be due to an antivirus or the Windows Search Indexer locking the file while they are analyzed"; } throw new \RuntimeException($message); } } return true; } /** * Copy then delete is a non-atomic version of {@link rename}. * * Some systems can't rename and also don't have proc_open, * which requires this solution. * * @param string $source * @param string $target */ public function copyThenRemove($source, $target) { if (!is_dir($source)) { copy($source, $target); $this->unlink($source); return; } $it = new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS); $ri = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::SELF_FIRST); $this->ensureDirectoryExists($target); foreach ($ri as $file) { $targetPath = $target . DIRECTORY_SEPARATOR . $ri->getSubPathName(); if ($file->isDir()) { $this->ensureDirectoryExists($targetPath); } else { copy($file->getPathname(), $targetPath); } } $this->removeDirectoryPhp($source); } public function rename($source, $target) { if (true === @rename($source, $target)) { return; } if (!function_exists('proc_open')) { return $this->copyThenRemove($source, $target); } if (Platform::isWindows()) { // Try to copy & delete - this is a workaround for random "Access denied" errors. $command = sprintf('xcopy %s %s /E /I /Q /Y', ProcessExecutor::escape($source), ProcessExecutor::escape($target)); $result = $this->processExecutor->execute($command, $output); // clear stat cache because external processes aren't tracked by the php stat cache clearstatcache(); if (0 === $result) { $this->remove($source); return; } } else { // We do not use PHP's "rename" function here since it does not support // the case where $source, and $target are located on different partitions. $command = sprintf('mv %s %s', ProcessExecutor::escape($source), ProcessExecutor::escape($target)); $result = $this->processExecutor->execute($command, $output); // clear stat cache because external processes aren't tracked by the php stat cache clearstatcache(); if (0 === $result) { return; } } return $this->copyThenRemove($source, $target); } /** * Returns the shortest path from $from to $to * * @param string $from * @param string $to * @param bool $directories if true, the source/target are considered to be directories * @throws \InvalidArgumentException * @return string */ public function findShortestPath($from, $to, $directories = false) { if (!$this->isAbsolutePath($from) || !$this->isAbsolutePath($to)) { throw new \InvalidArgumentException(sprintf('$from (%s) and $to (%s) must be absolute paths.', $from, $to)); } $from = lcfirst($this->normalizePath($from)); $to = lcfirst($this->normalizePath($to)); if ($directories) { $from = rtrim($from, '/') . '/dummy_file'; } if (dirname($from) === dirname($to)) { return './'.basename($to); } $commonPath = $to; while (strpos($from.'/', $commonPath.'/') !== 0 && '/' !== $commonPath && !preg_match('{^[a-z]:/?$}i', $commonPath)) { $commonPath = strtr(dirname($commonPath), '\\', '/'); } if (0 !== strpos($from, $commonPath) || '/' === $commonPath) { return $to; } $commonPath = rtrim($commonPath, '/') . '/'; $sourcePathDepth = substr_count(substr($from, strlen($commonPath)), '/'); $commonPathCode = str_repeat('../', $sourcePathDepth); return ($commonPathCode . substr($to, strlen($commonPath))) ?: './'; } /** * Returns PHP code that, when executed in $from, will return the path to $to * * @param string $from * @param string $to * @param bool $directories if true, the source/target are considered to be directories * @throws \InvalidArgumentException * @return string */ public function findShortestPathCode($from, $to, $directories = false) { if (!$this->isAbsolutePath($from) || !$this->isAbsolutePath($to)) { throw new \InvalidArgumentException(sprintf('$from (%s) and $to (%s) must be absolute paths.', $from, $to)); } $from = lcfirst($this->normalizePath($from)); $to = lcfirst($this->normalizePath($to)); if ($from === $to) { return $directories ? '__DIR__' : '__FILE__'; } $commonPath = $to; while (strpos($from.'/', $commonPath.'/') !== 0 && '/' !== $commonPath && !preg_match('{^[a-z]:/?$}i', $commonPath) && '.' !== $commonPath) { $commonPath = strtr(dirname($commonPath), '\\', '/'); } if (0 !== strpos($from, $commonPath) || '/' === $commonPath || '.' === $commonPath) { return var_export($to, true); } $commonPath = rtrim($commonPath, '/') . '/'; if (strpos($to, $from.'/') === 0) { return '__DIR__ . '.var_export(substr($to, strlen($from)), true); } $sourcePathDepth = substr_count(substr($from, strlen($commonPath)), '/') + $directories; $commonPathCode = str_repeat('dirname(', $sourcePathDepth).'__DIR__'.str_repeat(')', $sourcePathDepth); $relTarget = substr($to, strlen($commonPath)); return $commonPathCode . (strlen($relTarget) ? '.' . var_export('/' . $relTarget, true) : ''); } /** * Checks if the given path is absolute * * @param string $path * @return bool */ public function isAbsolutePath($path) { return substr($path, 0, 1) === '/' || substr($path, 1, 1) === ':'; } /** * Returns size of a file or directory specified by path. If a directory is * given, it's size will be computed recursively. * * @param string $path Path to the file or directory * @throws \RuntimeException * @return int */ public function size($path) { if (!file_exists($path)) { throw new \RuntimeException("$path does not exist."); } if (is_dir($path)) { return $this->directorySize($path); } return filesize($path); } /** * Normalize a path. This replaces backslashes with slashes, removes ending * slash and collapses redundant separators and up-level references. * * @param string $path Path to the file or directory * @return string */ public function normalizePath($path) { $parts = array(); $path = strtr($path, '\\', '/'); $prefix = ''; $absolute = false; if (preg_match('{^([0-9a-z]+:(?://(?:[a-z]:)?)?)}i', $path, $match)) { $prefix = $match[1]; $path = substr($path, strlen($prefix)); } if (substr($path, 0, 1) === '/') { $absolute = true; $path = substr($path, 1); } $up = false; foreach (explode('/', $path) as $chunk) { if ('..' === $chunk && ($absolute || $up)) { array_pop($parts); $up = !(empty($parts) || '..' === end($parts)); } elseif ('.' !== $chunk && '' !== $chunk) { $parts[] = $chunk; $up = '..' !== $chunk; } } return $prefix.($absolute ? '/' : '').implode('/', $parts); } /** * Return if the given path is local * * @param string $path * @return bool */ public static function isLocalPath($path) { return (bool) preg_match('{^(file://|/|[a-z]:[\\\\/]|\.\.[\\\\/]|[a-z0-9_.-]+[\\\\/])}i', $path); } public static function getPlatformPath($path) { if (Platform::isWindows()) { $path = preg_replace('{^(?:file:///([a-z])/)}i', 'file://$1:/', $path); } return preg_replace('{^file://}i', '', $path); } protected function directorySize($directory) { $it = new RecursiveDirectoryIterator($directory, RecursiveDirectoryIterator::SKIP_DOTS); $ri = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::CHILD_FIRST); $size = 0; foreach ($ri as $file) { if ($file->isFile()) { $size += $file->getSize(); } } return $size; } protected function getProcess() { return new ProcessExecutor; } /** * delete symbolic link implementation (commonly known as "unlink()") * * symbolic links on windows which link to directories need rmdir instead of unlink * * @param string $path * * @return bool */ private function unlinkImplementation($path) { if (Platform::isWindows() && is_dir($path) && is_link($path)) { return rmdir($path); } return unlink($path); } /** * Creates a relative symlink from $link to $target * * @param string $target The path of the binary file to be symlinked * @param string $link The path where the symlink should be created * @return bool */ public function relativeSymlink($target, $link) { $cwd = getcwd(); $relativePath = $this->findShortestPath($link, $target); chdir(dirname($link)); $result = @symlink($relativePath, $link); chdir($cwd); return (bool) $result; } /** * return true if that directory is a symlink. * * @param string $directory * * @return bool */ public function isSymlinkedDirectory($directory) { if (!is_dir($directory)) { return false; } $resolved = $this->resolveSymlinkedDirectorySymlink($directory); return is_link($resolved); } /** * @param string $directory * * @return bool */ private function unlinkSymlinkedDirectory($directory) { $resolved = $this->resolveSymlinkedDirectorySymlink($directory); return $this->unlink($resolved); } /** * resolve pathname to symbolic link of a directory * * @param string $pathname directory path to resolve * * @return string resolved path to symbolic link or original pathname (unresolved) */ private function resolveSymlinkedDirectorySymlink($pathname) { if (!is_dir($pathname)) { return $pathname; } $resolved = rtrim($pathname, '/'); if (!strlen($resolved)) { return $pathname; } return $resolved; } /** * Creates an NTFS junction. * * @param string $target * @param string $junction */ public function junction($target, $junction) { if (!Platform::isWindows()) { throw new \LogicException(sprintf('Function %s is not available on non-Windows platform', __CLASS__)); } if (!is_dir($target)) { throw new IOException(sprintf('Cannot junction to "%s" as it is not a directory.', $target), 0, null, $target); } $cmd = sprintf('mklink /J %s %s', ProcessExecutor::escape(str_replace('/', DIRECTORY_SEPARATOR, $junction)), ProcessExecutor::escape(realpath($target))); if ($this->getProcess()->execute($cmd, $output) !== 0) { throw new IOException(sprintf('Failed to create junction to "%s" at "%s".', $target, $junction), 0, null, $target); } clearstatcache(true, $junction); } /** * Returns whether the target directory is a Windows NTFS Junction. * * @param string $junction Path to check. * @return bool */ public function isJunction($junction) { if (!Platform::isWindows()) { return false; } if (!is_dir($junction) || is_link($junction)) { return false; } /** * According to MSDN at https://msdn.microsoft.com/en-us/library/14h5k7ff.aspx we can detect a junction now * using the 'mode' value from stat: "The _S_IFDIR bit is set if path specifies a directory; the _S_IFREG bit * is set if path specifies an ordinary file or a device." We have just tested for a directory above, so if * we have a directory that isn't one according to lstat(...) we must have a junction. * * #define _S_IFDIR 0x4000 * #define _S_IFREG 0x8000 * * Stat cache should be cleared before to avoid accidentally reading wrong information from previous installs. */ clearstatcache(true, $junction); $stat = lstat($junction); return !($stat['mode'] & 0xC000); } /** * Removes a Windows NTFS junction. * * @param string $junction * @return bool */ public function removeJunction($junction) { if (!Platform::isWindows()) { return false; } $junction = rtrim(str_replace('/', DIRECTORY_SEPARATOR, $junction), DIRECTORY_SEPARATOR); if (!$this->isJunction($junction)) { throw new IOException(sprintf('%s is not a junction and thus cannot be removed as one', $junction)); } $cmd = sprintf('rmdir /S /Q %s', ProcessExecutor::escape($junction)); clearstatcache(true, $junction); return ($this->getProcess()->execute($cmd, $output) === 0); } } composer-1.0.0-beta2/src/Composer/Util/Git.php000066400000000000000000000234441267577262200211100ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Util; use Composer\Config; use Composer\IO\IOInterface; use Composer\Downloader\TransportException; /** * @author Jordi Boggiano */ class Git { /** @var IOInterface */ protected $io; /** @var Config */ protected $config; /** @var ProcessExecutor */ protected $process; /** @var Filesystem */ protected $filesystem; public function __construct(IOInterface $io, Config $config, ProcessExecutor $process, Filesystem $fs) { $this->io = $io; $this->config = $config; $this->process = $process; $this->filesystem = $fs; } public function runCommand($commandCallable, $url, $cwd, $initialClone = false) { if (preg_match('{^(http|git):}i', $url) && $this->config->get('secure-http')) { throw new TransportException("Your configuration does not allow connection to $url. See https://getcomposer.org/doc/06-config.md#secure-http for details."); } if ($initialClone) { $origCwd = $cwd; $cwd = null; } if (preg_match('{^ssh://[^@]+@[^:]+:[^0-9]+}', $url)) { throw new \InvalidArgumentException('The source URL '.$url.' is invalid, ssh URLs should have a port number after ":".'."\n".'Use ssh://git@example.com:22/path or just git@example.com:path if you do not want to provide a password or custom port.'); } if (!$initialClone) { // capture username/password from URL if there is one $this->process->execute('git remote -v', $output, $cwd); if (preg_match('{^(?:composer|origin)\s+https?://(.+):(.+)@([^/]+)}im', $output, $match)) { $this->io->setAuthentication($match[3], urldecode($match[1]), urldecode($match[2])); } } $protocols = $this->config->get('github-protocols'); if (!is_array($protocols)) { throw new \RuntimeException('Config value "github-protocols" must be an array, got '.gettype($protocols)); } // public github, autoswitch protocols if (preg_match('{^(?:https?|git)://'.self::getGitHubDomainsRegex($this->config).'/(.*)}', $url, $match)) { $messages = array(); foreach ($protocols as $protocol) { if ('ssh' === $protocol) { $protoUrl = "git@" . $match[1] . ":" . $match[2]; } else { $protoUrl = $protocol ."://" . $match[1] . "/" . $match[2]; } if (0 === $this->process->execute(call_user_func($commandCallable, $protoUrl), $ignoredOutput, $cwd)) { return; } $messages[] = '- ' . $protoUrl . "\n" . preg_replace('#^#m', ' ', $this->process->getErrorOutput()); if ($initialClone) { $this->filesystem->removeDirectory($origCwd); } } // failed to checkout, first check git accessibility $this->throwException('Failed to clone ' . self::sanitizeUrl($url) .' via '.implode(', ', $protocols).' protocols, aborting.' . "\n\n" . implode("\n", $messages), $url); } // if we have a private github url and the ssh protocol is disabled then we skip it and directly fallback to https $bypassSshForGitHub = preg_match('{^git@'.self::getGitHubDomainsRegex($this->config).':(.+?)\.git$}i', $url) && !in_array('ssh', $protocols, true); $command = call_user_func($commandCallable, $url); $auth = null; if ($bypassSshForGitHub || 0 !== $this->process->execute($command, $ignoredOutput, $cwd)) { // private github repository without git access, try https with auth if (preg_match('{^git@'.self::getGitHubDomainsRegex($this->config).':(.+?)\.git$}i', $url, $match)) { if (!$this->io->hasAuthentication($match[1])) { $gitHubUtil = new GitHub($this->io, $this->config, $this->process); $message = 'Cloning failed using an ssh key for authentication, enter your GitHub credentials to access private repos'; if (!$gitHubUtil->authorizeOAuth($match[1]) && $this->io->isInteractive()) { $gitHubUtil->authorizeOAuthInteractively($match[1], $message); } } if ($this->io->hasAuthentication($match[1])) { $auth = $this->io->getAuthentication($match[1]); $authUrl = 'https://'.rawurlencode($auth['username']) . ':' . rawurlencode($auth['password']) . '@'.$match[1].'/'.$match[2].'.git'; $command = call_user_func($commandCallable, $authUrl); if (0 === $this->process->execute($command, $ignoredOutput, $cwd)) { return; } } } elseif ($this->isAuthenticationFailure($url, $match)) { // private non-github repo that failed to authenticate if (strpos($match[2], '@')) { list($authParts, $match[2]) = explode('@', $match[2], 2); } $storeAuth = false; if ($this->io->hasAuthentication($match[2])) { $auth = $this->io->getAuthentication($match[2]); } elseif ($this->io->isInteractive()) { $defaultUsername = null; if (isset($authParts) && $authParts) { if (false !== strpos($authParts, ':')) { list($defaultUsername, ) = explode(':', $authParts, 2); } else { $defaultUsername = $authParts; } } $this->io->writeError(' Authentication required ('.parse_url($url, PHP_URL_HOST).'):'); $auth = array( 'username' => $this->io->ask(' Username: ', $defaultUsername), 'password' => $this->io->askAndHideAnswer(' Password: '), ); $storeAuth = $this->config->get('store-auths'); } if ($auth) { $authUrl = $match[1].rawurlencode($auth['username']).':'.rawurlencode($auth['password']).'@'.$match[2].$match[3]; $command = call_user_func($commandCallable, $authUrl); if (0 === $this->process->execute($command, $ignoredOutput, $cwd)) { $this->io->setAuthentication($match[2], $auth['username'], $auth['password']); $authHelper = new AuthHelper($this->io, $this->config); $authHelper->storeAuth($match[2], $storeAuth); return; } } } if ($initialClone) { $this->filesystem->removeDirectory($origCwd); } $this->throwException('Failed to execute ' . self::sanitizeUrl($command) . "\n\n" . $this->process->getErrorOutput(), $url); } } private function isAuthenticationFailure($url, &$match) { if (!preg_match('{(https?://)([^/]+)(.*)$}i', $url, $match)) { return false; } $authFailures = array('fatal: Authentication failed', 'remote error: Invalid username or password.'); foreach ($authFailures as $authFailure) { if (strpos($this->process->getErrorOutput(), $authFailure) !== false) { return true; } } return false; } public static function cleanEnv() { if (ini_get('safe_mode') && false === strpos(ini_get('safe_mode_allowed_env_vars'), 'GIT_ASKPASS')) { throw new \RuntimeException('safe_mode is enabled and safe_mode_allowed_env_vars does not contain GIT_ASKPASS, can not set env var. You can disable safe_mode with "-dsafe_mode=0" when running composer'); } // added in git 1.7.1, prevents prompting the user for username/password if (getenv('GIT_ASKPASS') !== 'echo') { putenv('GIT_ASKPASS=echo'); unset($_SERVER['GIT_ASKPASS']); } // clean up rogue git env vars in case this is running in a git hook if (getenv('GIT_DIR')) { putenv('GIT_DIR'); unset($_SERVER['GIT_DIR']); } if (getenv('GIT_WORK_TREE')) { putenv('GIT_WORK_TREE'); unset($_SERVER['GIT_WORK_TREE']); } // Run processes with predictable LANGUAGE if (getenv('LANGUAGE') !== 'C') { putenv('LANGUAGE=C'); } // clean up env for OSX, see https://github.com/composer/composer/issues/2146#issuecomment-35478940 putenv("DYLD_LIBRARY_PATH"); unset($_SERVER['DYLD_LIBRARY_PATH']); } public static function getGitHubDomainsRegex(Config $config) { return '('.implode('|', array_map('preg_quote', $config->get('github-domains'))).')'; } public static function sanitizeUrl($message) { return preg_replace('{://([^@]+?):.+?@}', '://$1:***@', $message); } private function throwException($message, $url) { // git might delete a directory when it fails and php will not know clearstatcache(); if (0 !== $this->process->execute('git --version', $ignoredOutput)) { throw new \RuntimeException('Failed to clone '.self::sanitizeUrl($url).', git was not found, check that it is installed and in your PATH env.' . "\n\n" . $this->process->getErrorOutput()); } throw new \RuntimeException($message); } } composer-1.0.0-beta2/src/Composer/Util/GitHub.php000066400000000000000000000107601267577262200215440ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Util; use Composer\Factory; use Composer\IO\IOInterface; use Composer\Config; use Composer\Downloader\TransportException; /** * @author Jordi Boggiano */ class GitHub { protected $io; protected $config; protected $process; protected $remoteFilesystem; /** * Constructor. * * @param IOInterface $io The IO instance * @param Config $config The composer configuration * @param ProcessExecutor $process Process instance, injectable for mocking * @param RemoteFilesystem $remoteFilesystem Remote Filesystem, injectable for mocking */ public function __construct(IOInterface $io, Config $config, ProcessExecutor $process = null, RemoteFilesystem $remoteFilesystem = null) { $this->io = $io; $this->config = $config; $this->process = $process ?: new ProcessExecutor; $this->remoteFilesystem = $remoteFilesystem ?: Factory::createRemoteFilesystem($this->io, $config); } /** * Attempts to authorize a GitHub domain via OAuth * * @param string $originUrl The host this GitHub instance is located at * @return bool true on success */ public function authorizeOAuth($originUrl) { if (!in_array($originUrl, $this->config->get('github-domains'))) { return false; } // if available use token from git config if (0 === $this->process->execute('git config github.accesstoken', $output)) { $this->io->setAuthentication($originUrl, trim($output), 'x-oauth-basic'); return true; } return false; } /** * Authorizes a GitHub domain interactively via OAuth * * @param string $originUrl The host this GitHub instance is located at * @param string $message The reason this authorization is required * @throws \RuntimeException * @throws TransportException|\Exception * @return bool true on success */ public function authorizeOAuthInteractively($originUrl, $message = null) { if ($message) { $this->io->writeError($message); } $note = 'Composer'; if ($this->config->get('github-expose-hostname') === true && 0 === $this->process->execute('hostname', $output)) { $note .= ' on ' . trim($output); } $note .= ' ' . date('Y-m-d Hi'); $url = 'https://'.$originUrl.'/settings/tokens/new?scopes=repo&description=' . str_replace('%20', '+', rawurlencode($note)); $this->io->writeError(sprintf('Head to %s', $url)); $this->io->writeError(sprintf('to retrieve a token. It will be stored in "%s" for future use by Composer.', $this->config->getAuthConfigSource()->getName())); $token = trim($this->io->askAndHideAnswer('Token (hidden): ')); if (!$token) { $this->io->writeError('No token given, aborting.'); $this->io->writeError('You can also add it manually later by using "composer config github-oauth.github.com "'); return false; } $this->io->setAuthentication($originUrl, $token, 'x-oauth-basic'); try { $apiUrl = ('github.com' === $originUrl) ? 'api.github.com/' : $originUrl . '/api/v3/'; $this->remoteFilesystem->getContents($originUrl, 'https://'. $apiUrl, false, array( 'retry-auth-failure' => false, )); } catch (TransportException $e) { if (in_array($e->getCode(), array(403, 401))) { $this->io->writeError('Invalid token provided.'); $this->io->writeError('You can also add it manually later by using "composer config github-oauth.github.com "'); return false; } throw $e; } // store value in user config $this->config->getConfigSource()->removeConfigSetting('github-oauth.'.$originUrl); $this->config->getAuthConfigSource()->addConfigSetting('github-oauth.'.$originUrl, $token); $this->io->writeError('Token stored successfully.'); return true; } } composer-1.0.0-beta2/src/Composer/Util/GitLab.php000066400000000000000000000120441267577262200215210ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Util; use Composer\IO\IOInterface; use Composer\Config; use Composer\Factory; use Composer\Downloader\TransportException; use Composer\Json\JsonFile; /** * @author Roshan Gautam */ class GitLab { protected $io; protected $config; protected $process; protected $remoteFilesystem; /** * Constructor. * * @param IOInterface $io The IO instance * @param Config $config The composer configuration * @param ProcessExecutor $process Process instance, injectable for mocking * @param RemoteFilesystem $remoteFilesystem Remote Filesystem, injectable for mocking */ public function __construct(IOInterface $io, Config $config, ProcessExecutor $process = null, RemoteFilesystem $remoteFilesystem = null) { $this->io = $io; $this->config = $config; $this->process = $process ?: new ProcessExecutor(); $this->remoteFilesystem = $remoteFilesystem ?: Factory::createRemoteFilesystem($this->io, $config); } /** * Attempts to authorize a GitLab domain via OAuth. * * @param string $originUrl The host this GitLab instance is located at * * @return bool true on success */ public function authorizeOAuth($originUrl) { if (!in_array($originUrl, $this->config->get('gitlab-domains'), true)) { return false; } // if available use token from git config if (0 === $this->process->execute('git config gitlab.accesstoken', $output)) { $this->io->setAuthentication($originUrl, trim($output), 'oauth2'); return true; } return false; } /** * Authorizes a GitLab domain interactively via OAuth. * * @param string $originUrl The host this GitLab instance is located at * @param string $message The reason this authorization is required * * @throws \RuntimeException * @throws TransportException|\Exception * * @return bool true on success */ public function authorizeOAuthInteractively($scheme, $originUrl, $message = null) { if ($message) { $this->io->writeError($message); } $this->io->writeError(sprintf('A token will be created and stored in "%s", your password will never be stored', $this->config->getAuthConfigSource()->getName())); $this->io->writeError('To revoke access to this token you can visit '.$originUrl.'/profile/applications'); $attemptCounter = 0; while ($attemptCounter++ < 5) { try { $response = $this->createToken($scheme, $originUrl); } catch (TransportException $e) { // 401 is bad credentials, // 403 is max login attempts exceeded if (in_array($e->getCode(), array(403, 401))) { if (401 === $e->getCode()) { $this->io->writeError('Bad credentials.'); } else { $this->io->writeError('Maximum number of login attempts exceeded. Please try again later.'); } $this->io->writeError('You can also manually create a personal token at '.$scheme.'://'.$originUrl.'/profile/applications'); $this->io->writeError('Add it using "composer config gitlab-oauth.'.$originUrl.' "'); continue; } throw $e; } $this->io->setAuthentication($originUrl, $response['access_token'], 'oauth2'); // store value in user config in auth file $this->config->getAuthConfigSource()->addConfigSetting('gitlab-oauth.'.$originUrl, $response['access_token']); return true; } throw new \RuntimeException('Invalid GitLab credentials 5 times in a row, aborting.'); } private function createToken($scheme, $originUrl) { $username = $this->io->ask('Username: '); $password = $this->io->askAndHideAnswer('Password: '); $headers = array('Content-Type: application/x-www-form-urlencoded'); $apiUrl = $originUrl; $data = http_build_query(array( 'username' => $username, 'password' => $password, 'grant_type' => 'password', )); $options = array( 'retry-auth-failure' => false, 'http' => array( 'method' => 'POST', 'header' => $headers, 'content' => $data, ), ); $json = $this->remoteFilesystem->getContents($originUrl, $scheme.'://'.$apiUrl.'/oauth/token', false, $options); $this->io->writeError('Token successfully created'); return JsonFile::parseJson($json); } } composer-1.0.0-beta2/src/Composer/Util/NoProxyPattern.php000066400000000000000000000101111267577262200233240ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Util; /** * Tests URLs against no_proxy patterns. */ class NoProxyPattern { /** * @var string[] */ protected $rules = array(); /** * @param string $pattern no_proxy pattern */ public function __construct($pattern) { $this->rules = preg_split("/[\s,]+/", $pattern); } /** * Test a URL against the stored pattern. * * @param string $url * * @return true if the URL matches one of the rules. */ public function test($url) { $host = parse_url($url, PHP_URL_HOST); $port = parse_url($url, PHP_URL_PORT); if (empty($port)) { switch (parse_url($url, PHP_URL_SCHEME)) { case 'http': $port = 80; break; case 'https': $port = 443; break; } } foreach ($this->rules as $rule) { if ($rule == '*') { return true; } $match = false; list($ruleHost) = explode(':', $rule); list($base) = explode('/', $ruleHost); if (filter_var($base, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { // ip or cidr match if (!isset($ip)) { $ip = gethostbyname($host); } if (strpos($ruleHost, '/') === false) { $match = $ip === $ruleHost; } else { // gethostbyname() failed to resolve $host to an ip, so we assume // it must be proxied to let the proxy's DNS resolve it if ($ip === $host) { $match = false; } else { // match resolved IP against the rule $match = self::inCIDRBlock($ruleHost, $ip); } } } else { // match end of domain $haystack = '.' . trim($host, '.') . '.'; $needle = '.'. trim($ruleHost, '.') .'.'; $match = stripos(strrev($haystack), strrev($needle)) === 0; } // final port check if ($match && strpos($rule, ':') !== false) { list(, $rulePort) = explode(':', $rule); if (!empty($rulePort) && $port != $rulePort) { $match = false; } } if ($match) { return true; } } return false; } /** * Check an IP address against a CIDR * * http://framework.zend.com/svn/framework/extras/incubator/library/ZendX/Whois/Adapter/Cidr.php * * @param string $cidr IPv4 block in CIDR notation * @param string $ip IPv4 address * * @return bool */ private static function inCIDRBlock($cidr, $ip) { // Get the base and the bits from the CIDR list($base, $bits) = explode('/', $cidr); // Now split it up into it's classes list($a, $b, $c, $d) = explode('.', $base); // Now do some bit shifting/switching to convert to ints $i = ($a << 24) + ($b << 16) + ($c << 8) + $d; $mask = $bits == 0 ? 0 : (~0 << (32 - $bits)); // Here's our lowest int $low = $i & $mask; // Here's our highest int $high = $i | (~$mask & 0xFFFFFFFF); // Now split the ip we're checking against up into classes list($a, $b, $c, $d) = explode('.', $ip); // Now convert the ip we're checking against to an int $check = ($a << 24) + ($b << 16) + ($c << 8) + $d; // If the ip is within the range, including highest/lowest values, // then it's within the CIDR range return $check >= $low && $check <= $high; } } composer-1.0.0-beta2/src/Composer/Util/Perforce.php000066400000000000000000000422541267577262200221320ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Util; use Composer\IO\IOInterface; use Symfony\Component\Process\Process; /** * @author Matt Whittom */ class Perforce { protected $path; protected $p4Depot; protected $p4Client; protected $p4User; protected $p4Password; protected $p4Port; protected $p4Stream; protected $p4ClientSpec; protected $p4DepotType; protected $p4Branch; protected $process; protected $uniquePerforceClientName; protected $windowsFlag; protected $commandResult; protected $io; protected $filesystem; public function __construct($repoConfig, $port, $path, ProcessExecutor $process, $isWindows, IOInterface $io) { $this->windowsFlag = $isWindows; $this->p4Port = $port; $this->initializePath($path); $this->process = $process; $this->initialize($repoConfig); $this->io = $io; } public static function create($repoConfig, $port, $path, ProcessExecutor $process, IOInterface $io) { return new Perforce($repoConfig, $port, $path, $process, Platform::isWindows(), $io); } public static function checkServerExists($url, ProcessExecutor $processExecutor) { $output = null; return 0 === $processExecutor->execute('p4 -p ' . $url . ' info -s', $output); } public function initialize($repoConfig) { $this->uniquePerforceClientName = $this->generateUniquePerforceClientName(); if (null == $repoConfig) { return; } if (isset($repoConfig['unique_perforce_client_name'])) { $this->uniquePerforceClientName = $repoConfig['unique_perforce_client_name']; } if (isset($repoConfig['depot'])) { $this->p4Depot = $repoConfig['depot']; } if (isset($repoConfig['branch'])) { $this->p4Branch = $repoConfig['branch']; } if (isset($repoConfig['p4user'])) { $this->p4User = $repoConfig['p4user']; } else { $this->p4User = $this->getP4variable('P4USER'); } if (isset($repoConfig['p4password'])) { $this->p4Password = $repoConfig['p4password']; } } public function initializeDepotAndBranch($depot, $branch) { if (isset($depot)) { $this->p4Depot = $depot; } if (isset($branch)) { $this->p4Branch = $branch; } } public function generateUniquePerforceClientName() { return gethostname() . "_" . time(); } public function cleanupClientSpec() { $client = $this->getClient(); $task = 'client -d ' . $client; $useP4Client = false; $command = $this->generateP4Command($task, $useP4Client); $this->executeCommand($command); $clientSpec = $this->getP4ClientSpec(); $fileSystem = $this->getFilesystem(); $fileSystem->remove($clientSpec); } protected function executeCommand($command) { $this->commandResult = ""; $exit_code = $this->process->execute($command, $this->commandResult); return $exit_code; } public function getClient() { if (!isset($this->p4Client)) { $cleanStreamName = str_replace('@', '', str_replace('/', '_', str_replace('//', '', $this->getStream()))); $this->p4Client = 'composer_perforce_' . $this->uniquePerforceClientName . '_' . $cleanStreamName; } return $this->p4Client; } protected function getPath() { return $this->path; } public function initializePath($path) { $this->path = $path; $fs = $this->getFilesystem(); $fs->ensureDirectoryExists($path); } protected function getPort() { return $this->p4Port; } public function setStream($stream) { $this->p4Stream = $stream; $index = strrpos($stream, '/'); //Stream format is //depot/stream, while non-streaming depot is //depot if ($index > 2) { $this->p4DepotType = 'stream'; } } public function isStream() { return (strcmp($this->p4DepotType, 'stream') === 0); } public function getStream() { if (!isset($this->p4Stream)) { if ($this->isStream()) { $this->p4Stream = '//' . $this->p4Depot . '/' . $this->p4Branch; } else { $this->p4Stream = '//' . $this->p4Depot; } } return $this->p4Stream; } public function getStreamWithoutLabel($stream) { $index = strpos($stream, '@'); if ($index === false) { return $stream; } return substr($stream, 0, $index); } public function getP4ClientSpec() { $p4clientSpec = $this->path . '/' . $this->getClient() . '.p4.spec'; return $p4clientSpec; } public function getUser() { return $this->p4User; } public function setUser($user) { $this->p4User = $user; } public function queryP4User() { $this->getUser(); if (strlen($this->p4User) > 0) { return; } $this->p4User = $this->getP4variable('P4USER'); if (strlen($this->p4User) > 0) { return; } $this->p4User = $this->io->ask('Enter P4 User:'); if ($this->windowsFlag) { $command = 'p4 set P4USER=' . $this->p4User; } else { $command = 'export P4USER=' . $this->p4User; } $this->executeCommand($command); } protected function getP4variable($name) { if ($this->windowsFlag) { $command = 'p4 set'; $this->executeCommand($command); $result = trim($this->commandResult); $resArray = explode(PHP_EOL, $result); foreach ($resArray as $line) { $fields = explode('=', $line); if (strcmp($name, $fields[0]) == 0) { $index = strpos($fields[1], ' '); if ($index === false) { $value = $fields[1]; } else { $value = substr($fields[1], 0, $index); } $value = trim($value); return $value; } } return null; } else { $command = 'echo $' . $name; $this->executeCommand($command); $result = trim($this->commandResult); return $result; } } public function queryP4Password() { if (isset($this->p4Password)) { return $this->p4Password; } $password = $this->getP4variable('P4PASSWD'); if (strlen($password) <= 0) { $password = $this->io->askAndHideAnswer('Enter password for Perforce user ' . $this->getUser() . ': '); } $this->p4Password = $password; return $password; } public function generateP4Command($command, $useClient = true) { $p4Command = 'p4 '; $p4Command = $p4Command . '-u ' . $this->getUser() . ' '; if ($useClient) { $p4Command = $p4Command . '-c ' . $this->getClient() . ' '; } $p4Command = $p4Command . '-p ' . $this->getPort() . ' '; $p4Command = $p4Command . $command; return $p4Command; } public function isLoggedIn() { $command = $this->generateP4Command('login -s', false); $exitCode = $this->executeCommand($command); if ($exitCode) { $errorOutput = $this->process->getErrorOutput(); $index = strpos($errorOutput, $this->getUser()); if ($index === false) { $index = strpos($errorOutput, 'p4'); if ($index === false) { return false; } throw new \Exception('p4 command not found in path: ' . $errorOutput); } throw new \Exception('Invalid user name: ' . $this->getUser()); } return true; } public function connectClient() { $p4CreateClientCommand = $this->generateP4Command('client -i < ' . str_replace(" ", "\\ ", $this->getP4ClientSpec())); $this->executeCommand($p4CreateClientCommand); } public function syncCodeBase($sourceReference) { $prevDir = getcwd(); chdir($this->path); $p4SyncCommand = $this->generateP4Command('sync -f '); if (null != $sourceReference) { $p4SyncCommand = $p4SyncCommand . '@' . $sourceReference; } $this->executeCommand($p4SyncCommand); chdir($prevDir); } public function writeClientSpecToFile($spec) { fwrite($spec, 'Client: ' . $this->getClient() . PHP_EOL . PHP_EOL); fwrite($spec, 'Update: ' . date('Y/m/d H:i:s') . PHP_EOL . PHP_EOL); fwrite($spec, 'Access: ' . date('Y/m/d H:i:s') . PHP_EOL); fwrite($spec, 'Owner: ' . $this->getUser() . PHP_EOL . PHP_EOL); fwrite($spec, 'Description:' . PHP_EOL); fwrite($spec, ' Created by ' . $this->getUser() . ' from composer.' . PHP_EOL . PHP_EOL); fwrite($spec, 'Root: ' . $this->getPath() . PHP_EOL . PHP_EOL); fwrite($spec, 'Options: noallwrite noclobber nocompress unlocked modtime rmdir' . PHP_EOL . PHP_EOL); fwrite($spec, 'SubmitOptions: revertunchanged' . PHP_EOL . PHP_EOL); fwrite($spec, 'LineEnd: local' . PHP_EOL . PHP_EOL); if ($this->isStream()) { fwrite($spec, 'Stream:' . PHP_EOL); fwrite($spec, ' ' . $this->getStreamWithoutLabel($this->p4Stream) . PHP_EOL); } else { fwrite( $spec, 'View: ' . $this->getStream() . '/... //' . $this->getClient() . '/... ' . PHP_EOL ); } } public function writeP4ClientSpec() { $clientSpec = $this->getP4ClientSpec(); $spec = fopen($clientSpec, 'w'); try { $this->writeClientSpecToFile($spec); } catch (\Exception $e) { fclose($spec); throw $e; } fclose($spec); } protected function read($pipe, $name) { if (feof($pipe)) { return; } $line = fgets($pipe); while ($line != false) { $line = fgets($pipe); } return; } public function windowsLogin($password) { $command = $this->generateP4Command(' login -a'); $process = new Process($command, null, null, $password); return $process->run(); } public function p4Login() { $this->queryP4User(); if (!$this->isLoggedIn()) { $password = $this->queryP4Password(); if ($this->windowsFlag) { $this->windowsLogin($password); } else { $command = 'echo ' . $password . ' | ' . $this->generateP4Command(' login -a', false); $exitCode = $this->executeCommand($command); $result = trim($this->commandResult); if ($exitCode) { throw new \Exception("Error logging in:" . $this->process->getErrorOutput()); } } } } public function getComposerInformation($identifier) { $index = strpos($identifier, '@'); if ($index === false) { $composerJson = $identifier. '/composer.json'; return $this->getComposerInformationFromPath($composerJson); } return $this->getComposerInformationFromLabel($identifier, $index); } public function getComposerInformationFromPath($composerJson) { $command = $this->generateP4Command(' print ' . $composerJson); $this->executeCommand($command); $result = $this->commandResult; $index = strpos($result, '{'); if ($index === false) { return ''; } if ($index >= 0) { $rawData = substr($result, $index); $composer_info = json_decode($rawData, true); return $composer_info; } return ''; } public function getComposerInformationFromLabel($identifier, $index) { $composerJsonPath = substr($identifier, 0, $index) . '/composer.json' . substr($identifier, $index); $command = $this->generateP4Command(' files ' . $composerJsonPath, false); $this->executeCommand($command); $result = $this->commandResult; $index2 = strpos($result, 'no such file(s).'); if ($index2 === false) { $index3 = strpos($result, 'change'); if (!($index3 === false)) { $phrase = trim(substr($result, $index3)); $fields = explode(' ', $phrase); $id = $fields[1]; $composerJson = substr($identifier, 0, $index) . '/composer.json@' . $id; return $this->getComposerInformationFromPath($composerJson); } } return ""; } public function getBranches() { $possibleBranches = array(); if (!$this->isStream()) { $possibleBranches[$this->p4Branch] = $this->getStream(); } else { $command = $this->generateP4Command('streams //' . $this->p4Depot . '/...'); $this->executeCommand($command); $result = $this->commandResult; $resArray = explode(PHP_EOL, $result); foreach ($resArray as $line) { $resBits = explode(' ', $line); if (count($resBits) > 4) { $branch = preg_replace('/[^A-Za-z0-9 ]/', '', $resBits[4]); $possibleBranches[$branch] = $resBits[1]; } } } $command = $this->generateP4Command('changes '. $this->getStream() . '/...', false); $this->executeCommand($command); $result = $this->commandResult; $resArray = explode(PHP_EOL, $result); $lastCommit = $resArray[0]; $lastCommitArr = explode(' ', $lastCommit); $lastCommitNum = $lastCommitArr[1]; $branches = array('master' => $possibleBranches[$this->p4Branch] . '@'. $lastCommitNum); return $branches; } public function getTags() { $command = $this->generateP4Command('labels'); $this->executeCommand($command); $result = $this->commandResult; $resArray = explode(PHP_EOL, $result); $tags = array(); foreach ($resArray as $line) { $index = strpos($line, 'Label'); if (!($index === false)) { $fields = explode(' ', $line); $tags[$fields[1]] = $this->getStream() . '@' . $fields[1]; } } return $tags; } public function checkStream() { $command = $this->generateP4Command('depots', false); $this->executeCommand($command); $result = $this->commandResult; $resArray = explode(PHP_EOL, $result); foreach ($resArray as $line) { $index = strpos($line, 'Depot'); if (!($index === false)) { $fields = explode(' ', $line); if (strcmp($this->p4Depot, $fields[1]) === 0) { $this->p4DepotType = $fields[3]; return $this->isStream(); } } } return false; } /** * @param $reference * @return mixed|null */ protected function getChangeList($reference) { $index = strpos($reference, '@'); if ($index === false) { return null; } $label = substr($reference, $index); $command = $this->generateP4Command(' changes -m1 ' . $label); $this->executeCommand($command); $changes = $this->commandResult; if (strpos($changes, 'Change') !== 0) { return null; } $fields = explode(' ', $changes); $changeList = $fields[1]; return $changeList; } /** * @param $fromReference * @param $toReference * @return mixed|null */ public function getCommitLogs($fromReference, $toReference) { $fromChangeList = $this->getChangeList($fromReference); if ($fromChangeList == null) { return null; } $toChangeList = $this->getChangeList($toReference); if ($toChangeList == null) { return null; } $index = strpos($fromReference, '@'); $main = substr($fromReference, 0, $index) . '/...'; $command = $this->generateP4Command('filelog ' . $main . '@' . $fromChangeList. ',' . $toChangeList); $this->executeCommand($command); $result = $this->commandResult; return $result; } public function getFilesystem() { if (empty($this->filesystem)) { $this->filesystem = new Filesystem($this->process); } return $this->filesystem; } public function setFilesystem(Filesystem $fs) { $this->filesystem = $fs; } } composer-1.0.0-beta2/src/Composer/Util/Platform.php000066400000000000000000000011641267577262200221440ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Util; /** * Platform helper for uniform platform-specific tests. * * @author Niels Keurentjes */ class Platform { /** * @return bool Whether the host machine is running a Windows OS */ public static function isWindows() { return defined('PHP_WINDOWS_VERSION_BUILD'); } } composer-1.0.0-beta2/src/Composer/Util/ProcessExecutor.php000066400000000000000000000062661267577262200235250ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Util; use Symfony\Component\Process\Process; use Symfony\Component\Process\ProcessUtils; use Composer\IO\IOInterface; /** * @author Robert Schönthal */ class ProcessExecutor { protected static $timeout = 300; protected $captureOutput; protected $errorOutput; protected $io; public function __construct(IOInterface $io = null) { $this->io = $io; } /** * runs a process on the commandline * * @param string $command the command to execute * @param mixed $output the output will be written into this var if passed by ref * if a callable is passed it will be used as output handler * @param string $cwd the working directory * @return int statuscode */ public function execute($command, &$output = null, $cwd = null) { if ($this->io && $this->io->isDebug()) { $safeCommand = preg_replace('{(://[^:/\s]+:)[^@\s/]+}i', '$1****', $command); $this->io->writeError('Executing command ('.($cwd ?: 'CWD').'): '.$safeCommand); } // make sure that null translate to the proper directory in case the dir is a symlink // and we call a git command, because msysgit does not handle symlinks properly if (null === $cwd && Platform::isWindows() && false !== strpos($command, 'git') && getcwd()) { $cwd = realpath(getcwd()); } $this->captureOutput = count(func_get_args()) > 1; $this->errorOutput = null; $process = new Process($command, $cwd, null, null, static::getTimeout()); $callback = is_callable($output) ? $output : array($this, 'outputHandler'); $process->run($callback); if ($this->captureOutput && !is_callable($output)) { $output = $process->getOutput(); } $this->errorOutput = $process->getErrorOutput(); return $process->getExitCode(); } public function splitLines($output) { $output = trim($output); return ((string) $output === '') ? array() : preg_split('{\r?\n}', $output); } /** * Get any error output from the last command * * @return string */ public function getErrorOutput() { return $this->errorOutput; } public function outputHandler($type, $buffer) { if ($this->captureOutput) { return; } echo $buffer; } public static function getTimeout() { return static::$timeout; } public static function setTimeout($timeout) { static::$timeout = $timeout; } /** * Escapes a string to be used as a shell argument. * * @param string $argument The argument that will be escaped * * @return string The escaped argument */ public static function escape($argument) { return ProcessUtils::escapeArgument($argument); } } composer-1.0.0-beta2/src/Composer/Util/RemoteFilesystem.php000066400000000000000000001223001267577262200236540ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Util; use Composer\Config; use Composer\IO\IOInterface; use Composer\Downloader\TransportException; /** * @author François Pluchino * @author Jordi Boggiano * @author Nils Adermann */ class RemoteFilesystem { private $io; private $config; private $scheme; private $bytesMax; private $originUrl; private $fileUrl; private $fileName; private $retry; private $progress; private $lastProgress; private $options = array(); private $peerCertificateMap = array(); private $disableTls = false; private $retryAuthFailure; private $lastHeaders; private $storeAuth; private $degradedMode = false; private $redirects; private $maxRedirects = 20; /** * Constructor. * * @param IOInterface $io The IO instance * @param Config $config The config * @param array $options The options * @param bool $disableTls */ public function __construct(IOInterface $io, Config $config = null, array $options = array(), $disableTls = false) { $this->io = $io; // Setup TLS options // The cafile option can be set via config.json if ($disableTls === false) { $this->options = $this->getTlsDefaults($options); } else { $this->disableTls = true; } // handle the other externally set options normally. $this->options = array_replace_recursive($this->options, $options); $this->config = $config; } /** * Copy the remote file in local. * * @param string $originUrl The origin URL * @param string $fileUrl The file URL * @param string $fileName the local filename * @param bool $progress Display the progression * @param array $options Additional context options * * @return bool true */ public function copy($originUrl, $fileUrl, $fileName, $progress = true, $options = array()) { return $this->get($originUrl, $fileUrl, $options, $fileName, $progress); } /** * Get the content. * * @param string $originUrl The origin URL * @param string $fileUrl The file URL * @param bool $progress Display the progression * @param array $options Additional context options * * @return bool|string The content */ public function getContents($originUrl, $fileUrl, $progress = true, $options = array()) { return $this->get($originUrl, $fileUrl, $options, null, $progress); } /** * Retrieve the options set in the constructor * * @return array Options */ public function getOptions() { return $this->options; } /** * Merges new options * * @return array $options */ public function setOptions(array $options) { $this->options = array_replace_recursive($this->options, $options); } public function isTlsDisabled() { return $this->disableTls === true; } /** * Returns the headers of the last request * * @return array */ public function getLastHeaders() { return $this->lastHeaders; } /** * @param array $headers array of returned headers like from getLastHeaders() * @param string $name header name (case insensitive) * @return string|null */ public function findHeaderValue(array $headers, $name) { $value = null; foreach ($headers as $header) { if (preg_match('{^'.$name.':\s*(.+?)\s*$}i', $header, $match)) { $value = $match[1]; } elseif (preg_match('{^HTTP/}i', $header)) { // In case of redirects, http_response_headers contains the headers of all responses // so we reset the flag when a new response is being parsed as we are only interested in the last response $value = null; } } return $value; } /** * @param array $headers array of returned headers like from getLastHeaders() * @return int|null */ public function findStatusCode(array $headers) { $value = null; foreach ($headers as $header) { if (preg_match('{^HTTP/\S+ (\d+)}i', $header, $match)) { // In case of redirects, http_response_headers contains the headers of all responses // so we can not return directly and need to keep iterating $value = (int) $match[1]; } } return $value; } /** * Get file content or copy action. * * @param string $originUrl The origin URL * @param string $fileUrl The file URL * @param array $additionalOptions context options * @param string $fileName the local filename * @param bool $progress Display the progression * * @throws TransportException|\Exception * @throws TransportException When the file could not be downloaded * * @return bool|string */ protected function get($originUrl, $fileUrl, $additionalOptions = array(), $fileName = null, $progress = true) { if (strpos($originUrl, '.github.com') === (strlen($originUrl) - 11)) { $originUrl = 'github.com'; } $this->scheme = parse_url($fileUrl, PHP_URL_SCHEME); $this->bytesMax = 0; $this->originUrl = $originUrl; $this->fileUrl = $fileUrl; $this->fileName = $fileName; $this->progress = $progress; $this->lastProgress = null; $this->retryAuthFailure = true; $this->lastHeaders = array(); $this->redirects = 1; // The first request counts. // capture username/password from URL if there is one if (preg_match('{^https?://(.+):(.+)@([^/]+)}i', $fileUrl, $match)) { $this->io->setAuthentication($originUrl, urldecode($match[1]), urldecode($match[2])); } $tempAdditionalOptions = $additionalOptions; if (isset($tempAdditionalOptions['retry-auth-failure'])) { $this->retryAuthFailure = (bool) $tempAdditionalOptions['retry-auth-failure']; unset($tempAdditionalOptions['retry-auth-failure']); } $isRedirect = false; if (isset($tempAdditionalOptions['redirects'])) { $this->redirects = $tempAdditionalOptions['redirects']; $isRedirect = true; unset($tempAdditionalOptions['redirects']); } $options = $this->getOptionsForUrl($originUrl, $tempAdditionalOptions); unset($tempAdditionalOptions); $userlandFollow = isset($options['http']['follow_location']) && !$options['http']['follow_location']; $origFileUrl = $fileUrl; if (isset($options['github-token'])) { $fileUrl .= (false === strpos($fileUrl, '?') ? '?' : '&') . 'access_token='.$options['github-token']; unset($options['github-token']); } if (isset($options['gitlab-token'])) { $fileUrl .= (false === strpos($fileUrl, '?') ? '?' : '&') . 'access_token='.$options['gitlab-token']; unset($options['gitlab-token']); } if (isset($options['http'])) { $options['http']['ignore_errors'] = true; } if ($this->degradedMode && substr($fileUrl, 0, 21) === 'http://packagist.org/') { // access packagist using the resolved IPv4 instead of the hostname to force IPv4 protocol $fileUrl = 'http://' . gethostbyname('packagist.org') . substr($fileUrl, 20); } $ctx = StreamContextFactory::getContext($fileUrl, $options, array('notification' => array($this, 'callbackGet'))); $actualContextOptions = stream_context_get_options($ctx); $usingProxy = !empty($actualContextOptions['http']['proxy']) ? ' using proxy ' . $actualContextOptions['http']['proxy'] : ''; $this->io->writeError((substr($origFileUrl, 0, 4) === 'http' ? 'Downloading ' : 'Reading ') . $origFileUrl . $usingProxy, true, IOInterface::DEBUG); unset($origFileUrl, $actualContextOptions); if ($this->progress && !$isRedirect) { $this->io->writeError(" Downloading: Connecting...", false); } // Check for secure HTTP if ( ($this->scheme === 'http' || substr($fileUrl, 0, 5) === 'http:') && $this->config && $this->config->get('secure-http') ) { // Passthru unsecure Packagist calls to $hashed providers as file integrity is verified with sha256 if (substr($fileUrl, 0, 23) !== 'http://packagist.org/p/' || (false === strpos($fileUrl, '$') && false === strpos($fileUrl, '%24'))) { // other URLs must fail hard throw new TransportException(sprintf( 'Your configuration does not allow connection to %s://%s. See https://getcomposer.org/doc/06-config.md#secure-http for details.', $this->scheme, $originUrl )); } } $errorMessage = ''; $errorCode = 0; $result = false; set_error_handler(function ($code, $msg) use (&$errorMessage) { if ($errorMessage) { $errorMessage .= "\n"; } $errorMessage .= preg_replace('{^file_get_contents\(.*?\): }', '', $msg); }); try { $result = file_get_contents($fileUrl, false, $ctx); if (PHP_VERSION_ID < 50600 && !empty($options['ssl']['peer_fingerprint'])) { // Emulate fingerprint validation on PHP < 5.6 $params = stream_context_get_params($ctx); $expectedPeerFingerprint = $options['ssl']['peer_fingerprint']; $peerFingerprint = TlsHelper::getCertificateFingerprint($params['options']['ssl']['peer_certificate']); // Constant time compare??! if ($expectedPeerFingerprint !== $peerFingerprint) { throw new TransportException('Peer fingerprint did not match'); } } } catch (\Exception $e) { if ($e instanceof TransportException && !empty($http_response_header[0])) { $e->setHeaders($http_response_header); $e->setStatusCode($this->findStatusCode($http_response_header)); } if ($e instanceof TransportException && $result !== false) { $e->setResponse($result); } $result = false; } if ($errorMessage && !ini_get('allow_url_fopen')) { $errorMessage = 'allow_url_fopen must be enabled in php.ini ('.$errorMessage.')'; } restore_error_handler(); if (isset($e) && !$this->retry) { if (!$this->degradedMode && false !== strpos($e->getMessage(), 'Operation timed out')) { $this->degradedMode = true; $this->io->writeError(array( ''.$e->getMessage().'', 'Retrying with degraded mode, check https://getcomposer.org/doc/articles/troubleshooting.md#degraded-mode for more info', )); return $this->get($this->originUrl, $this->fileUrl, $additionalOptions, $this->fileName, $this->progress); } throw $e; } $statusCode = null; if (!empty($http_response_header[0])) { $statusCode = $this->findStatusCode($http_response_header); } // handle 3xx redirects for php<5.6, 304 Not Modified is excluded $hasFollowedRedirect = false; if ($userlandFollow && $statusCode >= 300 && $statusCode <= 399 && $statusCode !== 304 && $this->redirects < $this->maxRedirects) { $hasFollowedRedirect = true; $result = $this->handleRedirect($http_response_header, $additionalOptions, $result); } // fail 4xx and 5xx responses and capture the response if ($statusCode && $statusCode >= 400 && $statusCode <= 599) { if (!$this->retry) { $e = new TransportException('The "'.$this->fileUrl.'" file could not be downloaded ('.$http_response_header[0].')', $statusCode); $e->setHeaders($http_response_header); $e->setResponse($result); $e->setStatusCode($statusCode); throw $e; } $result = false; } if ($this->progress && !$this->retry && !$isRedirect) { $this->io->overwriteError(" Downloading: 100%"); } // decode gzip if ($result && extension_loaded('zlib') && substr($fileUrl, 0, 4) === 'http' && !$hasFollowedRedirect) { $decode = 'gzip' === strtolower($this->findHeaderValue($http_response_header, 'content-encoding')); if ($decode) { try { if (PHP_VERSION_ID >= 50400) { $result = zlib_decode($result); } else { // work around issue with gzuncompress & co that do not work with all gzip checksums $result = file_get_contents('compress.zlib://data:application/octet-stream;base64,'.base64_encode($result)); } if (!$result) { throw new TransportException('Failed to decode zlib stream'); } } catch (\Exception $e) { if ($this->degradedMode) { throw $e; } $this->degradedMode = true; $this->io->writeError(array( 'Failed to decode response: '.$e->getMessage().'', 'Retrying with degraded mode, check https://getcomposer.org/doc/articles/troubleshooting.md#degraded-mode for more info', )); return $this->get($this->originUrl, $this->fileUrl, $additionalOptions, $this->fileName, $this->progress); } } } // handle copy command if download was successful if (false !== $result && null !== $fileName && !$isRedirect) { if ('' === $result) { throw new TransportException('"'.$this->fileUrl.'" appears broken, and returned an empty 200 response'); } $errorMessage = ''; set_error_handler(function ($code, $msg) use (&$errorMessage) { if ($errorMessage) { $errorMessage .= "\n"; } $errorMessage .= preg_replace('{^file_put_contents\(.*?\): }', '', $msg); }); $result = (bool) file_put_contents($fileName, $result); restore_error_handler(); if (false === $result) { throw new TransportException('The "'.$this->fileUrl.'" file could not be written to '.$fileName.': '.$errorMessage); } } // Handle SSL cert match issues if (false === $result && false !== strpos($errorMessage, 'Peer certificate') && PHP_VERSION_ID < 50600) { // Certificate name error, PHP doesn't support subjectAltName on PHP < 5.6 // The procedure to handle sAN for older PHP's is: // // 1. Open socket to remote server and fetch certificate (disabling peer // validation because PHP errors without giving up the certificate.) // // 2. Verifying the domain in the URL against the names in the sAN field. // If there is a match record the authority [host/port], certificate // common name, and certificate fingerprint. // // 3. Retry the original request but changing the CN_match parameter to // the common name extracted from the certificate in step 2. // // 4. To prevent any attempt at being hoodwinked by switching the // certificate between steps 2 and 3 the fingerprint of the certificate // presented in step 3 is compared against the one recorded in step 2. if (TlsHelper::isOpensslParseSafe()) { $certDetails = $this->getCertificateCnAndFp($this->fileUrl, $options); if ($certDetails) { $this->peerCertificateMap[$this->getUrlAuthority($this->fileUrl)] = $certDetails; $this->retry = true; } } else { $this->io->writeError(sprintf( 'Your version of PHP, %s, is affected by CVE-2013-6420 and cannot safely perform certificate validation, we strongly suggest you upgrade.', PHP_VERSION )); } } if ($this->retry) { $this->retry = false; $result = $this->get($this->originUrl, $this->fileUrl, $additionalOptions, $this->fileName, $this->progress); if ($this->storeAuth && $this->config) { $authHelper = new AuthHelper($this->io, $this->config); $authHelper->storeAuth($this->originUrl, $this->storeAuth); $this->storeAuth = false; } return $result; } if (false === $result) { $e = new TransportException('The "'.$this->fileUrl.'" file could not be downloaded: '.$errorMessage, $errorCode); if (!empty($http_response_header[0])) { $e->setHeaders($http_response_header); } if (!$this->degradedMode && false !== strpos($e->getMessage(), 'Operation timed out')) { $this->degradedMode = true; $this->io->writeError(array( ''.$e->getMessage().'', 'Retrying with degraded mode, check https://getcomposer.org/doc/articles/troubleshooting.md#degraded-mode for more info', )); return $this->get($this->originUrl, $this->fileUrl, $additionalOptions, $this->fileName, $this->progress); } throw $e; } if (!empty($http_response_header[0])) { $this->lastHeaders = $http_response_header; } return $result; } /** * Get notification action. * * @param int $notificationCode The notification code * @param int $severity The severity level * @param string $message The message * @param int $messageCode The message code * @param int $bytesTransferred The loaded size * @param int $bytesMax The total size * @throws TransportException */ protected function callbackGet($notificationCode, $severity, $message, $messageCode, $bytesTransferred, $bytesMax) { switch ($notificationCode) { case STREAM_NOTIFY_FAILURE: if (400 === $messageCode) { // This might happen if your host is secured by ssl client certificate authentication // but you do not send an appropriate certificate throw new TransportException("The '" . $this->fileUrl . "' URL could not be accessed: " . $message, $messageCode); } // intentional fallthrough to the next case as the notificationCode // isn't always consistent and we should inspect the messageCode for 401s case STREAM_NOTIFY_AUTH_REQUIRED: if (401 === $messageCode) { // Bail if the caller is going to handle authentication failures itself. if (!$this->retryAuthFailure) { break; } $this->promptAuthAndRetry($messageCode); } break; case STREAM_NOTIFY_AUTH_RESULT: if (403 === $messageCode) { // Bail if the caller is going to handle authentication failures itself. if (!$this->retryAuthFailure) { break; } $this->promptAuthAndRetry($messageCode, $message); } break; case STREAM_NOTIFY_FILE_SIZE_IS: if ($this->bytesMax < $bytesMax) { $this->bytesMax = $bytesMax; } break; case STREAM_NOTIFY_PROGRESS: if ($this->bytesMax > 0 && $this->progress) { $progression = round($bytesTransferred / $this->bytesMax * 100); if ((0 === $progression % 5) && 100 !== $progression && $progression !== $this->lastProgress) { $this->lastProgress = $progression; $this->io->overwriteError(" Downloading: $progression%", false); } } break; default: break; } } protected function promptAuthAndRetry($httpStatus, $reason = null) { if ($this->config && in_array($this->originUrl, $this->config->get('github-domains'), true)) { $message = "\n".'Could not fetch '.$this->fileUrl.', please create a GitHub OAuth token '.($httpStatus === 404 ? 'to access private repos' : 'to go over the API rate limit'); $gitHubUtil = new GitHub($this->io, $this->config, null); if (!$gitHubUtil->authorizeOAuth($this->originUrl) && (!$this->io->isInteractive() || !$gitHubUtil->authorizeOAuthInteractively($this->originUrl, $message)) ) { throw new TransportException('Could not authenticate against '.$this->originUrl, 401); } } elseif ($this->config && in_array($this->originUrl, $this->config->get('gitlab-domains'), true)) { $message = "\n".'Could not fetch '.$this->fileUrl.', enter your ' . $this->originUrl . ' credentials ' .($httpStatus === 401 ? 'to access private repos' : 'to go over the API rate limit'); $gitLabUtil = new GitLab($this->io, $this->config, null); if (!$gitLabUtil->authorizeOAuth($this->originUrl) && (!$this->io->isInteractive() || !$gitLabUtil->authorizeOAuthInteractively($this->scheme, $this->originUrl, $message)) ) { throw new TransportException('Could not authenticate against '.$this->originUrl, 401); } } else { // 404s are only handled for github if ($httpStatus === 404) { return; } // fail if the console is not interactive if (!$this->io->isInteractive()) { if ($httpStatus === 401) { $message = "The '" . $this->fileUrl . "' URL required authentication.\nYou must be using the interactive console to authenticate"; } if ($httpStatus === 403) { $message = "The '" . $this->fileUrl . "' URL could not be accessed: " . $reason; } throw new TransportException($message, $httpStatus); } // fail if we already have auth if ($this->io->hasAuthentication($this->originUrl)) { throw new TransportException("Invalid credentials for '" . $this->fileUrl . "', aborting.", $httpStatus); } $this->io->overwriteError(' Authentication required ('.parse_url($this->fileUrl, PHP_URL_HOST).'):'); $username = $this->io->ask(' Username: '); $password = $this->io->askAndHideAnswer(' Password: '); $this->io->setAuthentication($this->originUrl, $username, $password); $this->storeAuth = $this->config->get('store-auths'); } $this->retry = true; throw new TransportException('RETRY'); } protected function getOptionsForUrl($originUrl, $additionalOptions) { $tlsOptions = array(); // Setup remaining TLS options - the matching may need monitoring, esp. www vs none in CN if ($this->disableTls === false && PHP_VERSION_ID < 50600 && !stream_is_local($this->fileUrl)) { $host = parse_url($this->fileUrl, PHP_URL_HOST); if (PHP_VERSION_ID >= 50304) { // Must manually follow when setting CN_match because this causes all // redirects to be validated against the same CN_match value. $userlandFollow = true; } else { // PHP < 5.3.4 does not support follow_location, for those people // do some really nasty hard coded transformations. These will // still breakdown if the site redirects to a domain we don't // expect. if ($host === 'github.com' || $host === 'api.github.com') { $host = '*.github.com'; } } $tlsOptions['ssl']['CN_match'] = $host; $tlsOptions['ssl']['SNI_server_name'] = $host; $urlAuthority = $this->getUrlAuthority($this->fileUrl); if (isset($this->peerCertificateMap[$urlAuthority])) { // Handle subjectAltName on lesser PHP's. $certMap = $this->peerCertificateMap[$urlAuthority]; $this->io->writeError(sprintf( 'Using %s as CN for subjectAltName enabled host %s', $certMap['cn'], $urlAuthority ), true, IOInterface::DEBUG); $tlsOptions['ssl']['CN_match'] = $certMap['cn']; $tlsOptions['ssl']['peer_fingerprint'] = $certMap['fp']; } } $headers = array(); if (extension_loaded('zlib')) { $headers[] = 'Accept-Encoding: gzip'; } $options = array_replace_recursive($this->options, $tlsOptions, $additionalOptions); if (!$this->degradedMode) { // degraded mode disables HTTP/1.1 which causes issues with some bad // proxies/software due to the use of chunked encoding $options['http']['protocol_version'] = 1.1; $headers[] = 'Connection: close'; } if (isset($userlandFollow)) { $options['http']['follow_location'] = 0; } if ($this->io->hasAuthentication($originUrl)) { $auth = $this->io->getAuthentication($originUrl); if ('github.com' === $originUrl && 'x-oauth-basic' === $auth['password']) { $options['github-token'] = $auth['username']; } elseif ($this->config && in_array($originUrl, $this->config->get('gitlab-domains'), true)) { if ($auth['password'] === 'oauth2') { $headers[] = 'Authorization: Bearer '.$auth['username']; } } else { $authStr = base64_encode($auth['username'] . ':' . $auth['password']); $headers[] = 'Authorization: Basic '.$authStr; } } if (isset($options['http']['header']) && !is_array($options['http']['header'])) { $options['http']['header'] = explode("\r\n", trim($options['http']['header'], "\r\n")); } foreach ($headers as $header) { $options['http']['header'][] = $header; } return $options; } private function handleRedirect(array $http_response_header, array $additionalOptions, $result) { if ($locationHeader = $this->findHeaderValue($http_response_header, 'location')) { if (parse_url($locationHeader, PHP_URL_SCHEME)) { // Absolute URL; e.g. https://example.com/composer $targetUrl = $locationHeader; } elseif (parse_url($locationHeader, PHP_URL_HOST)) { // Scheme relative; e.g. //example.com/foo $targetUrl = $this->scheme.':'.$locationHeader; } elseif ('/' === $locationHeader[0]) { // Absolute path; e.g. /foo $urlHost = parse_url($this->fileUrl, PHP_URL_HOST); // Replace path using hostname as an anchor. $targetUrl = preg_replace('{^(.+(?://|@)'.preg_quote($urlHost).'(?::\d+)?)(?:[/\?].*)?$}', '\1'.$locationHeader, $this->fileUrl); } else { // Relative path; e.g. foo // This actually differs from PHP which seems to add duplicate slashes. $targetUrl = preg_replace('{^(.+/)[^/?]*(?:\?.*)?$}', '\1'.$locationHeader, $this->fileUrl); } } if (!empty($targetUrl)) { $this->redirects++; $this->io->writeError(sprintf('Following redirect (%u) %s', $this->redirects, $targetUrl), true, IOInterface::DEBUG); $additionalOptions['redirects'] = $this->redirects; return $this->get($this->originUrl, $targetUrl, $additionalOptions, $this->fileName, $this->progress); } if (!$this->retry) { $e = new TransportException('The "'.$this->fileUrl.'" file could not be downloaded, got redirect without Location ('.$http_response_header[0].')'); $e->setHeaders($http_response_header); $e->setResponse($result); throw $e; } return false; } /** * @param array $options * * @return array */ private function getTlsDefaults(array $options) { $ciphers = implode(':', array( 'ECDHE-RSA-AES128-GCM-SHA256', 'ECDHE-ECDSA-AES128-GCM-SHA256', 'ECDHE-RSA-AES256-GCM-SHA384', 'ECDHE-ECDSA-AES256-GCM-SHA384', 'DHE-RSA-AES128-GCM-SHA256', 'DHE-DSS-AES128-GCM-SHA256', 'kEDH+AESGCM', 'ECDHE-RSA-AES128-SHA256', 'ECDHE-ECDSA-AES128-SHA256', 'ECDHE-RSA-AES128-SHA', 'ECDHE-ECDSA-AES128-SHA', 'ECDHE-RSA-AES256-SHA384', 'ECDHE-ECDSA-AES256-SHA384', 'ECDHE-RSA-AES256-SHA', 'ECDHE-ECDSA-AES256-SHA', 'DHE-RSA-AES128-SHA256', 'DHE-RSA-AES128-SHA', 'DHE-DSS-AES128-SHA256', 'DHE-RSA-AES256-SHA256', 'DHE-DSS-AES256-SHA', 'DHE-RSA-AES256-SHA', 'AES128-GCM-SHA256', 'AES256-GCM-SHA384', 'ECDHE-RSA-RC4-SHA', 'ECDHE-ECDSA-RC4-SHA', 'AES128', 'AES256', 'RC4-SHA', 'HIGH', '!aNULL', '!eNULL', '!EXPORT', '!DES', '!3DES', '!MD5', '!PSK', )); /** * CN_match and SNI_server_name are only known once a URL is passed. * They will be set in the getOptionsForUrl() method which receives a URL. * * cafile or capath can be overridden by passing in those options to constructor. */ $defaults = array( 'ssl' => array( 'ciphers' => $ciphers, 'verify_peer' => true, 'verify_depth' => 7, 'SNI_enabled' => true, 'capture_peer_cert' => true, ), ); if (isset($options['ssl'])) { $defaults['ssl'] = array_replace_recursive($defaults['ssl'], $options['ssl']); } /** * Attempt to find a local cafile or throw an exception if none pre-set * The user may go download one if this occurs. */ if (!isset($defaults['ssl']['cafile']) && !isset($defaults['ssl']['capath'])) { $result = $this->getSystemCaRootBundlePath(); if (preg_match('{^phar://}', $result)) { $hash = hash_file('sha256', $result); $targetPath = rtrim(sys_get_temp_dir(), '\\/') . '/composer-cacert-' . $hash . '.pem'; if (!file_exists($targetPath) || $hash !== hash_file('sha256', $targetPath)) { $this->streamCopy($result, $targetPath); chmod($targetPath, 0666); } $defaults['ssl']['cafile'] = $targetPath; } elseif (is_dir($result)) { $defaults['ssl']['capath'] = $result; } else { $defaults['ssl']['cafile'] = $result; } } if (isset($defaults['ssl']['cafile']) && (!is_readable($defaults['ssl']['cafile']) || !$this->validateCaFile($defaults['ssl']['cafile']))) { throw new TransportException('The configured cafile was not valid or could not be read.'); } if (isset($defaults['ssl']['capath']) && (!is_dir($defaults['ssl']['capath']) || !is_readable($defaults['ssl']['capath']))) { throw new TransportException('The configured capath was not valid or could not be read.'); } /** * Disable TLS compression to prevent CRIME attacks where supported. */ if (PHP_VERSION_ID >= 50413) { $defaults['ssl']['disable_compression'] = true; } return $defaults; } /** * This method was adapted from Sslurp. * https://github.com/EvanDotPro/Sslurp * * (c) Evan Coury * * For the full copyright and license information, please see below: * * Copyright (c) 2013, Evan Coury * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * @return string */ private function getSystemCaRootBundlePath() { static $caPath = null; if ($caPath !== null) { return $caPath; } // If SSL_CERT_FILE env variable points to a valid certificate/bundle, use that. // This mimics how OpenSSL uses the SSL_CERT_FILE env variable. $envCertFile = getenv('SSL_CERT_FILE'); if ($envCertFile && is_readable($envCertFile) && $this->validateCaFile($envCertFile)) { return $caPath = $envCertFile; } // If SSL_CERT_DIR env variable points to a valid certificate/bundle, use that. // This mimics how OpenSSL uses the SSL_CERT_FILE env variable. $envCertDir = getenv('SSL_CERT_DIR'); if ($envCertDir && is_dir($envCertDir) && is_readable($envCertDir)) { return $caPath = $envCertDir; } $configured = ini_get('openssl.cafile'); if ($configured && strlen($configured) > 0 && is_readable($configured) && $this->validateCaFile($configured)) { return $caPath = $configured; } $configured = ini_get('openssl.capath'); if ($configured && is_dir($configured) && is_readable($configured)) { return $caPath = $configured; } $caBundlePaths = array( '/etc/pki/tls/certs/ca-bundle.crt', // Fedora, RHEL, CentOS (ca-certificates package) '/etc/ssl/certs/ca-certificates.crt', // Debian, Ubuntu, Gentoo, Arch Linux (ca-certificates package) '/etc/ssl/ca-bundle.pem', // SUSE, openSUSE (ca-certificates package) '/usr/local/share/certs/ca-root-nss.crt', // FreeBSD (ca_root_nss_package) '/usr/ssl/certs/ca-bundle.crt', // Cygwin '/opt/local/share/curl/curl-ca-bundle.crt', // OS X macports, curl-ca-bundle package '/usr/local/share/curl/curl-ca-bundle.crt', // Default cURL CA bunde path (without --with-ca-bundle option) '/usr/share/ssl/certs/ca-bundle.crt', // Really old RedHat? '/etc/ssl/cert.pem', // OpenBSD '/usr/local/etc/ssl/cert.pem', // FreeBSD 10.x ); foreach ($caBundlePaths as $caBundle) { if (Silencer::call('is_readable', $caBundle) && $this->validateCaFile($caBundle)) { return $caPath = $caBundle; } } foreach ($caBundlePaths as $caBundle) { $caBundle = dirname($caBundle); if (is_dir($caBundle) && glob($caBundle.'/*')) { return $caPath = $caBundle; } } return $caPath = __DIR__.'/../../../res/cacert.pem'; // Bundled with Composer, last resort } /** * @param string $filename * * @return bool */ private function validateCaFile($filename) { static $files = array(); if (isset($files[$filename])) { return $files[$filename]; } $this->io->writeError('Checking CA file '.realpath($filename), true, IOInterface::DEBUG); $contents = file_get_contents($filename); // assume the CA is valid if php is vulnerable to // https://www.sektioneins.de/advisories/advisory-012013-php-openssl_x509_parse-memory-corruption-vulnerability.html if (!TlsHelper::isOpensslParseSafe()) { $this->io->writeError(sprintf( 'Your version of PHP, %s, is affected by CVE-2013-6420 and cannot safely perform certificate validation, we strongly suggest you upgrade.', PHP_VERSION )); return $files[$filename] = !empty($contents); } return $files[$filename] = (bool) openssl_x509_parse($contents); } /** * Uses stream_copy_to_stream instead of copy to work around https://bugs.php.net/bug.php?id=64634 * * @param string $source * @param string $target */ private function streamCopy($source, $target) { $source = fopen($source, 'r'); $target = fopen($target, 'w+'); stream_copy_to_stream($source, $target); fclose($source); fclose($target); unset($source, $target); } /** * Fetch certificate common name and fingerprint for validation of SAN. * * @todo Remove when PHP 5.6 is minimum supported version. */ private function getCertificateCnAndFp($url, $options) { if (PHP_VERSION_ID >= 50600) { throw new \BadMethodCallException(sprintf( '%s must not be used on PHP >= 5.6', __METHOD__ )); } $context = StreamContextFactory::getContext($url, $options, array('options' => array( 'ssl' => array( 'capture_peer_cert' => true, 'verify_peer' => false, // Yes this is fucking insane! But PHP is lame. ), ), )); // Ideally this would just use stream_socket_client() to avoid sending a // HTTP request but that does not capture the certificate. if (false === $handle = @fopen($url, 'rb', false, $context)) { return; } // Close non authenticated connection without reading any content. fclose($handle); $handle = null; $params = stream_context_get_params($context); if (!empty($params['options']['ssl']['peer_certificate'])) { $peerCertificate = $params['options']['ssl']['peer_certificate']; if (TlsHelper::checkCertificateHost($peerCertificate, parse_url($url, PHP_URL_HOST), $commonName)) { return array( 'cn' => $commonName, 'fp' => TlsHelper::getCertificateFingerprint($peerCertificate), ); } } } private function getUrlAuthority($url) { $defaultPorts = array( 'ftp' => 21, 'http' => 80, 'https' => 443, 'ssh2.sftp' => 22, 'ssh2.scp' => 22, ); $scheme = parse_url($url, PHP_URL_SCHEME); if (!isset($defaultPorts[$scheme])) { throw new \InvalidArgumentException(sprintf( 'Could not get default port for unknown scheme: %s', $scheme )); } $defaultPort = $defaultPorts[$scheme]; $port = parse_url($url, PHP_URL_PORT) ?: $defaultPort; return parse_url($url, PHP_URL_HOST).':'.$port; } } composer-1.0.0-beta2/src/Composer/Util/Silencer.php000066400000000000000000000041761267577262200221320ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Util; /** * Temporarily suppress PHP error reporting, usually warnings and below. * * @author Niels Keurentjes */ class Silencer { /** * @var int[] Unpop stack */ private static $stack = array(); /** * Suppresses given mask or errors. * * @param int|null $mask Error levels to suppress, default value NULL indicates all warnings and below. * @return int The old error reporting level. */ public static function suppress($mask = null) { if (!isset($mask)) { $mask = E_WARNING | E_NOTICE | E_USER_WARNING | E_USER_NOTICE | E_DEPRECATED | E_USER_DEPRECATED | E_STRICT; } $old = error_reporting(); array_push(self::$stack, $old); error_reporting($old & ~$mask); return $old; } /** * Restores a single state. */ public static function restore() { if (!empty(self::$stack)) { error_reporting(array_pop(self::$stack)); } } /** * Calls a specified function while silencing warnings and below. * * Future improvement: when PHP requirements are raised add Callable type hint (5.4) and variadic parameters (5.6) * * @param callable $callable Function to execute. * @throws \Exception Any exceptions from the callback are rethrown. * @return mixed Return value of the callback. */ public static function call($callable /*, ...$parameters */) { try { self::suppress(); $result = call_user_func_array($callable, array_slice(func_get_args(), 1)); self::restore(); return $result; } catch (\Exception $e) { // Use a finally block for this when requirements are raised to PHP 5.5 self::restore(); throw $e; } } } composer-1.0.0-beta2/src/Composer/Util/SpdxLicense.php000066400000000000000000000010721267577262200225770ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Util; use Composer\Spdx\SpdxLicenses; trigger_error('The ' . __NAMESPACE__ . '\SpdxLicense class is deprecated, use Composer\Spdx\SpdxLicenses instead.', E_USER_DEPRECATED); /** * @deprecated use Composer\Spdx\SpdxLicenses instead */ class SpdxLicense extends SpdxLicenses { } composer-1.0.0-beta2/src/Composer/Util/StreamContextFactory.php000066400000000000000000000154301267577262200245110ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Util; use Composer\Composer; /** * Allows the creation of a basic context supporting http proxy * * @author Jordan Alliot * @author Markus Tacker */ final class StreamContextFactory { /** * Creates a context supporting HTTP proxies * * @param string $url URL the context is to be used for * @param array $defaultOptions Options to merge with the default * @param array $defaultParams Parameters to specify on the context * @throws \RuntimeException if https proxy required and OpenSSL uninstalled * @return resource Default context */ public static function getContext($url, array $defaultOptions = array(), array $defaultParams = array()) { $options = array('http' => array( // specify defaults again to try and work better with curlwrappers enabled 'follow_location' => 1, 'max_redirects' => 20, )); // Handle system proxy if (!empty($_SERVER['HTTP_PROXY']) || !empty($_SERVER['http_proxy'])) { // Some systems seem to rely on a lowercased version instead... $proxy = parse_url(!empty($_SERVER['http_proxy']) ? $_SERVER['http_proxy'] : $_SERVER['HTTP_PROXY']); } // Override with HTTPS proxy if present and URL is https if (preg_match('{^https://}i', $url) && (!empty($_SERVER['HTTPS_PROXY']) || !empty($_SERVER['https_proxy']))) { $proxy = parse_url(!empty($_SERVER['https_proxy']) ? $_SERVER['https_proxy'] : $_SERVER['HTTPS_PROXY']); } // Remove proxy if URL matches no_proxy directive if (!empty($_SERVER['no_proxy']) && parse_url($url, PHP_URL_HOST)) { $pattern = new NoProxyPattern($_SERVER['no_proxy']); if ($pattern->test($url)) { unset($proxy); } } if (!empty($proxy)) { $proxyURL = isset($proxy['scheme']) ? $proxy['scheme'] . '://' : ''; $proxyURL .= isset($proxy['host']) ? $proxy['host'] : ''; if (isset($proxy['port'])) { $proxyURL .= ":" . $proxy['port']; } elseif ('http://' == substr($proxyURL, 0, 7)) { $proxyURL .= ":80"; } elseif ('https://' == substr($proxyURL, 0, 8)) { $proxyURL .= ":443"; } // http(s):// is not supported in proxy $proxyURL = str_replace(array('http://', 'https://'), array('tcp://', 'ssl://'), $proxyURL); if (0 === strpos($proxyURL, 'ssl:') && !extension_loaded('openssl')) { throw new \RuntimeException('You must enable the openssl extension to use a proxy over https'); } $options['http']['proxy'] = $proxyURL; // enabled request_fulluri unless it is explicitly disabled switch (parse_url($url, PHP_URL_SCHEME)) { case 'http': // default request_fulluri to true $reqFullUriEnv = getenv('HTTP_PROXY_REQUEST_FULLURI'); if ($reqFullUriEnv === false || $reqFullUriEnv === '' || (strtolower($reqFullUriEnv) !== 'false' && (bool) $reqFullUriEnv)) { $options['http']['request_fulluri'] = true; } break; case 'https': // default request_fulluri to true $reqFullUriEnv = getenv('HTTPS_PROXY_REQUEST_FULLURI'); if ($reqFullUriEnv === false || $reqFullUriEnv === '' || (strtolower($reqFullUriEnv) !== 'false' && (bool) $reqFullUriEnv)) { $options['http']['request_fulluri'] = true; } break; } // add SNI opts for https URLs if ('https' === parse_url($url, PHP_URL_SCHEME)) { $options['ssl']['SNI_enabled'] = true; if (PHP_VERSION_ID < 50600) { $options['ssl']['SNI_server_name'] = parse_url($url, PHP_URL_HOST); } } // handle proxy auth if present if (isset($proxy['user'])) { $auth = urldecode($proxy['user']); if (isset($proxy['pass'])) { $auth .= ':' . urldecode($proxy['pass']); } $auth = base64_encode($auth); // Preserve headers if already set in default options if (isset($defaultOptions['http']['header'])) { if (is_string($defaultOptions['http']['header'])) { $defaultOptions['http']['header'] = array($defaultOptions['http']['header']); } $defaultOptions['http']['header'][] = "Proxy-Authorization: Basic {$auth}"; } else { $options['http']['header'] = array("Proxy-Authorization: Basic {$auth}"); } } } $options = array_replace_recursive($options, $defaultOptions); if (isset($options['http']['header'])) { $options['http']['header'] = self::fixHttpHeaderField($options['http']['header']); } if (defined('HHVM_VERSION')) { $phpVersion = 'HHVM ' . HHVM_VERSION; } else { $phpVersion = 'PHP ' . PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION . '.' . PHP_RELEASE_VERSION; } if (!isset($options['http']['header']) || false === strpos(strtolower(implode('', $options['http']['header'])), 'user-agent')) { $options['http']['header'][] = sprintf( 'User-Agent: Composer/%s (%s; %s; %s)', Composer::VERSION === '@package_version@' ? 'source' : Composer::VERSION, php_uname('s'), php_uname('r'), $phpVersion ); } return stream_context_create($options, $defaultParams); } /** * A bug in PHP prevents the headers from correctly being sent when a content-type header is present and * NOT at the end of the array * * This method fixes the array by moving the content-type header to the end * * @link https://bugs.php.net/bug.php?id=61548 * @param $header * @return array */ private static function fixHttpHeaderField($header) { if (!is_array($header)) { $header = explode("\r\n", $header); } uasort($header, function ($el) { return preg_match('{^content-type}i', $el) ? 1 : -1; }); return $header; } } composer-1.0.0-beta2/src/Composer/Util/Svn.php000066400000000000000000000210631267577262200211260ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Util; use Composer\Config; use Composer\Downloader\TransportException; use Composer\IO\IOInterface; /** * @author Till Klampaeckel * @author Jordi Boggiano */ class Svn { const MAX_QTY_AUTH_TRIES = 5; /** * @var array */ protected $credentials; /** * @var bool */ protected $hasAuth; /** * @var \Composer\IO\IOInterface */ protected $io; /** * @var string */ protected $url; /** * @var bool */ protected $cacheCredentials = true; /** * @var ProcessExecutor */ protected $process; /** * @var int */ protected $qtyAuthTries = 0; /** * @var \Composer\Config */ protected $config; /** * @param string $url * @param \Composer\IO\IOInterface $io * @param Config $config * @param ProcessExecutor $process */ public function __construct($url, IOInterface $io, Config $config, ProcessExecutor $process = null) { $this->url = $url; $this->io = $io; $this->config = $config; $this->process = $process ?: new ProcessExecutor; } public static function cleanEnv() { // clean up env for OSX, see https://github.com/composer/composer/issues/2146#issuecomment-35478940 putenv("DYLD_LIBRARY_PATH"); unset($_SERVER['DYLD_LIBRARY_PATH']); } /** * Execute an SVN command and try to fix up the process with credentials * if necessary. * * @param string $command SVN command to run * @param string $url SVN url * @param string $cwd Working directory * @param string $path Target for a checkout * @param bool $verbose Output all output to the user * * @throws \RuntimeException * @return string */ public function execute($command, $url, $cwd = null, $path = null, $verbose = false) { if (preg_match('{^(http|svn):}i', $url) && $this->config->get('secure-http')) { throw new TransportException("Your configuration does not allow connection to $url. See https://getcomposer.org/doc/06-config.md#secure-http for details."); } $svnCommand = $this->getCommand($command, $url, $path); $output = null; $io = $this->io; $handler = function ($type, $buffer) use (&$output, $io, $verbose) { if ($type !== 'out') { return; } if ('Redirecting to URL ' === substr($buffer, 0, 19)) { return; } $output .= $buffer; if ($verbose) { $io->writeError($buffer, false); } }; $status = $this->process->execute($svnCommand, $handler, $cwd); if (0 === $status) { return $output; } $errorOutput = $this->process->getErrorOutput(); $fullOutput = implode("\n", array($output, $errorOutput)); // the error is not auth-related if (false === stripos($fullOutput, 'Could not authenticate to server:') && false === stripos($fullOutput, 'authorization failed') && false === stripos($fullOutput, 'svn: E170001:') && false === stripos($fullOutput, 'svn: E215004:')) { throw new \RuntimeException($fullOutput); } if (!$this->hasAuth()) { $this->doAuthDance(); } // try to authenticate if maximum quantity of tries not reached if ($this->qtyAuthTries++ < self::MAX_QTY_AUTH_TRIES) { // restart the process return $this->execute($command, $url, $cwd, $path, $verbose); } throw new \RuntimeException( 'wrong credentials provided ('.$fullOutput.')' ); } /** * @param bool $cacheCredentials */ public function setCacheCredentials($cacheCredentials) { $this->cacheCredentials = $cacheCredentials; } /** * Repositories requests credentials, let's put them in. * * @throws \RuntimeException * @return \Composer\Util\Svn */ protected function doAuthDance() { // cannot ask for credentials in non interactive mode if (!$this->io->isInteractive()) { throw new \RuntimeException( 'can not ask for authentication in non interactive mode' ); } $this->io->writeError("The Subversion server ({$this->url}) requested credentials:"); $this->hasAuth = true; $this->credentials['username'] = $this->io->ask("Username: "); $this->credentials['password'] = $this->io->askAndHideAnswer("Password: "); $this->cacheCredentials = $this->io->askConfirmation("Should Subversion cache these credentials? (yes/no) ", true); return $this; } /** * A method to create the svn commands run. * * @param string $cmd Usually 'svn ls' or something like that. * @param string $url Repo URL. * @param string $path Target for a checkout * * @return string */ protected function getCommand($cmd, $url, $path = null) { $cmd = sprintf('%s %s%s %s', $cmd, '--non-interactive ', $this->getCredentialString(), ProcessExecutor::escape($url) ); if ($path) { $cmd .= ' ' . ProcessExecutor::escape($path); } return $cmd; } /** * Return the credential string for the svn command. * * Adds --no-auth-cache when credentials are present. * * @return string */ protected function getCredentialString() { if (!$this->hasAuth()) { return ''; } return sprintf( ' %s--username %s --password %s ', $this->getAuthCache(), ProcessExecutor::escape($this->getUsername()), ProcessExecutor::escape($this->getPassword()) ); } /** * Get the password for the svn command. Can be empty. * * @throws \LogicException * @return string */ protected function getPassword() { if ($this->credentials === null) { throw new \LogicException("No svn auth detected."); } return isset($this->credentials['password']) ? $this->credentials['password'] : ''; } /** * Get the username for the svn command. * * @throws \LogicException * @return string */ protected function getUsername() { if ($this->credentials === null) { throw new \LogicException("No svn auth detected."); } return $this->credentials['username']; } /** * Detect Svn Auth. * * @return bool */ protected function hasAuth() { if (null !== $this->hasAuth) { return $this->hasAuth; } if (false === $this->createAuthFromConfig()) { $this->createAuthFromUrl(); } return $this->hasAuth; } /** * Return the no-auth-cache switch. * * @return string */ protected function getAuthCache() { return $this->cacheCredentials ? '' : '--no-auth-cache '; } /** * Create the auth params from the configuration file. * * @return bool */ private function createAuthFromConfig() { if (!$this->config->has('http-basic')) { return $this->hasAuth = false; } $authConfig = $this->config->get('http-basic'); $host = parse_url($this->url, PHP_URL_HOST); if (isset($authConfig[$host])) { $this->credentials['username'] = $authConfig[$host]['username']; $this->credentials['password'] = $authConfig[$host]['password']; return $this->hasAuth = true; } return $this->hasAuth = false; } /** * Create the auth params from the url * * @return bool */ private function createAuthFromUrl() { $uri = parse_url($this->url); if (empty($uri['user'])) { return $this->hasAuth = false; } $this->credentials['username'] = $uri['user']; if (!empty($uri['pass'])) { $this->credentials['password'] = $uri['pass']; } return $this->hasAuth = true; } } composer-1.0.0-beta2/src/Composer/Util/TlsHelper.php000066400000000000000000000300311267577262200222550ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Util; use Symfony\Component\Process\PhpProcess; /** * @author Chris Smith */ final class TlsHelper { private static $useOpensslParse; /** * Match hostname against a certificate. * * @param mixed $certificate X.509 certificate * @param string $hostname Hostname in the URL * @param string $cn Set to the common name of the certificate iff match found * * @return bool */ public static function checkCertificateHost($certificate, $hostname, &$cn = null) { $names = self::getCertificateNames($certificate); if (empty($names)) { return false; } $combinedNames = array_merge($names['san'], array($names['cn'])); $hostname = strtolower($hostname); foreach ($combinedNames as $certName) { $matcher = self::certNameMatcher($certName); if ($matcher && $matcher($hostname)) { $cn = $names['cn']; return true; } } return false; } /** * Extract DNS names out of an X.509 certificate. * * @param mixed $certificate X.509 certificate * * @return array|null */ public static function getCertificateNames($certificate) { if (is_array($certificate)) { $info = $certificate; } elseif (self::isOpensslParseSafe()) { $info = openssl_x509_parse($certificate, false); } if (!isset($info['subject']['commonName'])) { return; } $commonName = strtolower($info['subject']['commonName']); $subjectAltNames = array(); if (isset($info['extensions']['subjectAltName'])) { $subjectAltNames = preg_split('{\s*,\s*}', $info['extensions']['subjectAltName']); $subjectAltNames = array_filter(array_map(function ($name) { if (0 === strpos($name, 'DNS:')) { return strtolower(ltrim(substr($name, 4))); } }, $subjectAltNames)); $subjectAltNames = array_values($subjectAltNames); } return array( 'cn' => $commonName, 'san' => $subjectAltNames, ); } /** * Get the certificate pin. * * By Kevin McArthur of StormTide Digital Studios Inc. * @KevinSMcArthur / https://github.com/StormTide * * See http://tools.ietf.org/html/draft-ietf-websec-key-pinning-02 * * This method was adapted from Sslurp. * https://github.com/EvanDotPro/Sslurp * * (c) Evan Coury * * For the full copyright and license information, please see below: * * Copyright (c) 2013, Evan Coury * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ public static function getCertificateFingerprint($certificate) { $pubkeydetails = openssl_pkey_get_details(openssl_get_publickey($certificate)); $pubkeypem = $pubkeydetails['key']; //Convert PEM to DER before SHA1'ing $start = '-----BEGIN PUBLIC KEY-----'; $end = '-----END PUBLIC KEY-----'; $pemtrim = substr($pubkeypem, (strpos($pubkeypem, $start) + strlen($start)), (strlen($pubkeypem) - strpos($pubkeypem, $end)) * (-1)); $der = base64_decode($pemtrim); return sha1($der); } /** * Test if it is safe to use the PHP function openssl_x509_parse(). * * This checks if OpenSSL extensions is vulnerable to remote code execution * via the exploit documented as CVE-2013-6420. * * @return bool */ public static function isOpensslParseSafe() { if (null !== self::$useOpensslParse) { return self::$useOpensslParse; } if (PHP_VERSION_ID >= 50600) { return self::$useOpensslParse = true; } // Vulnerable: // PHP 5.3.0 - PHP 5.3.27 // PHP 5.4.0 - PHP 5.4.22 // PHP 5.5.0 - PHP 5.5.6 if ( (PHP_VERSION_ID < 50400 && PHP_VERSION_ID >= 50328) || (PHP_VERSION_ID < 50500 && PHP_VERSION_ID >= 50423) || (PHP_VERSION_ID < 50600 && PHP_VERSION_ID >= 50507) ) { // This version of PHP has the fix for CVE-2013-6420 applied. return self::$useOpensslParse = true; } if (Platform::isWindows()) { // Windows is probably insecure in this case. return self::$useOpensslParse = false; } $compareDistroVersionPrefix = function ($prefix, $fixedVersion) { $regex = '{^'.preg_quote($prefix).'([0-9]+)$}'; if (preg_match($regex, PHP_VERSION, $m)) { return ((int) $m[1]) >= $fixedVersion; } return false; }; // Hard coded list of PHP distributions with the fix backported. if ( $compareDistroVersionPrefix('5.3.3-7+squeeze', 18) // Debian 6 (Squeeze) || $compareDistroVersionPrefix('5.4.4-14+deb7u', 7) // Debian 7 (Wheezy) || $compareDistroVersionPrefix('5.3.10-1ubuntu3.', 9) // Ubuntu 12.04 (Precise) ) { return self::$useOpensslParse = true; } // This is where things get crazy, because distros backport security // fixes the chances are on NIX systems the fix has been applied but // it's not possible to verify that from the PHP version. // // To verify exec a new PHP process and run the issue testcase with // known safe input that replicates the bug. // Based on testcase in https://github.com/php/php-src/commit/c1224573c773b6845e83505f717fbf820fc18415 // changes in https://github.com/php/php-src/commit/76a7fd893b7d6101300cc656058704a73254d593 $cert = 'LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVwRENDQTR5Z0F3SUJBZ0lKQUp6dThyNnU2ZUJjTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUhETVFzd0NRWUQKVlFRR0V3SkVSVEVjTUJvR0ExVUVDQXdUVG05eVpISm9aV2x1TFZkbGMzUm1ZV3hsYmpFUU1BNEdBMVVFQnd3SApTOE9Ed3Jac2JqRVVNQklHQTFVRUNnd0xVMlZyZEdsdmJrVnBibk14SHpBZEJnTlZCQXNNRmsxaGJHbGphVzkxCmN5QkRaWEowSUZObFkzUnBiMjR4SVRBZkJnTlZCQU1NR0cxaGJHbGphVzkxY3k1elpXdDBhVzl1WldsdWN5NWsKWlRFcU1DZ0dDU3FHU0liM0RRRUpBUlliYzNSbFptRnVMbVZ6YzJWeVFITmxhM1JwYjI1bGFXNXpMbVJsTUhVWQpaREU1TnpBd01UQXhNREF3TURBd1dnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKQUFBQUFBQVhEVEUwTVRFeU9ERXhNemt6TlZvd2djTXhDekFKQmdOVkJBWVRBa1JGTVJ3d0dnWURWUVFJREJOTwpiM0prY21obGFXNHRWMlZ6ZEdaaGJHVnVNUkF3RGdZRFZRUUhEQWRMdzRQQ3RteHVNUlF3RWdZRFZRUUtEQXRUClpXdDBhVzl1UldsdWN6RWZNQjBHQTFVRUN3d1dUV0ZzYVdOcGIzVnpJRU5sY25RZ1UyVmpkR2x2YmpFaE1COEcKQTFVRUF3d1liV0ZzYVdOcGIzVnpMbk5sYTNScGIyNWxhVzV6TG1SbE1Tb3dLQVlKS29aSWh2Y05BUWtCRmh0egpkR1ZtWVc0dVpYTnpaWEpBYzJWcmRHbHZibVZwYm5NdVpHVXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCCkR3QXdnZ0VLQW9JQkFRRERBZjNobDdKWTBYY0ZuaXlFSnBTU0RxbjBPcUJyNlFQNjV1c0pQUnQvOFBhRG9xQnUKd0VZVC9OYSs2ZnNnUGpDMHVLOURaZ1dnMnRIV1dvYW5TYmxBTW96NVBINlorUzRTSFJaN2UyZERJalBqZGhqaAowbUxnMlVNTzV5cDBWNzk3R2dzOWxOdDZKUmZIODFNTjJvYlhXczROdHp0TE11RDZlZ3FwcjhkRGJyMzRhT3M4CnBrZHVpNVVhd1Raa3N5NXBMUEhxNWNNaEZHbTA2djY1Q0xvMFYyUGQ5K0tBb2tQclBjTjVLTEtlYno3bUxwazYKU01lRVhPS1A0aWRFcXh5UTdPN2ZCdUhNZWRzUWh1K3ByWTNzaTNCVXlLZlF0UDVDWm5YMmJwMHdLSHhYMTJEWAoxbmZGSXQ5RGJHdkhUY3lPdU4rblpMUEJtM3ZXeG50eUlJdlZBZ01CQUFHalFqQkFNQWtHQTFVZEV3UUNNQUF3CkVRWUpZSVpJQVliNFFnRUJCQVFEQWdlQU1Bc0dBMVVkRHdRRUF3SUZvREFUQmdOVkhTVUVEREFLQmdnckJnRUYKQlFjREFqQU5CZ2txaGtpRzl3MEJBUVVGQUFPQ0FRRUFHMGZaWVlDVGJkajFYWWMrMVNub2FQUit2SThDOENhRAo4KzBVWWhkbnlVNGdnYTBCQWNEclk5ZTk0ZUVBdTZacXljRjZGakxxWFhkQWJvcHBXb2NyNlQ2R0QxeDMzQ2tsClZBcnpHL0t4UW9oR0QySmVxa2hJTWxEb214SE83a2EzOStPYThpMnZXTFZ5alU4QVp2V01BcnVIYTRFRU55RzcKbFcyQWFnYUZLRkNyOVRuWFRmcmR4R1ZFYnY3S1ZRNmJkaGc1cDVTanBXSDErTXEwM3VSM1pYUEJZZHlWODMxOQpvMGxWajFLRkkyRENML2xpV2lzSlJvb2YrMWNSMzVDdGQwd1lCY3BCNlRac2xNY09QbDc2ZHdLd0pnZUpvMlFnClpzZm1jMnZDMS9xT2xOdU5xLzBUenprVkd2OEVUVDNDZ2FVK1VYZTRYT1Z2a2NjZWJKbjJkZz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K'; $script = <<<'EOT' error_reporting(-1); $info = openssl_x509_parse(base64_decode('%s')); var_dump(PHP_VERSION, $info['issuer']['emailAddress'], $info['validFrom_time_t']); EOT; $script = '<'."?php\n".sprintf($script, $cert); try { $process = new PhpProcess($script); $process->mustRun(); } catch (\Exception $e) { // In the case of any exceptions just accept it is not possible to // determine the safety of openssl_x509_parse and bail out. return self::$useOpensslParse = false; } $output = preg_split('{\r?\n}', trim($process->getOutput())); $errorOutput = trim($process->getErrorOutput()); if ( count($output) === 3 && $output[0] === sprintf('string(%d) "%s"', strlen(PHP_VERSION), PHP_VERSION) && $output[1] === 'string(27) "stefan.esser@sektioneins.de"' && $output[2] === 'int(-1)' && preg_match('{openssl_x509_parse\(\): illegal (?:ASN1 data type for|length in) timestamp in - on line \d+}', $errorOutput) ) { // This PHP has the fix backported probably by a distro security team. return self::$useOpensslParse = true; } return self::$useOpensslParse = false; } /** * Convert certificate name into matching function. * * @param string $certName CN/SAN * * @return callable|null */ private static function certNameMatcher($certName) { $wildcards = substr_count($certName, '*'); if (0 === $wildcards) { // Literal match. return function ($hostname) use ($certName) { return $hostname === $certName; }; } if (1 === $wildcards) { $components = explode('.', $certName); if (3 > count($components)) { // Must have 3+ components return; } $firstComponent = $components[0]; // Wildcard must be the last character. if ('*' !== $firstComponent[strlen($firstComponent) - 1]) { return; } $wildcardRegex = preg_quote($certName); $wildcardRegex = str_replace('\\*', '[a-z0-9-]+', $wildcardRegex); $wildcardRegex = "{^{$wildcardRegex}$}"; return function ($hostname) use ($wildcardRegex) { return 1 === preg_match($wildcardRegex, $hostname); }; } } } composer-1.0.0-beta2/src/bootstrap.php000066400000000000000000000013111267577262200176630ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ function includeIfExists($file) { return file_exists($file) ? include $file : false; } if ((!$loader = includeIfExists(__DIR__.'/../vendor/autoload.php')) && (!$loader = includeIfExists(__DIR__.'/../../../autoload.php'))) { echo 'You must set up the project dependencies using `composer install`'.PHP_EOL. 'See https://getcomposer.org/download/ for instructions on installing Composer'.PHP_EOL; exit(1); } return $loader; composer-1.0.0-beta2/tests/000077500000000000000000000000001267577262200155145ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/000077500000000000000000000000001267577262200173035ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/000077500000000000000000000000001267577262200202225ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/AllFunctionalTest.php000066400000000000000000000163651267577262200243410ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test; use Composer\TestCase; use Composer\Util\Filesystem; use Symfony\Component\Finder\Finder; use Symfony\Component\Process\Process; /** * @group slow */ class AllFunctionalTest extends TestCase { protected $oldcwd; protected $oldenv; protected $testDir; private static $pharPath; public function setUp() { $this->oldcwd = getcwd(); chdir(__DIR__.'/Fixtures/functional'); } public function tearDown() { chdir($this->oldcwd); $fs = new Filesystem; if ($this->testDir) { $fs->removeDirectory($this->testDir); $this->testDir = null; } if ($this->oldenv) { $fs->removeDirectory(getenv('COMPOSER_HOME')); $_SERVER['COMPOSER_HOME'] = $this->oldenv; putenv('COMPOSER_HOME='.$_SERVER['COMPOSER_HOME']); $this->oldenv = null; } } public static function setUpBeforeClass() { self::$pharPath = self::getUniqueTmpDirectory() . '/composer.phar'; } public static function tearDownAfterClass() { $fs = new Filesystem; $fs->removeDirectory(dirname(self::$pharPath)); } public function testBuildPhar() { if (defined('HHVM_VERSION')) { $this->markTestSkipped('Building the phar does not work on HHVM.'); } $target = dirname(self::$pharPath); $fs = new Filesystem(); chdir($target); $it = new \RecursiveDirectoryIterator(__DIR__.'/../../../', \RecursiveDirectoryIterator::SKIP_DOTS); $ri = new \RecursiveIteratorIterator($it, \RecursiveIteratorIterator::SELF_FIRST); foreach ($ri as $file) { $targetPath = $target . DIRECTORY_SEPARATOR . $ri->getSubPathName(); if ($file->isDir()) { $fs->ensureDirectoryExists($targetPath); } else { copy($file->getPathname(), $targetPath); } } $proc = new Process('php '.escapeshellarg('./bin/compile'), $target); $exitcode = $proc->run(); if ($exitcode !== 0 || trim($proc->getOutput())) { $this->fail($proc->getOutput()); } $this->assertTrue(file_exists(self::$pharPath)); } /** * @dataProvider getTestFiles * @depends testBuildPhar */ public function testIntegration(\SplFileInfo $testFile) { $testData = $this->parseTestFile($testFile); $this->oldenv = getenv('COMPOSER_HOME'); $_SERVER['COMPOSER_HOME'] = $this->testDir.'home'; putenv('COMPOSER_HOME='.$_SERVER['COMPOSER_HOME']); $cmd = 'php '.escapeshellarg(self::$pharPath).' --no-ansi '.$testData['RUN']; $proc = new Process($cmd, __DIR__.'/Fixtures/functional', null, null, 300); $exitcode = $proc->run(); if (isset($testData['EXPECT'])) { $this->assertEquals($testData['EXPECT'], $this->cleanOutput($proc->getOutput()), 'Error Output: '.$proc->getErrorOutput()); } if (isset($testData['EXPECT-REGEX'])) { $this->assertRegExp($testData['EXPECT-REGEX'], $this->cleanOutput($proc->getOutput()), 'Error Output: '.$proc->getErrorOutput()); } if (isset($testData['EXPECT-ERROR'])) { $this->assertEquals($testData['EXPECT-ERROR'], $this->cleanOutput($proc->getErrorOutput())); } if (isset($testData['EXPECT-ERROR-REGEX'])) { $this->assertRegExp($testData['EXPECT-ERROR-REGEX'], $this->cleanOutput($proc->getErrorOutput())); } if (isset($testData['EXPECT-EXIT-CODE'])) { $this->assertSame($testData['EXPECT-EXIT-CODE'], $exitcode); } } public function getTestFiles() { $tests = array(); foreach (Finder::create()->in(__DIR__.'/Fixtures/functional')->name('*.test')->files() as $file) { $tests[] = array($file); } return $tests; } private function parseTestFile(\SplFileInfo $file) { $tokens = preg_split('#(?:^|\n*)--([A-Z-]+)--\n#', file_get_contents($file->getRealPath()), null, PREG_SPLIT_DELIM_CAPTURE); $data = array(); $section = null; $testDir = self::getUniqueTmpDirectory(); $this->testDir = $testDir; $varRegex = '#%([a-zA-Z_-]+)%#'; $variableReplacer = function ($match) use (&$data, $testDir) { list(, $var) = $match; switch ($var) { case 'testDir': $data['test_dir'] = $testDir; return $testDir; default: throw new \InvalidArgumentException(sprintf('Unknown variable "%s". Supported variables: "testDir"', $var)); } }; for ($i = 0, $c = count($tokens); $i < $c; $i++) { if ('' === $tokens[$i] && null === $section) { continue; } // Handle section headers. if (null === $section) { $section = $tokens[$i]; continue; } $sectionData = $tokens[$i]; // Allow sections to validate, or modify their section data. switch ($section) { case 'RUN': $sectionData = preg_replace_callback($varRegex, $variableReplacer, $sectionData); break; case 'EXPECT-EXIT-CODE': $sectionData = (integer) $sectionData; case 'EXPECT': case 'EXPECT-REGEX': case 'EXPECT-ERROR': case 'EXPECT-ERROR-REGEX': $sectionData = preg_replace_callback($varRegex, $variableReplacer, $sectionData); break; default: throw new \RuntimeException(sprintf( 'Unknown section "%s". Allowed sections: "RUN", "EXPECT", "EXPECT-ERROR", "EXPECT-EXIT-CODE", "EXPECT-REGEX", "EXPECT-ERROR-REGEX". ' .'Section headers must be written as "--HEADER_NAME--".', $section )); } $data[$section] = $sectionData; $section = $sectionData = null; } // validate data if (!isset($data['RUN'])) { throw new \RuntimeException('The test file must have a section named "RUN".'); } if (!isset($data['EXPECT']) && !isset($data['EXPECT-ERROR']) && !isset($data['EXPECT-REGEX']) && !isset($data['EXPECT-ERROR-REGEX'])) { throw new \RuntimeException('The test file must have a section named "EXPECT", "EXPECT-ERROR", "EXPECT-REGEX", or "EXPECT-ERROR-REGEX".'); } return $data; } private function cleanOutput($output) { $processed = ''; for ($i = 0; $i < strlen($output); $i++) { if ($output[$i] === "\x08") { $processed = substr($processed, 0, -1); } elseif ($output[$i] !== "\r") { $processed .= $output[$i]; } } return $processed; } } composer-1.0.0-beta2/tests/Composer/Test/ApplicationTest.php000066400000000000000000000060211267577262200240350ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test; use Composer\Console\Application; use Composer\TestCase; use Symfony\Component\Console\Output\OutputInterface; class ApplicationTest extends TestCase { public function testDevWarning() { $application = new Application; $inputMock = $this->getMock('Symfony\Component\Console\Input\InputInterface'); $outputMock = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); $inputMock->expects($this->once()) ->method('getFirstArgument') ->will($this->returnValue('list')); $index = 0; if (extension_loaded('xdebug')) { $outputMock->expects($this->at($index++)) ->method("getVerbosity") ->willReturn(OutputInterface::VERBOSITY_NORMAL); $outputMock->expects($this->at($index++)) ->method("write") ->with($this->equalTo('You are running composer with xdebug enabled. This has a major impact on runtime performance. See https://getcomposer.org/xdebug')); } $outputMock->expects($this->at($index++)) ->method("getVerbosity") ->willReturn(OutputInterface::VERBOSITY_NORMAL); $outputMock->expects($this->at($index++)) ->method("write") ->with($this->equalTo(sprintf('Warning: This development build of composer is over 60 days old. It is recommended to update it by running "%s self-update" to get the latest version.', $_SERVER['PHP_SELF']))); if (!defined('COMPOSER_DEV_WARNING_TIME')) { define('COMPOSER_DEV_WARNING_TIME', time() - 1); } $this->setExpectedException('RuntimeException'); $application->doRun($inputMock, $outputMock); } public function ensureNoDevWarning($command) { $application = new Application; $application->add(new \Composer\Command\SelfUpdateCommand); $inputMock = $this->getMock('Symfony\Component\Console\Input\InputInterface'); $outputMock = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); $inputMock->expects($this->once()) ->method('getFirstArgument') ->will($this->returnValue($command)); $outputMock->expects($this->never()) ->method("writeln"); if (!defined('COMPOSER_DEV_WARNING_TIME')) { define('COMPOSER_DEV_WARNING_TIME', time() - 1); } $this->setExpectedException('RuntimeException'); $application->doRun($inputMock, $outputMock); } public function testDevWarningPrevented() { $this->ensureNoDevWarning('self-update'); } public function testDevWarningPreventedAlias() { $this->ensureNoDevWarning('self-up'); } } composer-1.0.0-beta2/tests/Composer/Test/Autoload/000077500000000000000000000000001267577262200217725ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Autoload/AutoloadGeneratorTest.php000066400000000000000000001575451267577262200270030ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Autoload; use Composer\Autoload\AutoloadGenerator; use Composer\Package\Link; use Composer\Util\Filesystem; use Composer\Package\AliasPackage; use Composer\Package\Package; use Composer\TestCase; use Composer\Script\ScriptEvents; use Composer\Repository\InstalledRepositoryInterface; use Composer\Installer\InstallationManager; use Composer\Config; use Composer\EventDispatcher\EventDispatcher; use PHPUnit_Framework_MockObject_MockObject as MockObject; class AutoloadGeneratorTest extends TestCase { /** * @var string */ public $vendorDir; /** * @var Config|MockObject */ private $config; /** * @var string */ private $workingDir; /** * @var string */ private $origDir; /** * @var InstallationManager|MockObject */ private $im; /** * @var InstalledRepositoryInterface|MockObject */ private $repository; /** * @var AutoloadGenerator */ private $generator; /** * @var Filesystem */ private $fs; /** * @var EventDispatcher|MockObject */ private $eventDispatcher; /** * Map of setting name => return value configuration for the stub Config * object. * * Note: must be public for compatibility with PHP 5.3 runtimes where * closures cannot access private members of the classes they are created * in. * @var array */ public $configValueMap; protected function setUp() { $this->fs = new Filesystem; $that = $this; $this->workingDir = $this->getUniqueTmpDirectory(); $this->vendorDir = $this->workingDir.DIRECTORY_SEPARATOR.'composer-test-autoload'; $this->ensureDirectoryExistsAndClear($this->vendorDir); $this->config = $this->getMock('Composer\Config'); $this->configValueMap = array( 'vendor-dir' => function () use ($that) { return $that->vendorDir; }, ); $this->config->expects($this->atLeastOnce()) ->method('get') ->will($this->returnCallback(function ($arg) use ($that) { $ret = null; if (isset($that->configValueMap[$arg])) { $ret = $that->configValueMap[$arg]; if (is_callable($ret)) { $ret = $ret(); } } return $ret; })); $this->origDir = getcwd(); chdir($this->workingDir); $this->im = $this->getMockBuilder('Composer\Installer\InstallationManager') ->disableOriginalConstructor() ->getMock(); $this->im->expects($this->any()) ->method('getInstallPath') ->will($this->returnCallback(function ($package) use ($that) { $targetDir = $package->getTargetDir(); return $that->vendorDir.'/'.$package->getName() . ($targetDir ? '/'.$targetDir : ''); })); $this->repository = $this->getMock('Composer\Repository\InstalledRepositoryInterface'); $this->eventDispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') ->disableOriginalConstructor() ->getMock(); $this->generator = new AutoloadGenerator($this->eventDispatcher); } protected function tearDown() { chdir($this->origDir); if (is_dir($this->workingDir)) { $this->fs->removeDirectory($this->workingDir); } if (is_dir($this->vendorDir)) { $this->fs->removeDirectory($this->vendorDir); } } public function testMainPackageAutoloading() { $package = new Package('a', '1.0', '1.0'); $package->setAutoload(array( 'psr-0' => array( 'Main' => 'src/', 'Lala' => array('src/', 'lib/'), ), 'psr-4' => array( 'Acme\Fruit\\' => 'src-fruit/', 'Acme\Cake\\' => array('src-cake/', 'lib-cake/'), ), 'classmap' => array('composersrc/'), )); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue(array())); $this->fs->ensureDirectoryExists($this->workingDir.'/composer'); $this->fs->ensureDirectoryExists($this->workingDir.'/src/Lala/Test'); $this->fs->ensureDirectoryExists($this->workingDir.'/lib'); file_put_contents($this->workingDir.'/src/Lala/ClassMapMain.php', 'workingDir.'/src/Lala/Test/ClassMapMainTest.php', 'fs->ensureDirectoryExists($this->workingDir.'/src-fruit'); $this->fs->ensureDirectoryExists($this->workingDir.'/src-cake'); $this->fs->ensureDirectoryExists($this->workingDir.'/lib-cake'); file_put_contents($this->workingDir.'/src-cake/ClassMapBar.php', 'fs->ensureDirectoryExists($this->workingDir.'/composersrc'); file_put_contents($this->workingDir.'/composersrc/foo.php', 'generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_1'); // Assert that autoload_namespaces.php was correctly generated. $this->assertAutoloadFiles('main', $this->vendorDir.'/composer'); // Assert that autoload_psr4.php was correctly generated. $this->assertAutoloadFiles('psr4', $this->vendorDir.'/composer', 'psr4'); // Assert that autoload_classmap.php was correctly generated. $this->assertAutoloadFiles('classmap', $this->vendorDir.'/composer', 'classmap'); } public function testMainPackageDevAutoloading() { $package = new Package('a', '1.0', '1.0'); $package->setAutoload(array( 'psr-0' => array( 'Main' => 'src/', ), )); $package->setDevAutoload(array( 'files' => array('devfiles/foo.php'), 'psr-0' => array( 'Main' => 'tests/', ), )); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue(array())); $this->fs->ensureDirectoryExists($this->workingDir.'/composer'); $this->fs->ensureDirectoryExists($this->workingDir.'/src/Main'); file_put_contents($this->workingDir.'/src/Main/ClassMain.php', 'fs->ensureDirectoryExists($this->workingDir.'/devfiles'); file_put_contents($this->workingDir.'/devfiles/foo.php', 'generator->setDevMode(true); $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_1'); // check standard autoload $this->assertAutoloadFiles('main5', $this->vendorDir.'/composer'); $this->assertAutoloadFiles('classmap7', $this->vendorDir.'/composer', 'classmap'); // make sure dev autoload is correctly dumped $this->assertAutoloadFiles('files2', $this->vendorDir.'/composer', 'files'); } public function testMainPackageDevAutoloadingDisabledByDefault() { $package = new Package('a', '1.0', '1.0'); $package->setAutoload(array( 'psr-0' => array( 'Main' => 'src/', ), )); $package->setDevAutoload(array( 'files' => array('devfiles/foo.php'), )); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue(array())); $this->fs->ensureDirectoryExists($this->workingDir.'/composer'); $this->fs->ensureDirectoryExists($this->workingDir.'/src/Main'); file_put_contents($this->workingDir.'/src/Main/ClassMain.php', 'fs->ensureDirectoryExists($this->workingDir.'/devfiles'); file_put_contents($this->workingDir.'/devfiles/foo.php', 'generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_1'); // check standard autoload $this->assertAutoloadFiles('main4', $this->vendorDir.'/composer'); $this->assertAutoloadFiles('classmap7', $this->vendorDir.'/composer', 'classmap'); // make sure dev autoload is disabled when dev mode is set to false $this->assertFalse(is_file($this->vendorDir.'/composer/autoload_files.php')); } public function testVendorDirSameAsWorkingDir() { $this->vendorDir = $this->workingDir; $package = new Package('a', '1.0', '1.0'); $package->setAutoload(array( 'psr-0' => array('Main' => 'src/', 'Lala' => 'src/'), 'psr-4' => array( 'Acme\Fruit\\' => 'src-fruit/', 'Acme\Cake\\' => array('src-cake/', 'lib-cake/'), ), 'classmap' => array('composersrc/'), )); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue(array())); $this->fs->ensureDirectoryExists($this->vendorDir.'/composer'); $this->fs->ensureDirectoryExists($this->vendorDir.'/src/Main'); file_put_contents($this->vendorDir.'/src/Main/Foo.php', 'fs->ensureDirectoryExists($this->vendorDir.'/composersrc'); file_put_contents($this->vendorDir.'/composersrc/foo.php', 'generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_2'); $this->assertAutoloadFiles('main3', $this->vendorDir.'/composer'); $this->assertAutoloadFiles('psr4_3', $this->vendorDir.'/composer', 'psr4'); $this->assertAutoloadFiles('classmap3', $this->vendorDir.'/composer', 'classmap'); } public function testMainPackageAutoloadingAlternativeVendorDir() { $package = new Package('a', '1.0', '1.0'); $package->setAutoload(array( 'psr-0' => array('Main' => 'src/', 'Lala' => 'src/'), 'psr-4' => array( 'Acme\Fruit\\' => 'src-fruit/', 'Acme\Cake\\' => array('src-cake/', 'lib-cake/'), ), 'classmap' => array('composersrc/'), )); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue(array())); $this->vendorDir .= '/subdir'; $this->fs->ensureDirectoryExists($this->vendorDir.'/composer'); $this->fs->ensureDirectoryExists($this->workingDir.'/src'); $this->fs->ensureDirectoryExists($this->workingDir.'/composersrc'); file_put_contents($this->workingDir.'/composersrc/foo.php', 'generator->dump($this->config, $this->repository, $package, $this->im, 'composer', false, '_3'); $this->assertAutoloadFiles('main2', $this->vendorDir.'/composer'); $this->assertAutoloadFiles('psr4_2', $this->vendorDir.'/composer', 'psr4'); $this->assertAutoloadFiles('classmap2', $this->vendorDir.'/composer', 'classmap'); } public function testMainPackageAutoloadingWithTargetDir() { $package = new Package('a', '1.0', '1.0'); $package->setAutoload(array( 'psr-0' => array('Main\\Foo' => '', 'Main\\Bar' => ''), 'classmap' => array('Main/Foo/src', 'lib'), 'files' => array('foo.php', 'Main/Foo/bar.php'), )); $package->setTargetDir('Main/Foo/'); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue(array())); $this->fs->ensureDirectoryExists($this->vendorDir.'/a'); $this->fs->ensureDirectoryExists($this->workingDir.'/src'); $this->fs->ensureDirectoryExists($this->workingDir.'/lib'); file_put_contents($this->workingDir.'/src/rootfoo.php', 'workingDir.'/lib/rootbar.php', 'workingDir.'/foo.php', 'workingDir.'/bar.php', 'generator->dump($this->config, $this->repository, $package, $this->im, 'composer', false, 'TargetDir'); $this->assertFileEquals(__DIR__.'/Fixtures/autoload_target_dir.php', $this->vendorDir.'/autoload.php'); $this->assertFileEquals(__DIR__.'/Fixtures/autoload_real_target_dir.php', $this->vendorDir.'/composer/autoload_real.php'); $this->assertFileEquals(__DIR__.'/Fixtures/autoload_files_target_dir.php', $this->vendorDir.'/composer/autoload_files.php'); $this->assertAutoloadFiles('classmap6', $this->vendorDir.'/composer', 'classmap'); } public function testVendorsAutoloading() { $package = new Package('a', '1.0', '1.0'); $packages = array(); $packages[] = $a = new Package('a/a', '1.0', '1.0'); $packages[] = $b = new Package('b/b', '1.0', '1.0'); $packages[] = $c = new AliasPackage($b, '1.2', '1.2'); $a->setAutoload(array('psr-0' => array('A' => 'src/', 'A\\B' => 'lib/'))); $b->setAutoload(array('psr-0' => array('B\\Sub\\Name' => 'src/'))); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue($packages)); $this->fs->ensureDirectoryExists($this->vendorDir.'/composer'); $this->fs->ensureDirectoryExists($this->vendorDir.'/a/a/src'); $this->fs->ensureDirectoryExists($this->vendorDir.'/a/a/lib'); $this->fs->ensureDirectoryExists($this->vendorDir.'/b/b/src'); $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', false, '_5'); $this->assertAutoloadFiles('vendors', $this->vendorDir.'/composer'); $this->assertTrue(file_exists($this->vendorDir.'/composer/autoload_classmap.php'), "ClassMap file needs to be generated, even if empty."); } public function testPSRToClassMapIgnoresNonExistingDir() { $package = new Package('a', '1.0', '1.0'); $package->setAutoload(array( 'psr-0' => array('Prefix' => 'foo/bar/non/existing/'), 'psr-4' => array('Prefix\\' => 'foo/bar/non/existing2/'), )); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue(array())); $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_8'); $this->assertTrue(file_exists($this->vendorDir.'/composer/autoload_classmap.php'), "ClassMap file needs to be generated."); $this->assertEquals( array(), include $this->vendorDir.'/composer/autoload_classmap.php' ); } public function testVendorsClassMapAutoloading() { $package = new Package('a', '1.0', '1.0'); $packages = array(); $packages[] = $a = new Package('a/a', '1.0', '1.0'); $packages[] = $b = new Package('b/b', '1.0', '1.0'); $a->setAutoload(array('classmap' => array('src/'))); $b->setAutoload(array('classmap' => array('src/', 'lib/'))); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue($packages)); $this->fs->ensureDirectoryExists($this->vendorDir.'/composer'); $this->fs->ensureDirectoryExists($this->vendorDir.'/a/a/src'); $this->fs->ensureDirectoryExists($this->vendorDir.'/b/b/src'); $this->fs->ensureDirectoryExists($this->vendorDir.'/b/b/lib'); file_put_contents($this->vendorDir.'/a/a/src/a.php', 'vendorDir.'/b/b/src/b.php', 'vendorDir.'/b/b/lib/c.php', 'generator->dump($this->config, $this->repository, $package, $this->im, 'composer', false, '_6'); $this->assertTrue(file_exists($this->vendorDir.'/composer/autoload_classmap.php'), "ClassMap file needs to be generated."); $this->assertEquals( array( 'ClassMapBar' => $this->vendorDir.'/b/b/src/b.php', 'ClassMapBaz' => $this->vendorDir.'/b/b/lib/c.php', 'ClassMapFoo' => $this->vendorDir.'/a/a/src/a.php', ), include $this->vendorDir.'/composer/autoload_classmap.php' ); $this->assertAutoloadFiles('classmap4', $this->vendorDir.'/composer', 'classmap'); } public function testVendorsClassMapAutoloadingWithTargetDir() { $package = new Package('a', '1.0', '1.0'); $packages = array(); $packages[] = $a = new Package('a/a', '1.0', '1.0'); $packages[] = $b = new Package('b/b', '1.0', '1.0'); $a->setAutoload(array('classmap' => array('target/src/', 'lib/'))); $a->setTargetDir('target'); $b->setAutoload(array('classmap' => array('src/'))); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue($packages)); $this->fs->ensureDirectoryExists($this->vendorDir.'/composer'); $this->fs->ensureDirectoryExists($this->vendorDir.'/a/a/target/src'); $this->fs->ensureDirectoryExists($this->vendorDir.'/a/a/target/lib'); $this->fs->ensureDirectoryExists($this->vendorDir.'/b/b/src'); file_put_contents($this->vendorDir.'/a/a/target/src/a.php', 'vendorDir.'/a/a/target/lib/b.php', 'vendorDir.'/b/b/src/c.php', 'generator->dump($this->config, $this->repository, $package, $this->im, 'composer', false, '_6'); $this->assertTrue(file_exists($this->vendorDir.'/composer/autoload_classmap.php'), "ClassMap file needs to be generated."); $this->assertEquals( array( 'ClassMapBar' => $this->vendorDir.'/a/a/target/lib/b.php', 'ClassMapBaz' => $this->vendorDir.'/b/b/src/c.php', 'ClassMapFoo' => $this->vendorDir.'/a/a/target/src/a.php', ), include $this->vendorDir.'/composer/autoload_classmap.php' ); } public function testClassMapAutoloadingEmptyDirAndExactFile() { $package = new Package('a', '1.0', '1.0'); $packages = array(); $packages[] = $a = new Package('a/a', '1.0', '1.0'); $packages[] = $b = new Package('b/b', '1.0', '1.0'); $packages[] = $c = new Package('c/c', '1.0', '1.0'); $a->setAutoload(array('classmap' => array(''))); $b->setAutoload(array('classmap' => array('test.php'))); $c->setAutoload(array('classmap' => array('./'))); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue($packages)); $this->fs->ensureDirectoryExists($this->vendorDir.'/composer'); $this->fs->ensureDirectoryExists($this->vendorDir.'/a/a/src'); $this->fs->ensureDirectoryExists($this->vendorDir.'/b/b'); $this->fs->ensureDirectoryExists($this->vendorDir.'/c/c/foo'); file_put_contents($this->vendorDir.'/a/a/src/a.php', 'vendorDir.'/b/b/test.php', 'vendorDir.'/c/c/foo/test.php', 'generator->dump($this->config, $this->repository, $package, $this->im, 'composer', false, '_7'); $this->assertTrue(file_exists($this->vendorDir.'/composer/autoload_classmap.php'), "ClassMap file needs to be generated."); $this->assertEquals( array( 'ClassMapBar' => $this->vendorDir.'/b/b/test.php', 'ClassMapBaz' => $this->vendorDir.'/c/c/foo/test.php', 'ClassMapFoo' => $this->vendorDir.'/a/a/src/a.php', ), include $this->vendorDir.'/composer/autoload_classmap.php' ); $this->assertAutoloadFiles('classmap5', $this->vendorDir.'/composer', 'classmap'); $this->assertNotContains('$loader->setClassMapAuthoritative(true);', file_get_contents($this->vendorDir.'/composer/autoload_real.php')); } public function testClassMapAutoloadingAuthoritative() { $package = new Package('a', '1.0', '1.0'); $packages = array(); $packages[] = $a = new Package('a/a', '1.0', '1.0'); $packages[] = $b = new Package('b/b', '1.0', '1.0'); $packages[] = $c = new Package('c/c', '1.0', '1.0'); $a->setAutoload(array('psr-4' => array('' => 'src/'))); $b->setAutoload(array('psr-4' => array('' => './'))); $c->setAutoload(array('psr-4' => array('' => 'foo/'))); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue($packages)); $this->fs->ensureDirectoryExists($this->vendorDir.'/composer'); $this->fs->ensureDirectoryExists($this->vendorDir.'/a/a/src'); $this->fs->ensureDirectoryExists($this->vendorDir.'/b/b'); $this->fs->ensureDirectoryExists($this->vendorDir.'/c/c/foo'); file_put_contents($this->vendorDir.'/a/a/src/ClassMapFoo.php', 'vendorDir.'/b/b/ClassMapBar.php', 'vendorDir.'/c/c/foo/ClassMapBaz.php', 'generator->setClassMapAuthoritative(true); $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', false, '_7'); $this->assertTrue(file_exists($this->vendorDir.'/composer/autoload_classmap.php'), "ClassMap file needs to be generated."); $this->assertEquals( array( 'ClassMapBar' => $this->vendorDir.'/b/b/ClassMapBar.php', 'ClassMapBaz' => $this->vendorDir.'/c/c/foo/ClassMapBaz.php', 'ClassMapFoo' => $this->vendorDir.'/a/a/src/ClassMapFoo.php', ), include $this->vendorDir.'/composer/autoload_classmap.php' ); $this->assertAutoloadFiles('classmap8', $this->vendorDir.'/composer', 'classmap'); $this->assertContains('$loader->setClassMapAuthoritative(true);', file_get_contents($this->vendorDir.'/composer/autoload_real.php')); } public function testFilesAutoloadGeneration() { $package = new Package('a', '1.0', '1.0'); $package->setAutoload(array('files' => array('root.php'))); $packages = array(); $packages[] = $a = new Package('a/a', '1.0', '1.0'); $packages[] = $b = new Package('b/b', '1.0', '1.0'); $packages[] = $c = new Package('c/c', '1.0', '1.0'); $a->setAutoload(array('files' => array('test.php'))); $b->setAutoload(array('files' => array('test2.php'))); $c->setAutoload(array('files' => array('test3.php', 'foo/bar/test4.php'))); $c->setTargetDir('foo/bar'); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue($packages)); $this->fs->ensureDirectoryExists($this->vendorDir.'/a/a'); $this->fs->ensureDirectoryExists($this->vendorDir.'/b/b'); $this->fs->ensureDirectoryExists($this->vendorDir.'/c/c/foo/bar'); file_put_contents($this->vendorDir.'/a/a/test.php', 'vendorDir.'/b/b/test2.php', 'vendorDir.'/c/c/foo/bar/test3.php', 'vendorDir.'/c/c/foo/bar/test4.php', 'workingDir.'/root.php', 'generator->dump($this->config, $this->repository, $package, $this->im, 'composer', false, 'FilesAutoload'); $this->assertFileEquals(__DIR__.'/Fixtures/autoload_functions.php', $this->vendorDir.'/autoload.php'); $this->assertFileEquals(__DIR__.'/Fixtures/autoload_real_functions.php', $this->vendorDir.'/composer/autoload_real.php'); $this->assertFileEquals(__DIR__.'/Fixtures/autoload_files_functions.php', $this->vendorDir.'/composer/autoload_files.php'); include $this->vendorDir . '/autoload.php'; $this->assertTrue(function_exists('testFilesAutoloadGeneration1')); $this->assertTrue(function_exists('testFilesAutoloadGeneration2')); $this->assertTrue(function_exists('testFilesAutoloadGeneration3')); $this->assertTrue(function_exists('testFilesAutoloadGeneration4')); $this->assertTrue(function_exists('testFilesAutoloadGenerationRoot')); } public function testFilesAutoloadGenerationRemoveExtraEntitiesFromAutoloadFiles() { $autoloadPackage = new Package('a', '1.0', '1.0'); $autoloadPackage->setAutoload(array('files' => array('root.php'))); $autoloadPackage->setIncludePaths(array('/lib', '/src')); $notAutoloadPackage = new Package('a', '1.0', '1.0'); $autoloadPackages = array(); $autoloadPackages[] = $a = new Package('a/a', '1.0', '1.0'); $autoloadPackages[] = $b = new Package('b/b', '1.0', '1.0'); $autoloadPackages[] = $c = new Package('c/c', '1.0', '1.0'); $a->setAutoload(array('files' => array('test.php'))); $a->setIncludePaths(array('lib1', 'src1')); $b->setAutoload(array('files' => array('test2.php'))); $b->setIncludePaths(array('lib2')); $c->setAutoload(array('files' => array('test3.php', 'foo/bar/test4.php'))); $c->setIncludePaths(array('lib3')); $c->setTargetDir('foo/bar'); $notAutoloadPackages = array(); $notAutoloadPackages[] = $a = new Package('a/a', '1.0', '1.0'); $notAutoloadPackages[] = $b = new Package('b/b', '1.0', '1.0'); $notAutoloadPackages[] = $c = new Package('c/c', '1.0', '1.0'); $this->repository->expects($this->at(0)) ->method('getCanonicalPackages') ->will($this->returnValue($autoloadPackages)); $this->repository->expects($this->at(1)) ->method('getCanonicalPackages') ->will($this->returnValue($notAutoloadPackages)); $this->repository->expects($this->at(2)) ->method('getCanonicalPackages') ->will($this->returnValue($notAutoloadPackages)); $this->fs->ensureDirectoryExists($this->vendorDir.'/a/a'); $this->fs->ensureDirectoryExists($this->vendorDir.'/b/b'); $this->fs->ensureDirectoryExists($this->vendorDir.'/c/c/foo/bar'); file_put_contents($this->vendorDir.'/a/a/test.php', 'vendorDir.'/b/b/test2.php', 'vendorDir.'/c/c/foo/bar/test3.php', 'vendorDir.'/c/c/foo/bar/test4.php', 'workingDir.'/root.php', 'generator->dump($this->config, $this->repository, $autoloadPackage, $this->im, 'composer', false, 'FilesAutoload'); $this->assertFileEquals(__DIR__.'/Fixtures/autoload_functions.php', $this->vendorDir.'/autoload.php'); $this->assertFileEquals(__DIR__.'/Fixtures/autoload_real_functions_with_include_paths.php', $this->vendorDir.'/composer/autoload_real.php'); $this->assertFileEquals(__DIR__.'/Fixtures/autoload_files_functions.php', $this->vendorDir.'/composer/autoload_files.php'); $this->assertFileEquals(__DIR__.'/Fixtures/include_paths_functions.php', $this->vendorDir.'/composer/include_paths.php'); $this->generator->dump($this->config, $this->repository, $autoloadPackage, $this->im, 'composer', false, 'FilesAutoload'); $this->assertFileEquals(__DIR__.'/Fixtures/autoload_functions.php', $this->vendorDir.'/autoload.php'); $this->assertFileEquals(__DIR__.'/Fixtures/autoload_real_functions_with_include_paths.php', $this->vendorDir.'/composer/autoload_real.php'); $this->assertFileEquals(__DIR__.'/Fixtures/autoload_files_functions_with_removed_extra.php', $this->vendorDir.'/composer/autoload_files.php'); $this->assertFileEquals(__DIR__.'/Fixtures/include_paths_functions_with_removed_extra.php', $this->vendorDir.'/composer/include_paths.php'); $this->generator->dump($this->config, $this->repository, $notAutoloadPackage, $this->im, 'composer', false, 'FilesAutoload'); $this->assertFileEquals(__DIR__.'/Fixtures/autoload_functions.php', $this->vendorDir.'/autoload.php'); $this->assertFileEquals(__DIR__.'/Fixtures/autoload_real_functions_with_removed_include_paths_and_autolad_files.php', $this->vendorDir.'/composer/autoload_real.php'); $this->assertFileNotExists($this->vendorDir.'/composer/autoload_files.php'); $this->assertFileNotExists($this->vendorDir.'/composer/include_paths.php'); } public function testFilesAutoloadOrderByDependencies() { $package = new Package('a', '1.0', '1.0'); $package->setAutoload(array('files' => array('root2.php'))); $package->setRequires(array(new Link('a', 'z/foo'))); $package->setRequires(array(new Link('a', 'd/d'))); $package->setRequires(array(new Link('a', 'e/e'))); $packages = array(); $packages[] = $z = new Package('z/foo', '1.0', '1.0'); $packages[] = $b = new Package('b/bar', '1.0', '1.0'); $packages[] = $d = new Package('d/d', '1.0', '1.0'); $packages[] = $c = new Package('c/lorem', '1.0', '1.0'); $packages[] = $e = new Package('e/e', '1.0', '1.0'); $z->setAutoload(array('files' => array('testA.php'))); $z->setRequires(array(new Link('z/foo', 'c/lorem'))); $b->setAutoload(array('files' => array('testB.php'))); $b->setRequires(array(new Link('b/bar', 'c/lorem'), new Link('b/bar', 'd/d'))); $c->setAutoload(array('files' => array('testC.php'))); $d->setAutoload(array('files' => array('testD.php'))); $d->setRequires(array(new Link('d/d', 'c/lorem'))); $e->setAutoload(array('files' => array('testE.php'))); $e->setRequires(array(new Link('e/e', 'c/lorem'))); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue($packages)); $this->fs->ensureDirectoryExists($this->vendorDir . '/z/foo'); $this->fs->ensureDirectoryExists($this->vendorDir . '/b/bar'); $this->fs->ensureDirectoryExists($this->vendorDir . '/c/lorem'); $this->fs->ensureDirectoryExists($this->vendorDir . '/d/d'); $this->fs->ensureDirectoryExists($this->vendorDir . '/e/e'); file_put_contents($this->vendorDir . '/z/foo/testA.php', 'vendorDir . '/b/bar/testB.php', 'vendorDir . '/c/lorem/testC.php', 'vendorDir . '/d/d/testD.php', 'vendorDir . '/e/e/testE.php', 'workingDir . '/root2.php', 'generator->dump($this->config, $this->repository, $package, $this->im, 'composer', false, 'FilesAutoloadOrder'); $this->assertFileEquals(__DIR__ . '/Fixtures/autoload_functions_by_dependency.php', $this->vendorDir . '/autoload.php'); $this->assertFileEquals(__DIR__ . '/Fixtures/autoload_real_files_by_dependency.php', $this->vendorDir . '/composer/autoload_real.php'); require $this->vendorDir . '/autoload.php'; $this->assertTrue(function_exists('testFilesAutoloadOrderByDependency1')); $this->assertTrue(function_exists('testFilesAutoloadOrderByDependency2')); $this->assertTrue(function_exists('testFilesAutoloadOrderByDependency3')); $this->assertTrue(function_exists('testFilesAutoloadOrderByDependency4')); $this->assertTrue(function_exists('testFilesAutoloadOrderByDependency5')); $this->assertTrue(function_exists('testFilesAutoloadOrderByDependencyRoot')); } /** * Test that PSR-0 and PSR-4 mappings are processed in the correct order for * autoloading and for classmap generation: * - The main package has priority over other packages. * - Longer namespaces have priority over shorter namespaces. */ public function testOverrideVendorsAutoloading() { $mainPackage = new Package('z', '1.0', '1.0'); $mainPackage->setAutoload(array( 'psr-0' => array('A\\B' => $this->workingDir.'/lib'), 'classmap' => array($this->workingDir.'/src'), )); $mainPackage->setRequires(array(new Link('z', 'a/a'))); $packages = array(); $packages[] = $a = new Package('a/a', '1.0', '1.0'); $packages[] = $b = new Package('b/b', '1.0', '1.0'); $a->setAutoload(array( 'psr-0' => array('A' => 'src/', 'A\\B' => 'lib/'), 'classmap' => array('classmap'), )); $b->setAutoload(array( 'psr-0' => array('B\\Sub\\Name' => 'src/'), )); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue($packages)); $this->fs->ensureDirectoryExists($this->workingDir.'/lib/A/B'); $this->fs->ensureDirectoryExists($this->workingDir.'/src/'); $this->fs->ensureDirectoryExists($this->vendorDir.'/composer'); $this->fs->ensureDirectoryExists($this->vendorDir.'/a/a/classmap'); $this->fs->ensureDirectoryExists($this->vendorDir.'/a/a/src'); $this->fs->ensureDirectoryExists($this->vendorDir.'/a/a/lib/A/B'); $this->fs->ensureDirectoryExists($this->vendorDir.'/b/b/src'); // Define the classes A\B\C and Foo\Bar in the main package. file_put_contents($this->workingDir.'/lib/A/B/C.php', 'workingDir.'/src/classes.php', 'vendorDir.'/a/a/lib/A/B/C.php', 'vendorDir.'/a/a/classmap/classes.php', ' array(\$vendorDir . '/b/b/src'), 'A\\\\B' => array(\$baseDir . '/lib', \$vendorDir . '/a/a/lib'), 'A' => array(\$vendorDir . '/a/a/src'), ); EOF; // autoload_psr4.php is expected to be empty in this example. $expectedPsr4 = << \$baseDir . '/lib/A/B/C.php', 'Foo\\\\Bar' => \$baseDir . '/src/classes.php', ); EOF; $this->generator->dump($this->config, $this->repository, $mainPackage, $this->im, 'composer', true, '_9'); $this->assertEquals($expectedNamespace, file_get_contents($this->vendorDir.'/composer/autoload_namespaces.php')); $this->assertEquals($expectedPsr4, file_get_contents($this->vendorDir.'/composer/autoload_psr4.php')); $this->assertEquals($expectedClassmap, file_get_contents($this->vendorDir.'/composer/autoload_classmap.php')); } public function testIncludePathFileGeneration() { $package = new Package('a', '1.0', '1.0'); $packages = array(); $a = new Package("a/a", "1.0", "1.0"); $a->setIncludePaths(array("lib/")); $b = new Package("b/b", "1.0", "1.0"); $b->setIncludePaths(array("library")); $c = new Package("c", "1.0", "1.0"); $c->setIncludePaths(array("library")); $packages[] = $a; $packages[] = $b; $packages[] = $c; $this->repository->expects($this->once()) ->method("getCanonicalPackages") ->will($this->returnValue($packages)); $this->fs->ensureDirectoryExists($this->vendorDir.'/composer'); $this->generator->dump($this->config, $this->repository, $package, $this->im, "composer", false, '_10'); $this->assertFileEquals(__DIR__.'/Fixtures/include_paths.php', $this->vendorDir.'/composer/include_paths.php'); $this->assertEquals( array( $this->vendorDir."/a/a/lib", $this->vendorDir."/b/b/library", $this->vendorDir."/c/library", ), require $this->vendorDir."/composer/include_paths.php" ); } public function testIncludePathsArePrependedInAutoloadFile() { $package = new Package('a', '1.0', '1.0'); $packages = array(); $a = new Package("a/a", "1.0", "1.0"); $a->setIncludePaths(array("lib/")); $packages[] = $a; $this->repository->expects($this->once()) ->method("getCanonicalPackages") ->will($this->returnValue($packages)); mkdir($this->vendorDir."/composer", 0777, true); $this->generator->dump($this->config, $this->repository, $package, $this->im, "composer", false, '_11'); $oldIncludePath = get_include_path(); require $this->vendorDir."/autoload.php"; $this->assertEquals( $this->vendorDir."/a/a/lib".PATH_SEPARATOR.$oldIncludePath, get_include_path() ); set_include_path($oldIncludePath); } public function testIncludePathsInMainPackage() { $package = new Package('a', '1.0', '1.0'); $package->setIncludePaths(array('/lib', '/src')); $packages = array($a = new Package("a/a", "1.0", "1.0")); $a->setIncludePaths(array("lib/")); $this->repository->expects($this->once()) ->method("getCanonicalPackages") ->will($this->returnValue($packages)); mkdir($this->vendorDir."/composer", 0777, true); $this->generator->dump($this->config, $this->repository, $package, $this->im, "composer", false, '_12'); $oldIncludePath = get_include_path(); require $this->vendorDir."/autoload.php"; $this->assertEquals( $this->workingDir."/lib".PATH_SEPARATOR.$this->workingDir."/src".PATH_SEPARATOR.$this->vendorDir."/a/a/lib".PATH_SEPARATOR.$oldIncludePath, get_include_path() ); set_include_path($oldIncludePath); } public function testIncludePathFileWithoutPathsIsSkipped() { $package = new Package('a', '1.0', '1.0'); $packages = array(); $a = new Package("a/a", "1.0", "1.0"); $packages[] = $a; $this->repository->expects($this->once()) ->method("getCanonicalPackages") ->will($this->returnValue($packages)); mkdir($this->vendorDir."/composer", 0777, true); $this->generator->dump($this->config, $this->repository, $package, $this->im, "composer", false, '_12'); $this->assertFalse(file_exists($this->vendorDir."/composer/include_paths.php")); } public function testPreAndPostEventsAreDispatchedDuringAutoloadDump() { $this->eventDispatcher ->expects($this->at(0)) ->method('dispatchScript') ->with(ScriptEvents::PRE_AUTOLOAD_DUMP, false); $this->eventDispatcher ->expects($this->at(1)) ->method('dispatchScript') ->with(ScriptEvents::POST_AUTOLOAD_DUMP, false); $package = new Package('a', '1.0', '1.0'); $package->setAutoload(array('psr-0' => array('foo/bar/non/existing/'))); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue(array())); $this->generator->setRunScripts(true); $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_8'); } public function testUseGlobalIncludePath() { $package = new Package('a', '1.0', '1.0'); $package->setAutoload(array( 'psr-0' => array('Main\\Foo' => '', 'Main\\Bar' => ''), )); $package->setTargetDir('Main/Foo/'); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue(array())); $this->configValueMap['use-include-path'] = true; $this->fs->ensureDirectoryExists($this->vendorDir.'/a'); $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', false, 'IncludePath'); $this->assertFileEquals(__DIR__.'/Fixtures/autoload_real_include_path.php', $this->vendorDir.'/composer/autoload_real.php'); } public function testVendorDirExcludedFromWorkingDir() { $workingDir = $this->vendorDir.'/working-dir'; $vendorDir = $workingDir.'/../vendor'; $this->fs->ensureDirectoryExists($workingDir); chdir($workingDir); $package = new Package('a', '1.0', '1.0'); $package->setAutoload(array( 'psr-0' => array('Foo' => 'src'), 'psr-4' => array('Acme\Foo\\' => 'src-psr4'), 'classmap' => array('classmap'), 'files' => array('test.php'), )); $vendorPackage = new Package('b/b', '1.0', '1.0'); $vendorPackage->setAutoload(array( 'psr-0' => array('Bar' => 'lib'), 'psr-4' => array('Acme\Bar\\' => 'lib-psr4'), 'classmap' => array('classmaps'), 'files' => array('bootstrap.php'), )); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue(array($vendorPackage))); $im = $this->getMockBuilder('Composer\Installer\InstallationManager') ->disableOriginalConstructor() ->getMock(); $im->expects($this->any()) ->method('getInstallPath') ->will($this->returnCallback(function ($package) use ($vendorDir) { $targetDir = $package->getTargetDir(); return $vendorDir.'/'.$package->getName() . ($targetDir ? '/'.$targetDir : ''); })); $this->fs->ensureDirectoryExists($workingDir.'/src/Foo'); $this->fs->ensureDirectoryExists($workingDir.'/classmap'); $this->fs->ensureDirectoryExists($vendorDir.'/composer'); $this->fs->ensureDirectoryExists($vendorDir.'/b/b/lib/Bar'); $this->fs->ensureDirectoryExists($vendorDir.'/b/b/classmaps'); file_put_contents($workingDir.'/src/Foo/Bar.php', 'vendorDir; $this->vendorDir = $vendorDir; $this->generator->dump($this->config, $this->repository, $package, $im, 'composer', true, '_13'); $this->vendorDir = $oldVendorDir; $expectedNamespace = <<<'EOF' array($baseDir . '/src'), 'Bar' => array($vendorDir . '/b/b/lib'), ); EOF; $expectedPsr4 = <<<'EOF' array($baseDir . '/src-psr4'), 'Acme\\Bar\\' => array($vendorDir . '/b/b/lib-psr4'), ); EOF; $expectedClassmap = <<<'EOF' $vendorDir . '/b/b/classmaps/classes.php', 'Bar\\Foo' => $vendorDir . '/b/b/lib/Bar/Foo.php', 'Foo\\Bar' => $baseDir . '/src/Foo/Bar.php', 'Foo\\Foo' => $baseDir . '/classmap/classes.php', ); EOF; $this->assertEquals($expectedNamespace, file_get_contents($vendorDir.'/composer/autoload_namespaces.php')); $this->assertEquals($expectedPsr4, file_get_contents($vendorDir.'/composer/autoload_psr4.php')); $this->assertEquals($expectedClassmap, file_get_contents($vendorDir.'/composer/autoload_classmap.php')); $this->assertContains("\$vendorDir . '/b/b/bootstrap.php',\n", file_get_contents($vendorDir.'/composer/autoload_files.php')); $this->assertContains("\$baseDir . '/test.php',\n", file_get_contents($vendorDir.'/composer/autoload_files.php')); } public function testUpLevelRelativePaths() { $workingDir = $this->workingDir.'/working-dir'; mkdir($workingDir, 0777, true); chdir($workingDir); $package = new Package('a', '1.0', '1.0'); $package->setAutoload(array( 'psr-0' => array('Foo' => '../path/../src'), 'psr-4' => array('Acme\Foo\\' => '../path/../src-psr4'), 'classmap' => array('../classmap'), 'files' => array('../test.php'), 'exclude-from-classmap' => array('./../classmap/excluded'), )); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue(array())); $this->fs->ensureDirectoryExists($this->workingDir.'/src/Foo'); $this->fs->ensureDirectoryExists($this->workingDir.'/classmap/excluded'); file_put_contents($this->workingDir.'/src/Foo/Bar.php', 'workingDir.'/classmap/classes.php', 'workingDir.'/classmap/excluded/classes.php', 'workingDir.'/test.php', 'generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_14'); $expectedNamespace = <<<'EOF' array($baseDir . '/../src'), ); EOF; $expectedPsr4 = <<<'EOF' array($baseDir . '/../src-psr4'), ); EOF; $expectedClassmap = <<<'EOF' $baseDir . '/../src/Foo/Bar.php', 'Foo\\Foo' => $baseDir . '/../classmap/classes.php', ); EOF; $this->assertEquals($expectedNamespace, file_get_contents($this->vendorDir.'/composer/autoload_namespaces.php')); $this->assertEquals($expectedPsr4, file_get_contents($this->vendorDir.'/composer/autoload_psr4.php')); $this->assertEquals($expectedClassmap, file_get_contents($this->vendorDir.'/composer/autoload_classmap.php')); $this->assertContains("\$baseDir . '/../test.php',\n", file_get_contents($this->vendorDir.'/composer/autoload_files.php')); } public function testEmptyPaths() { $package = new Package('a', '1.0', '1.0'); $package->setAutoload(array( 'psr-0' => array('Foo' => ''), 'psr-4' => array('Acme\Foo\\' => ''), 'classmap' => array(''), )); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue(array())); $this->fs->ensureDirectoryExists($this->workingDir.'/Foo'); file_put_contents($this->workingDir.'/Foo/Bar.php', 'workingDir.'/class.php', 'generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_15'); $expectedNamespace = <<<'EOF' array($baseDir . '/'), ); EOF; $expectedPsr4 = <<<'EOF' array($baseDir . '/'), ); EOF; $expectedClassmap = <<<'EOF' $baseDir . '/class.php', 'Foo\\Bar' => $baseDir . '/Foo/Bar.php', ); EOF; $this->assertEquals($expectedNamespace, file_get_contents($this->vendorDir.'/composer/autoload_namespaces.php')); $this->assertEquals($expectedPsr4, file_get_contents($this->vendorDir.'/composer/autoload_psr4.php')); $this->assertEquals($expectedClassmap, file_get_contents($this->vendorDir.'/composer/autoload_classmap.php')); } public function testVendorSubstringPath() { $package = new Package('a', '1.0', '1.0'); $package->setAutoload(array( 'psr-0' => array('Foo' => 'composer-test-autoload-src/src'), 'psr-4' => array('Acme\Foo\\' => 'composer-test-autoload-src/src-psr4'), )); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue(array())); $this->fs->ensureDirectoryExists($this->vendorDir.'/a'); $expectedNamespace = <<<'EOF' array($baseDir . '/composer-test-autoload-src/src'), ); EOF; $expectedPsr4 = <<<'EOF' array($baseDir . '/composer-test-autoload-src/src-psr4'), ); EOF; $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', false, 'VendorSubstring'); $this->assertEquals($expectedNamespace, file_get_contents($this->vendorDir.'/composer/autoload_namespaces.php')); $this->assertEquals($expectedPsr4, file_get_contents($this->vendorDir.'/composer/autoload_psr4.php')); } public function testExcludeFromClassmap() { $package = new Package('a', '1.0', '1.0'); $package->setAutoload(array( 'psr-0' => array( 'Main' => 'src/', 'Lala' => array('src/', 'lib/'), ), 'psr-4' => array( 'Acme\Fruit\\' => 'src-fruit/', 'Acme\Cake\\' => array('src-cake/', 'lib-cake/'), ), 'classmap' => array('composersrc/'), 'exclude-from-classmap' => array( '/composersrc/excludedTests/', '/composersrc/ClassToExclude.php', '/composersrc/*/excluded/excsubpath', '**/excsubpath', ), )); $this->repository->expects($this->once()) ->method('getCanonicalPackages') ->will($this->returnValue(array())); $this->fs->ensureDirectoryExists($this->workingDir.'/composer'); $this->fs->ensureDirectoryExists($this->workingDir.'/src/Lala/Test'); $this->fs->ensureDirectoryExists($this->workingDir.'/lib'); file_put_contents($this->workingDir.'/src/Lala/ClassMapMain.php', 'workingDir.'/src/Lala/Test/ClassMapMainTest.php', 'fs->ensureDirectoryExists($this->workingDir.'/src-fruit'); $this->fs->ensureDirectoryExists($this->workingDir.'/src-cake'); $this->fs->ensureDirectoryExists($this->workingDir.'/lib-cake'); file_put_contents($this->workingDir.'/src-cake/ClassMapBar.php', 'fs->ensureDirectoryExists($this->workingDir.'/composersrc'); $this->fs->ensureDirectoryExists($this->workingDir.'/composersrc/tests'); file_put_contents($this->workingDir.'/composersrc/foo.php', 'fs->ensureDirectoryExists($this->workingDir.'/composersrc/excludedTests'); file_put_contents($this->workingDir.'/composersrc/excludedTests/bar.php', 'workingDir.'/composersrc/ClassToExclude.php', 'fs->ensureDirectoryExists($this->workingDir.'/composersrc/long/excluded/excsubpath'); file_put_contents($this->workingDir.'/composersrc/long/excluded/excsubpath/foo.php', 'workingDir.'/composersrc/long/excluded/excsubpath/bar.php', 'generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_1'); // Assert that autoload_classmap.php was correctly generated. $this->assertAutoloadFiles('classmap', $this->vendorDir.'/composer', 'classmap'); } private function assertAutoloadFiles($name, $dir, $type = 'namespaces') { $a = __DIR__.'/Fixtures/autoload_'.$name.'.php'; $b = $dir.'/autoload_'.$type.'.php'; $this->assertFileEquals($a, $b); } public static function assertFileEquals($expected, $actual, $message = '', $canonicalize = false, $ignoreCase = false) { return self::assertEquals( file_get_contents($expected), file_get_contents($actual), $message ?: $expected.' equals '.$actual, 0, 10, $canonicalize, $ignoreCase ); } public static function assertEquals($expected, $actual, $message = '', $delta = 0, $maxDepth = 10, $canonicalize = false, $ignoreCase = false) { return parent::assertEquals(str_replace("\r", '', $expected), str_replace("\r", '', $actual), $message, $delta, $maxDepth, $canonicalize, $ignoreCase); } } composer-1.0.0-beta2/tests/Composer/Test/Autoload/ClassLoaderTest.php000066400000000000000000000050071267577262200255410ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Autoload; use Composer\Autoload\ClassLoader; /** * Tests the Composer\Autoload\ClassLoader class. */ class ClassLoaderTest extends \PHPUnit_Framework_TestCase { /** * Tests regular PSR-0 and PSR-4 class loading. * * @dataProvider getLoadClassTests * * @param string $class The fully-qualified class name to test, without preceding namespace separator. * @param bool $prependSeparator Whether to call ->loadClass() with a class name with preceding * namespace separator, as it happens in PHP 5.3.0 - 5.3.2. See https://bugs.php.net/50731 */ public function testLoadClass($class, $prependSeparator = false) { $loader = new ClassLoader(); $loader->add('Namespaced\\', __DIR__ . '/Fixtures'); $loader->add('Pearlike_', __DIR__ . '/Fixtures'); $loader->addPsr4('ShinyVendor\\ShinyPackage\\', __DIR__ . '/Fixtures'); if ($prependSeparator) { $prepend = '\\'; $message = "->loadClass() loads '$class'."; } else { $prepend = ''; $message = "->loadClass() loads '\\$class', as required in PHP 5.3.0 - 5.3.2."; } $loader->loadClass($prepend . $class); $this->assertTrue(class_exists($class, false), $message); } /** * Provides arguments for ->testLoadClass(). * * @return array Array of parameter sets to test with. */ public function getLoadClassTests() { return array( array('Namespaced\\Foo'), array('Pearlike_Foo'), array('ShinyVendor\\ShinyPackage\\SubNamespace\\Foo'), // "Bar" would not work here, since it is defined in a ".inc" file, // instead of a ".php" file. So, use "Baz" instead. array('Namespaced\\Baz', true), array('Pearlike_Bar', true), array('ShinyVendor\\ShinyPackage\\SubNamespace\\Bar', true), ); } /** * getPrefixes method should return empty array if ClassLoader does not have any psr-0 configuration */ public function testGetPrefixesWithNoPSR0Configuration() { $loader = new ClassLoader(); $this->assertEmpty($loader->getPrefixes()); } } composer-1.0.0-beta2/tests/Composer/Test/Autoload/ClassMapGeneratorTest.php000066400000000000000000000223141267577262200267170ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ /* * This file is copied from the Symfony package. * * (c) Fabien Potencier */ namespace Composer\Test\Autoload; use Composer\Autoload\ClassMapGenerator; use Composer\TestCase; use Symfony\Component\Finder\Finder; use Composer\Util\Filesystem; class ClassMapGeneratorTest extends TestCase { /** * @dataProvider getTestCreateMapTests */ public function testCreateMap($directory, $expected) { $this->assertEqualsNormalized($expected, ClassMapGenerator::createMap($directory)); } public function getTestCreateMapTests() { if (PHP_VERSION_ID == 50303) { $this->markTestSkipped('Test segfaults on travis 5.3.3 due to ClassMap\LongString'); } $data = array( array(__DIR__.'/Fixtures/Namespaced', array( 'Namespaced\\Bar' => realpath(__DIR__).'/Fixtures/Namespaced/Bar.inc', 'Namespaced\\Foo' => realpath(__DIR__).'/Fixtures/Namespaced/Foo.php', 'Namespaced\\Baz' => realpath(__DIR__).'/Fixtures/Namespaced/Baz.php', )), array(__DIR__.'/Fixtures/beta/NamespaceCollision', array( 'NamespaceCollision\\A\\B\\Bar' => realpath(__DIR__).'/Fixtures/beta/NamespaceCollision/A/B/Bar.php', 'NamespaceCollision\\A\\B\\Foo' => realpath(__DIR__).'/Fixtures/beta/NamespaceCollision/A/B/Foo.php', )), array(__DIR__.'/Fixtures/Pearlike', array( 'Pearlike_Foo' => realpath(__DIR__).'/Fixtures/Pearlike/Foo.php', 'Pearlike_Bar' => realpath(__DIR__).'/Fixtures/Pearlike/Bar.php', 'Pearlike_Baz' => realpath(__DIR__).'/Fixtures/Pearlike/Baz.php', )), array(__DIR__.'/Fixtures/classmap', array( 'Foo\\Bar\\A' => realpath(__DIR__).'/Fixtures/classmap/sameNsMultipleClasses.php', 'Foo\\Bar\\B' => realpath(__DIR__).'/Fixtures/classmap/sameNsMultipleClasses.php', 'Alpha\\A' => realpath(__DIR__).'/Fixtures/classmap/multipleNs.php', 'Alpha\\B' => realpath(__DIR__).'/Fixtures/classmap/multipleNs.php', 'A' => realpath(__DIR__).'/Fixtures/classmap/multipleNs.php', 'Be\\ta\\A' => realpath(__DIR__).'/Fixtures/classmap/multipleNs.php', 'Be\\ta\\B' => realpath(__DIR__).'/Fixtures/classmap/multipleNs.php', 'ClassMap\\SomeInterface' => realpath(__DIR__).'/Fixtures/classmap/SomeInterface.php', 'ClassMap\\SomeParent' => realpath(__DIR__).'/Fixtures/classmap/SomeParent.php', 'ClassMap\\SomeClass' => realpath(__DIR__).'/Fixtures/classmap/SomeClass.php', 'ClassMap\\LongString' => realpath(__DIR__).'/Fixtures/classmap/LongString.php', 'Foo\\LargeClass' => realpath(__DIR__).'/Fixtures/classmap/LargeClass.php', 'Foo\\LargeGap' => realpath(__DIR__).'/Fixtures/classmap/LargeGap.php', 'Foo\\MissingSpace' => realpath(__DIR__).'/Fixtures/classmap/MissingSpace.php', 'Foo\\StripNoise' => realpath(__DIR__).'/Fixtures/classmap/StripNoise.php', 'Foo\\SlashedA' => realpath(__DIR__).'/Fixtures/classmap/BackslashLineEndingString.php', 'Foo\\SlashedB' => realpath(__DIR__).'/Fixtures/classmap/BackslashLineEndingString.php', 'Unicode\\↑\\↑' => realpath(__DIR__).'/Fixtures/classmap/Unicode.php', )), array(__DIR__.'/Fixtures/template', array()), ); if (PHP_VERSION_ID >= 50400) { $data[] = array(__DIR__.'/Fixtures/php5.4', array( 'TFoo' => __DIR__.'/Fixtures/php5.4/traits.php', 'CFoo' => __DIR__.'/Fixtures/php5.4/traits.php', 'Foo\\TBar' => __DIR__.'/Fixtures/php5.4/traits.php', 'Foo\\IBar' => __DIR__.'/Fixtures/php5.4/traits.php', 'Foo\\TFooBar' => __DIR__.'/Fixtures/php5.4/traits.php', 'Foo\\CBar' => __DIR__.'/Fixtures/php5.4/traits.php', )); } if (defined('HHVM_VERSION') && version_compare(HHVM_VERSION, '3.3', '>=')) { $data[] = array(__DIR__.'/Fixtures/hhvm3.3', array( 'FooEnum' => __DIR__.'/Fixtures/hhvm3.3/HackEnum.php', 'Foo\BarEnum' => __DIR__.'/Fixtures/hhvm3.3/NamespacedHackEnum.php', 'GenericsClass' => __DIR__.'/Fixtures/hhvm3.3/Generics.php', )); } return $data; } public function testCreateMapFinderSupport() { $this->checkIfFinderIsAvailable(); $finder = new Finder(); $finder->files()->in(__DIR__ . '/Fixtures/beta/NamespaceCollision'); $this->assertEqualsNormalized(array( 'NamespaceCollision\\A\\B\\Bar' => realpath(__DIR__).'/Fixtures/beta/NamespaceCollision/A/B/Bar.php', 'NamespaceCollision\\A\\B\\Foo' => realpath(__DIR__).'/Fixtures/beta/NamespaceCollision/A/B/Foo.php', ), ClassMapGenerator::createMap($finder)); } /** * @expectedException \RuntimeException * @expectedExceptionMessage does not exist */ public function testFindClassesThrowsWhenFileDoesNotExist() { $r = new \ReflectionClass('Composer\\Autoload\\ClassMapGenerator'); $find = $r->getMethod('findClasses'); $find->setAccessible(true); $find->invoke(null, __DIR__.'/no-file'); } public function testAmbiguousReference() { $this->checkIfFinderIsAvailable(); $tempDir = $this->getUniqueTmpDirectory(); $this->ensureDirectoryExistsAndClear($tempDir.'/other'); $finder = new Finder(); $finder->files()->in($tempDir); $io = $this->getMockBuilder('Composer\IO\ConsoleIO') ->disableOriginalConstructor() ->getMock(); file_put_contents($tempDir.'/A.php', "expects($this->once()) ->method('writeError') ->will($this->returnCallback(function ($text) use (&$msg) { $msg = $text; })); $messages = array( 'Warning: Ambiguous class resolution, "A" was found in both "'.$a.'" and "'.$b.'", the first will be used.', 'Warning: Ambiguous class resolution, "A" was found in both "'.$b.'" and "'.$a.'", the first will be used.', ); ClassMapGenerator::createMap($finder, null, $io); $this->assertTrue(in_array($msg, $messages, true), $msg.' not found in expected messages ('.var_export($messages, true).')'); $fs = new Filesystem(); $fs->removeDirectory($tempDir); } /** * If one file has a class or interface defined more than once, * an ambiguous reference warning should not be produced */ public function testUnambiguousReference() { $tempDir = $this->getUniqueTmpDirectory(); file_put_contents($tempDir.'/A.php', "getMockBuilder('Composer\IO\ConsoleIO') ->disableOriginalConstructor() ->getMock(); $io->expects($this->never()) ->method('write'); ClassMapGenerator::createMap($tempDir, null, $io); $fs = new Filesystem(); $fs->removeDirectory($tempDir); } /** * @expectedException \RuntimeException * @expectedExceptionMessage Could not scan for classes inside */ public function testCreateMapThrowsWhenDirectoryDoesNotExist() { ClassMapGenerator::createMap(__DIR__.'/no-file.no-foler'); } protected function assertEqualsNormalized($expected, $actual, $message = null) { foreach ($expected as $ns => $path) { $expected[$ns] = strtr($path, '\\', '/'); } foreach ($actual as $ns => $path) { $actual[$ns] = strtr($path, '\\', '/'); } $this->assertEquals($expected, $actual, $message); } private function checkIfFinderIsAvailable() { if (!class_exists('Symfony\\Component\\Finder\\Finder')) { $this->markTestSkipped('Finder component is not available'); } } } composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/000077500000000000000000000000001267577262200236035ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/Namespaced/000077500000000000000000000000001267577262200256435ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/Namespaced/Bar.inc000066400000000000000000000001161267577262200270400ustar00rootroot00000000000000 $baseDir . '/src-cake/ClassMapBar.php', 'ClassMapFoo' => $baseDir . '/composersrc/foo.php', 'Lala\\ClassMapMain' => $baseDir . '/src/Lala/ClassMapMain.php', 'Lala\\Test\\ClassMapMainTest' => $baseDir . '/src/Lala/Test/ClassMapMainTest.php', ); composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_classmap2.php000066400000000000000000000003241267577262200300700ustar00rootroot00000000000000 $baseDir . '/composersrc/foo.php', ); composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_classmap3.php000066400000000000000000000003711267577262200300730ustar00rootroot00000000000000 $vendorDir . '/composersrc/foo.php', 'Main\\Foo' => $vendorDir . '/src/Main/Foo.php', ); composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_classmap4.php000066400000000000000000000004571267577262200301010ustar00rootroot00000000000000 $vendorDir . '/b/b/src/b.php', 'ClassMapBaz' => $vendorDir . '/b/b/lib/c.php', 'ClassMapFoo' => $vendorDir . '/a/a/src/a.php', ); composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_classmap5.php000066400000000000000000000004611267577262200300750ustar00rootroot00000000000000 $vendorDir . '/b/b/test.php', 'ClassMapBaz' => $vendorDir . '/c/c/foo/test.php', 'ClassMapFoo' => $vendorDir . '/a/a/src/a.php', ); composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_classmap6.php000066400000000000000000000003731267577262200301000ustar00rootroot00000000000000 $baseDir . '/lib/rootbar.php', 'ClassMapFoo' => $baseDir . '/src/rootfoo.php', ); composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_classmap7.php000066400000000000000000000003221267577262200300730ustar00rootroot00000000000000 $baseDir . '/src/Main/ClassMain.php', ); composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_classmap8.php000066400000000000000000000005111267577262200300740ustar00rootroot00000000000000 $vendorDir . '/b/b/ClassMapBar.php', 'ClassMapBaz' => $vendorDir . '/c/c/foo/ClassMapBaz.php', 'ClassMapFoo' => $vendorDir . '/a/a/src/ClassMapFoo.php', ); composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_files.php000066400000000000000000000004221267577262200273040ustar00rootroot00000000000000 $baseDir . '/foo.php', '524f65941cc9a0fa65ff0ec097ccde8a' => $baseDir . '/bar.php', ); composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_files2.php000066400000000000000000000003321267577262200273660ustar00rootroot00000000000000 $baseDir . '/devfiles/foo.php', ); composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_files_files_by_dependency.php000066400000000000000000000005431267577262200333620ustar00rootroot00000000000000 $vendorDir . '/a/a/test.php', 'e56cac94f86c787e1efd645809df361d' => $vendorDir . '/b/b/test2.php', 'df8470dfa2ebd6b31da05b60fb4ec29a' => $vendorDir . '/c/c/foo/bar/test3.php', '68f1e24e6cd39de885cb5a47678e6518' => $vendorDir . '/c/c/foo/bar/test4.php', '61b776fd0ee84fb7d7d958ae46118ded' => $baseDir . '/root.php', ); autoload_files_functions_with_removed_extra.php000066400000000000000000000003221267577262200352730ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures $baseDir . '/root.php', ); composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_files_target_dir.php000066400000000000000000000004221267577262200315100ustar00rootroot00000000000000 $baseDir . '/foo.php', 'f558c96fbd0535aaa98981fa59ff7594' => $baseDir . '/bar.php', ); composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_functions.php000066400000000000000000000002441267577262200302140ustar00rootroot00000000000000 array($baseDir . '/src'), 'Lala' => array($baseDir . '/src', $baseDir . '/lib'), ); composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_main2.php000066400000000000000000000003561267577262200272160ustar00rootroot00000000000000 array($baseDir . '/src'), 'Lala' => array($baseDir . '/src'), ); composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_main3.php000066400000000000000000000003401267577262200272100ustar00rootroot00000000000000 array($vendorDir . '/src'), 'Lala' => array($vendorDir . '/src'), ); composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_main4.php000066400000000000000000000002751267577262200272200ustar00rootroot00000000000000 array($baseDir . '/src'), ); composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_main5.php000066400000000000000000000003221267577262200272120ustar00rootroot00000000000000 array($baseDir . '/src', $baseDir . '/tests'), ); composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_psr4.php000066400000000000000000000004231267577262200270730ustar00rootroot00000000000000 array($baseDir . '/src-fruit'), 'Acme\\Cake\\' => array($baseDir . '/src-cake', $baseDir . '/lib-cake'), ); composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_psr4_2.php000066400000000000000000000004341267577262200273160ustar00rootroot00000000000000 array($baseDir . '/src-fruit'), 'Acme\\Cake\\' => array($baseDir . '/src-cake', $baseDir . '/lib-cake'), ); composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_psr4_3.php000066400000000000000000000004201267577262200273120ustar00rootroot00000000000000 array($vendorDir . '/src-fruit'), 'Acme\\Cake\\' => array($vendorDir . '/src-cake', $vendorDir . '/lib-cake'), ); composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_real_files_by_dependency.php000066400000000000000000000032731267577262200332060ustar00rootroot00000000000000 $path) { $loader->set($namespace, $path); } $map = require __DIR__ . '/autoload_psr4.php'; foreach ($map as $namespace => $path) { $loader->setPsr4($namespace, $path); } $classMap = require __DIR__ . '/autoload_classmap.php'; if ($classMap) { $loader->addClassMap($classMap); } $loader->register(true); $includeFiles = require __DIR__ . '/autoload_files.php'; foreach ($includeFiles as $fileIdentifier => $file) { composerRequireFilesAutoloadOrder($fileIdentifier, $file); } return $loader; } } function composerRequireFilesAutoloadOrder($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { require $file; $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; } } composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_real_functions.php000066400000000000000000000032421267577262200312200ustar00rootroot00000000000000 $path) { $loader->set($namespace, $path); } $map = require __DIR__ . '/autoload_psr4.php'; foreach ($map as $namespace => $path) { $loader->setPsr4($namespace, $path); } $classMap = require __DIR__ . '/autoload_classmap.php'; if ($classMap) { $loader->addClassMap($classMap); } $loader->register(true); $includeFiles = require __DIR__ . '/autoload_files.php'; foreach ($includeFiles as $fileIdentifier => $file) { composerRequireFilesAutoload($fileIdentifier, $file); } return $loader; } } function composerRequireFilesAutoload($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { require $file; $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; } } autoload_real_functions_with_include_paths.php000066400000000000000000000035311267577262200350770ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures $path) { $loader->set($namespace, $path); } $map = require __DIR__ . '/autoload_psr4.php'; foreach ($map as $namespace => $path) { $loader->setPsr4($namespace, $path); } $classMap = require __DIR__ . '/autoload_classmap.php'; if ($classMap) { $loader->addClassMap($classMap); } $loader->register(true); $includeFiles = require __DIR__ . '/autoload_files.php'; foreach ($includeFiles as $fileIdentifier => $file) { composerRequireFilesAutoload($fileIdentifier, $file); } return $loader; } } function composerRequireFilesAutoload($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { require $file; $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; } } autoload_real_functions_with_removed_include_paths_and_autolad_files.php000066400000000000000000000023451267577262200423370ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures $path) { $loader->set($namespace, $path); } $map = require __DIR__ . '/autoload_psr4.php'; foreach ($map as $namespace => $path) { $loader->setPsr4($namespace, $path); } $classMap = require __DIR__ . '/autoload_classmap.php'; if ($classMap) { $loader->addClassMap($classMap); } $loader->register(true); return $loader; } } composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_real_include_path.php000066400000000000000000000036161267577262200316540ustar00rootroot00000000000000 $path) { $loader->set($namespace, $path); } $map = require __DIR__ . '/autoload_psr4.php'; foreach ($map as $namespace => $path) { $loader->setPsr4($namespace, $path); } $classMap = require __DIR__ . '/autoload_classmap.php'; if ($classMap) { $loader->addClassMap($classMap); } $loader->setUseIncludePath(true); spl_autoload_register(array('ComposerAutoloaderInitIncludePath', 'autoload'), true, true); $loader->register(true); return $loader; } public static function autoload($class) { $dir = dirname(dirname(__DIR__)) . '/'; $prefixes = array('Main\\Foo', 'Main\\Bar'); foreach ($prefixes as $prefix) { if (0 !== strpos($class, $prefix)) { continue; } $path = $dir . implode('/', array_slice(explode('\\', $class), 2)).'.php'; if (!$path = stream_resolve_include_path($path)) { return false; } require $path; return true; } } } composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_real_target_dir.php000066400000000000000000000044211267577262200313340ustar00rootroot00000000000000 $path) { $loader->set($namespace, $path); } $map = require __DIR__ . '/autoload_psr4.php'; foreach ($map as $namespace => $path) { $loader->setPsr4($namespace, $path); } $classMap = require __DIR__ . '/autoload_classmap.php'; if ($classMap) { $loader->addClassMap($classMap); } spl_autoload_register(array('ComposerAutoloaderInitTargetDir', 'autoload'), true, true); $loader->register(true); $includeFiles = require __DIR__ . '/autoload_files.php'; foreach ($includeFiles as $fileIdentifier => $file) { composerRequireTargetDir($fileIdentifier, $file); } return $loader; } public static function autoload($class) { $dir = dirname(dirname(__DIR__)) . '/'; $prefixes = array('Main\\Foo', 'Main\\Bar'); foreach ($prefixes as $prefix) { if (0 !== strpos($class, $prefix)) { continue; } $path = $dir . implode('/', array_slice(explode('\\', $class), 2)).'.php'; if (!$path = stream_resolve_include_path($path)) { return false; } require $path; return true; } } } function composerRequireTargetDir($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { require $file; $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; } } composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/autoload_target_dir.php000066400000000000000000000002401267577262200303240ustar00rootroot00000000000000 array($vendorDir . '/b/b/src'), 'A\\B' => array($vendorDir . '/a/a/lib'), 'A' => array($vendorDir . '/a/a/src'), ); composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/beta/000077500000000000000000000000001267577262200245165ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/beta/NamespaceCollision/000077500000000000000000000000001267577262200302665ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/beta/NamespaceCollision/A/000077500000000000000000000000001267577262200304465ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/beta/NamespaceCollision/A/B/000077500000000000000000000000001267577262200306275ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/beta/NamespaceCollision/A/B/Bar.php000066400000000000000000000001321267577262200320400ustar00rootroot00000000000000 public function a1() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a2() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a3() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a4() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a5() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a6() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a7() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a8() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a9() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a10() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a11() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a12() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a13() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a14() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a15() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a16() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a17() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a18() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a19() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a20() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a21() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a22() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a23() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a24() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a25() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a26() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a27() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a28() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a29() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a30() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a31() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a32() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a33() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a34() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a35() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a36() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a37() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a38() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a39() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a40() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a41() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a42() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a43() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a44() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a45() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a46() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a47() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a48() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a49() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a50() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a51() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a52() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a53() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a54() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a55() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a56() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a57() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a58() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a59() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a60() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a61() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a62() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a63() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a64() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a65() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a66() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a67() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a68() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a69() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a70() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a71() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a72() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a73() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a74() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a75() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a76() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a77() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a78() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a79() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a80() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a81() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a82() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a83() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a84() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a85() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a86() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a87() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a88() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a89() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a90() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a91() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a92() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a93() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a94() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a95() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a96() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a97() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a98() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a99() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a100() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a101() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a102() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a103() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a104() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a105() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a106() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a107() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a108() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a109() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a110() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a111() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a112() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a113() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a114() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a115() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a116() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a117() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a118() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a119() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a120() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a121() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a122() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a123() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a124() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a125() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a126() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a127() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a128() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a129() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a130() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a131() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a132() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a133() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a134() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a135() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a136() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a137() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a138() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a139() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a140() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a141() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a142() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a143() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a144() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a145() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a146() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a147() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a148() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a149() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a150() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a151() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a152() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a153() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a154() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a155() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a156() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a157() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a158() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a159() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a160() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a161() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a162() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a163() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a164() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a165() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a166() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a167() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a168() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a169() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a170() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a171() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a172() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a173() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a174() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a175() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a176() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a177() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a178() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a179() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a180() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a181() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a182() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a183() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a184() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a185() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a186() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a187() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a188() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a189() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a190() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a191() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a192() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a193() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a194() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a195() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a196() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a197() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a198() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a199() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a200() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a201() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a202() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a203() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a204() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a205() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a206() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a207() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a208() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a209() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a210() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a211() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a212() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a213() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a214() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a215() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a216() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a217() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a218() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a219() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a220() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a221() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a222() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a223() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a224() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a225() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a226() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a227() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a228() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a229() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a230() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a231() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a232() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a233() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a234() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a235() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a236() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a237() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a238() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a239() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a240() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a241() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a242() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a243() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a244() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a245() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a246() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a247() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a248() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a249() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a250() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a251() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a252() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a253() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a254() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a255() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a256() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a257() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a258() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a259() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a260() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a261() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a262() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a263() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a264() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a265() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a266() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a267() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a268() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a269() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a270() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a271() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a272() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a273() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a274() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a275() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a276() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a277() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a278() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a279() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a280() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a281() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a282() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a283() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a284() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a285() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a286() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a287() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a288() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a289() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a290() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a291() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a292() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a293() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a294() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a295() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a296() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a297() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a298() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a299() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a300() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a301() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a302() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a303() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a304() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a305() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a306() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a307() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a308() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a309() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a310() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a311() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a312() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a313() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a314() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a315() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a316() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a317() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a318() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a319() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a320() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a321() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a322() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a323() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a324() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a325() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a326() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a327() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a328() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a329() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a330() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a331() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a332() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a333() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a334() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a335() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a336() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a337() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a338() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a339() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a340() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a341() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a342() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a343() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a344() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a345() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a346() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a347() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a348() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a349() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a350() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a351() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a352() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a353() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a354() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a355() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a356() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a357() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a358() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a359() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a360() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a361() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a362() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a363() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a364() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a365() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a366() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a367() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a368() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a369() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a370() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a371() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a372() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a373() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a374() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a375() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a376() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a377() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a378() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a379() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a380() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a381() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a382() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a383() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a384() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a385() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a386() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a387() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a388() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a389() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a390() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a391() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a392() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a393() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a394() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a395() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a396() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a397() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a398() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a399() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a400() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a401() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a402() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a403() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a404() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a405() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a406() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a407() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a408() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a409() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a410() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a411() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a412() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a413() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a414() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a415() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a416() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a417() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a418() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a419() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a420() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a421() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a422() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a423() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a424() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a425() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a426() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a427() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a428() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a429() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a430() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a431() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a432() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a433() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a434() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a435() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a436() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a437() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a438() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a439() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a440() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a441() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a442() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a443() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a444() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a445() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a446() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a447() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a448() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a449() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a450() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a451() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a452() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a453() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a454() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a455() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a456() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a457() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a458() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a459() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a460() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a461() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a462() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a463() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a464() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a465() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a466() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a467() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a468() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a469() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a470() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a471() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a472() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a473() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a474() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a475() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a476() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a477() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a478() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a479() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a480() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a481() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a482() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a483() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a484() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a485() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a486() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a487() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a488() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a489() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a490() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a491() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a492() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a493() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a494() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a495() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a496() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a497() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a498() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a499() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a500() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a501() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a502() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a503() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a504() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a505() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a506() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a507() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a508() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a509() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a510() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a511() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a512() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a513() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a514() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a515() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a516() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a517() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a518() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a519() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a520() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a521() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a522() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a523() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a524() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a525() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a526() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a527() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a528() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a529() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a530() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a531() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a532() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a533() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a534() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a535() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a536() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a537() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a538() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a539() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a540() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a541() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a542() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a543() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a544() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a545() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a546() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a547() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a548() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a549() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a550() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a551() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a552() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a553() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a554() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a555() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a556() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a557() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a558() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a559() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a560() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a561() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a562() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a563() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a564() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a565() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a566() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a567() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a568() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a569() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a570() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a571() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a572() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a573() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a574() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a575() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a576() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a577() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a578() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a579() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a580() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a581() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a582() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a583() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a584() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a585() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a586() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a587() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a588() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a589() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a590() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a591() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a592() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a593() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a594() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a595() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a596() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a597() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a598() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a599() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a600() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a601() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a602() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a603() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a604() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a605() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a606() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a607() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a608() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a609() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a610() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a611() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a612() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a613() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a614() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a615() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a616() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a617() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a618() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a619() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a620() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a621() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a622() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a623() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a624() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a625() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a626() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a627() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a628() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a629() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a630() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a631() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a632() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a633() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a634() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a635() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a636() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a637() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a638() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a639() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a640() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a641() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a642() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a643() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a644() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a645() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a646() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a647() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a648() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a649() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a650() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a651() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a652() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a653() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a654() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a655() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a656() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a657() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a658() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a659() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a660() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a661() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a662() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a663() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a664() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a665() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a666() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a667() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a668() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a669() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a670() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a671() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a672() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a673() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a674() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a675() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a676() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a677() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a678() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a679() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a680() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a681() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a682() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a683() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a684() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a685() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a686() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a687() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a688() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a689() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a690() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a691() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a692() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a693() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a694() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a695() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a696() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a697() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a698() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a699() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a700() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a701() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a702() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a703() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a704() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a705() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a706() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a707() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a708() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a709() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a710() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a711() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a712() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a713() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a714() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a715() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a716() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a717() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a718() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a719() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a720() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a721() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a722() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a723() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a724() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a725() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a726() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a727() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a728() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a729() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a730() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a731() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a732() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a733() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a734() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a735() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a736() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a737() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a738() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a739() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a740() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a741() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a742() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a743() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a744() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a745() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a746() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a747() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a748() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a749() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a750() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a751() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a752() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a753() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a754() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a755() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a756() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a757() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a758() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a759() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a760() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a761() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a762() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a763() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a764() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a765() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a766() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a767() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a768() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a769() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a770() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a771() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a772() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a773() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a774() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a775() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a776() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a777() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a778() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a779() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a780() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a781() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a782() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a783() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a784() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a785() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a786() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a787() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a788() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a789() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a790() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a791() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a792() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a793() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a794() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a795() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a796() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a797() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a798() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a799() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a800() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a801() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a802() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a803() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a804() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a805() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a806() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a807() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a808() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a809() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a810() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a811() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a812() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a813() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a814() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a815() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a816() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a817() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a818() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a819() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a820() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a821() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a822() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a823() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a824() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a825() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a826() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a827() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a828() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a829() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a830() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a831() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a832() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a833() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a834() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a835() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a836() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a837() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a838() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a839() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a840() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a841() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a842() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a843() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a844() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a845() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a846() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a847() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a848() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a849() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a850() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a851() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a852() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a853() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a854() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a855() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a856() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a857() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a858() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a859() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a860() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a861() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a862() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a863() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a864() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a865() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a866() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a867() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a868() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a869() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a870() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a871() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a872() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a873() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a874() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a875() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a876() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a877() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a878() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a879() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a880() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a881() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a882() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a883() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a884() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a885() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a886() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a887() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a888() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a889() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a890() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a891() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a892() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a893() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a894() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a895() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a896() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a897() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a898() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a899() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a900() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a901() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a902() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a903() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a904() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a905() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a906() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a907() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a908() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a909() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a910() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a911() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a912() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a913() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a914() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a915() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a916() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a917() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a918() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a919() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a920() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a921() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a922() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a923() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a924() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a925() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a926() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a927() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a928() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a929() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a930() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a931() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a932() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a933() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a934() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a935() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a936() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a937() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a938() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a939() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a940() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a941() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a942() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a943() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a944() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a945() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a946() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a947() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a948() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a949() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a950() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a951() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a952() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a953() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a954() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a955() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a956() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a957() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a958() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a959() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a960() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a961() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a962() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a963() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a964() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a965() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a966() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a967() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a968() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a969() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a970() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a971() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a972() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a973() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a974() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a975() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a976() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a977() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a978() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a979() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a980() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a981() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a982() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a983() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a984() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a985() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a986() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a987() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a988() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a989() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a990() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a991() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a992() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a993() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a994() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a995() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a996() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a997() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a998() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a999() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1000() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1001() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1002() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1003() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1004() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1005() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1006() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1007() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1008() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1009() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1010() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1011() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1012() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1013() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1014() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1015() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1016() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1017() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1018() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1019() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1020() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1021() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1022() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1023() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1024() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1025() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1026() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1027() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1028() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1029() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1030() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1031() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1032() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1033() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1034() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1035() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1036() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1037() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1038() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1039() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1040() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1041() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1042() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1043() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1044() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1045() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1046() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1047() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1048() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1049() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1050() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1051() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1052() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1053() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1054() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1055() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1056() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1057() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1058() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1059() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1060() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1061() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1062() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1063() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1064() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1065() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1066() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1067() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1068() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1069() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1070() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1071() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1072() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1073() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1074() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1075() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1076() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1077() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1078() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1079() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1080() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1081() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1082() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1083() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1084() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1085() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1086() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1087() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1088() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1089() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1090() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1091() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1092() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1093() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1094() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1095() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1096() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1097() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1098() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1099() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1100() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1101() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1102() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1103() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1104() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1105() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1106() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1107() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1108() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1109() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1110() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1111() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1112() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1113() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1114() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1115() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1116() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1117() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1118() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1119() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1120() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1121() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1122() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1123() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1124() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1125() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1126() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1127() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1128() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1129() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1130() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1131() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1132() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1133() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1134() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1135() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1136() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1137() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1138() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1139() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1140() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1141() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1142() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1143() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1144() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1145() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1146() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1147() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1148() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1149() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1150() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1151() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1152() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1153() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1154() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1155() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1156() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1157() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1158() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1159() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1160() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1161() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1162() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1163() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1164() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1165() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1166() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1167() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1168() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1169() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1170() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1171() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1172() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1173() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1174() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1175() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1176() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1177() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1178() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1179() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1180() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1181() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1182() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1183() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1184() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1185() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1186() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1187() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1188() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1189() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1190() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1191() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1192() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1193() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1194() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1195() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1196() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1197() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1198() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1199() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1200() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1201() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1202() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1203() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1204() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1205() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1206() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1207() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1208() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1209() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1210() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1211() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1212() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1213() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1214() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1215() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1216() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1217() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1218() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1219() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1220() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1221() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1222() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1223() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1224() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1225() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1226() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1227() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1228() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1229() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1230() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1231() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1232() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1233() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1234() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1235() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1236() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1237() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1238() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1239() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1240() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1241() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1242() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1243() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1244() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1245() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1246() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1247() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1248() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1249() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1250() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1251() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1252() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1253() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1254() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1255() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1256() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1257() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1258() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1259() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1260() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1261() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1262() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1263() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1264() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1265() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1266() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1267() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1268() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1269() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1270() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1271() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1272() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1273() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1274() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1275() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1276() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1277() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1278() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1279() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1280() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1281() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1282() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1283() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1284() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1285() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1286() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1287() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1288() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1289() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1290() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1291() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1292() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1293() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1294() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1295() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1296() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1297() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1298() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1299() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1300() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1301() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1302() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1303() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1304() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1305() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1306() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1307() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1308() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1309() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1310() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1311() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1312() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1313() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1314() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1315() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1316() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1317() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1318() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1319() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1320() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1321() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1322() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1323() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1324() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1325() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1326() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1327() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1328() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1329() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1330() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1331() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1332() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1333() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1334() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1335() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1336() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1337() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1338() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1339() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1340() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1341() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1342() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1343() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1344() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1345() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1346() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1347() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1348() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1349() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1350() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1351() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1352() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1353() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1354() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1355() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1356() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1357() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1358() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1359() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1360() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1361() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1362() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1363() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1364() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1365() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1366() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1367() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1368() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1369() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1370() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1371() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1372() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1373() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1374() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1375() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1376() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1377() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1378() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } public function a1379() { var_dump(var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null), var_dump(null)); } '[{"event":"inbound","ts":1387553749,"msg":{"raw_msg":"Received: from mout.gmx.net (mout.gmx.net [212.227.17.20])\\n\\tby ip-10-246-30-150 (Postfix) with ESMTP id 8FF124A85D1\\n\\tfor ; Fri, 20 Dec 2013 15:35:45 +0000 (UTC)\\nReceived: from [192.168.1.2] ([109.193.141.200]) by mail.gmx.com (mrgmx001)\\n with ESMTPSA (Nemesis) id 0Lu7a2-1VT7Xf1Llu-011VKV for ;\\n Fri, 20 Dec 2013 16:35:44 +0100\\nMessage-ID: <52B463C8.1050305@gmx.ch>\\nDate: Fri, 20 Dec 2013 16:35:36 +0100\\nFrom: =?ISO-8859-1?Q?S=E9bastien_Fauvel?= \\nUser-Agent: Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:24.0) Gecko\\/20100101 Thunderbird\\/24.2.0\\nMIME-Version: 1.0\\nTo: info@i-pricing.com\\nSubject: =?ISO-8859-1?Q?T=E4st_html?=\\nContent-Type: multipart\\/mixed;\\n boundary=\\"------------030503000903030801000206\\"\\nX-Provags-ID: V03:K0:Zltmfhaftibnf1sBCmiQxKk3ZnXy0nx6ak5vzohG81fRwilXnUR\\n wvkN9f2AOHZ7gjmHvTvn1csqspqOKbNS+1klVbnZaJUbnrT9J+WFv4clIFAfRawYCvy8GGE\\n JhRt1h81gOGQ761rx4+rUbUcYfh+2XcD0w4Us6yrCsF\\/Gw6nv5z5puhgW9j1Ad5WWaKkd\\/f\\n m\\/nL5VYAUoqLjvBs+Jbgg==\\n\\nThis is a multi-part message in MIME format.\\n--------------030503000903030801000206\\nContent-Type: multipart\\/alternative;\\n boundary=\\"------------050101030504090308030704\\"\\n\\n\\n--------------050101030504090308030704\\nContent-Type: text\\/plain; charset=utf-8; format=flowed\\nContent-Transfer-Encoding: 8bit\\n\\nT\\u00e4st\\n\\n * abc\\n * *def*\\n * *\\/ghi\\/*\\n\\nschlu\\u00df*\\/\\n\\nDiscountify\\nend\\n\\/*\\n\\n--------------050101030504090308030704\\nContent-Type: multipart\\/related;\\n boundary=\\"------------020800050700000706000908\\"\\n\\n\\n--------------020800050700000706000908\\nContent-Type: text\\/html; charset=utf-8\\nContent-Transfer-Encoding: 7bit\\n\\n\\n \\n\\n \\n <\\/head>\\n \\n Täst
\\n
    \\n
  • abc<\\/li>\\n
  • def<\\/b><\\/li>\\n
  • ghi<\\/i><\\/b><\\/li>\\n <\\/ul>\\n schluß
    \\n
    \\n \\"Discountify\\"
    \\n end
    \\n <\\/i><\\/b>\\n <\\/body>\\n<\\/html>\\n\\n--------------020800050700000706000908\\nContent-Type: image\\/png; x-mac-type=\\"0\\"; x-mac-creator=\\"0\\";\\n name=\\"discountify-card.png\\"\\nContent-Transfer-Encoding: base64\\nContent-ID: \\nContent-Disposition: inline;\\n filename=\\"discountify-card.png\\"\\n\\niVBORw0KGgoAAAANSUhEUgAAATYAAABkCAYAAAAMjRzhAAAABmJLR0QA\\/wD\\/AP+gvaeTAAAA\\nCXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH3QwUDCIHSDOifwAAACZpVFh0Q29tbWVudAAA\\nAAAAQ3JlYXRlZCB3aXRoIEdJTVAgb24gYSBNYWOV5F9bAAAgAElEQVR42uy9aZxdVZX\\/\\/d17\\nn3PufOvWnFRVKhMhA0kIMg9qVHCEdkZRVBS06W611W5pbe2\\/sy2KorZDN43d6qPtgIIiIIIT\\nKDIEkhAyz6lKpSqVGm\\/d6Ux7\\/1+cW\\/fWJcGgT0Cefmp9PvdFcm\\/tc85ee6\\/9W2v91jriwn9s\\nNszKrMzKrPwvEkuI2UmYlVmZlf9lho1ZyzYrszIrs4htVmZlVmblGY\\/YZidhVmZlVv63IbbZ\\nOZiVWZmVWVd0VmZlVmZl1hWdlVmZlVl5uhHbrGWblVmZlVnENiuzMiuz8kxHbM\\/MGzPGIAAD\\nCAQ6lOhAgjaEriFR6CBuKdxKmXRGIYRLPB6iwzKKEN8LyedDgs4YoTJoCcqeHg9m+XuzMiuz\\niO1psmY1S4YuGZzQxu+XxHoV9uhcYm6StpzGkXlaspAUAiuXAulTKBTJWJJk2iLhpJDSQVlx\\nAuMwOaUZNwFHSuP05ctMJDWqKboUTFu6WZmVWfnfg9ieIbvaYMAHa0DR4cfpyKZIVEokcoK2\\neBrVPUHCGSEmPRypsWSAtAShthAyhmhrwZIxhFAoFEJYGGFAGTqTEAiFkG0YJRmZ0hzxYjw6\\nNEG\\/GUE0G8SsdZuVWZlFbCfS5dSTFqlCnG7XYmFOkbVCYtLFabWwYxrHniRmeyRsQVxK4lYc\\nISL3EplAY2NkHCFsQEVGSoDRgtAYQgPaGHQI+NDraLqSHsvbc4y6rWw94rLp8CHK7W7koc66\\nqbMyK\\/8fR2x\\/wT2sJxXxwRxzrGZak+N0tk3RGvdIK0HSTiBSGismcKwEjspiCY0SPrYKkZYG\\npdBKgogRCgch4ijh4Ac+SkXGLfADjNEEoSYIA8LAEAYGY1ykF9Aqbc7vSHJu50p2DuZ5oDjI\\nmDOFsCVCzi6QWZmVWcT25HxOdMVCHoqxkGbaUiXmNhXIJSQZJ0nKiePYEifmoJSPNB5al9Ce\\nTygNRoJwbCyZRMoUloyjlY1SDkZIEAGW0ugwwLYsYrZNEARgBGhFYDRu6OK6ksBVaC3wgjKj\\nY0Msam1hUec8do9U+M3Bg\\/g9QXTPswBuVmZlFrE9gT1D+wbZn6az0k5TbIIF7RU64xUyMUHG\\naSbjuAgFrvQpBy7GVdhGEZopwEWJEG2liFtpUiSQMo42MaamPLLNTSgpQYCjDFJrgtBDodF4\\ngAcCLAJsBzKOg+toihWBloKB4RFWtDTjeIc4Kd3EvBWn8\\/uDfWyLDaASs9BtVv7\\/LeaJujaK\\nZ+a5Ly75RNtT22iyOro5rOk+0sbcuKY97dOaSpBOpsklK+gEiCCDHRwmH\\/jkRY6xcZvdA3nm\\nZPKct8JBVnwcqYjlLKRMIq0MoRMjFs\\/ga4XlxEFopNIIXUaERYQAowMqlRJKCiwl0SZKFNiW\\nwhhBxQ0JjM1k0cfzBGFg8D0XPwwJrCQHJhP8rnCAUrZSpYk8U1fejAVo\\/shCPNaiFDPCiuL4\\n1zEAup5VbhhjFt0+I9fFUbp9sno0YHS0now2DetKSBBSIJ6Bun9qKw+MQWtQ2zTzXejpKNCW\\nSDInmSKdyBGmBYUACmMVsokxXAQP9GW4eZONl1xAGChyepBkYpiVbXmmUj1MHT7I6nkOQjko\\n20GgAAslEriuR9+BA8ScCrbKk2tKk5+aJJWM4aRiSAVKGoLAJzAaKSTJlE2pUqEprah4Bi+Q\\nVMoh0tMQTNGmSlw6Zxn37t3LvrY8WJEyn3knqsFoCAPDvJZFaB0t2ieSklfkyOQQUoFQAqVE\\ndaHyxAkUYyLkHUDGyZFNNANQdPNMVkYR1ixH8JkEsbSmwWrNVOuT0aOpGrXAM7Sl5nLe8rUk\\n4xkwBi\\/wmCiOsXtoKwfH96IsnlGJN+upPCq0D3Kz5Fkqgd2hcHKGVEsX6\\/cI3HiG0d0HyJTH\\nec6pTcTMGIOmix9un09p\\/hpaQo944jArMxnmtQwzRjefv3mYUxbHWLE4iaMFRlj42uAoGx0G\\nEIa05ZrIZnNgbEId0NKcwxgfKQ2WpdGECCtECTBhicA3JGwHXwgcJXH9KPBYEhKpNI4KmBjb\\nwnM6srSXe7hvZD\\/OXOsZt3kNEPiG5624mPe\\/9r3HB2siTqAtJgoTbNr7CL\\/f\\/Cvu2\\/5LrJhE\\nWiAxx3xGHYJf1nzpnTfSkcsBMDAyzJVfej2OlAhr1qb8pVeC0ZFBCn1DZ1MPb77war5y26fx\\ndBmhnpwekdEYXkVz6flXcsWFr4fKPRCOARJkFmGtYty9jMs+exkiJVHPLMT21OwyoyG9w2Zx\\nvI3mhKbFSSCTHfz44QobBpqxHRtdnsvLlseIJ1xUxcIzNiLZTRgkkfl1XLFakxV7SLRPYVHg\\n\\/7w2Tbq9mVAngThSWBijCXWZUAdgPOIJn8CrIJWPwGDCEKUEge8iERgBU4Uy2XQMWyjcoEKg\\nwQ8k2oAwhpiVQNsWSAHCJ9ecYWx0jIUxh6S\\/lHvG9yFanzmvijAmQmdB2bAwNYTf\\/+InGYhw\\naLI6ee78M1i7\\/DVsH3oT1\\/7gXzhS7kc4AiEMMxG9MVGcNCVaaC5\\/AH9qPwDeeJKgAnYsggaz\\ngO0vuBZ0hMRCV\\/CG5\\/41lz7nZYjCN\\/nsVBmZADlt2P6IHq0YKBkhtRVzTueKC7oIB18OJjjq\\nekEpiV8x2InpA\\/N\\/qWEzpspN2zSPnImTyXhk0yGF7Bx+tE7SFy4ityRNZcojaU5i68A61iw7\\nwkkZRZc2nLuon98PZCipRfzwzrt563kp+vsnaW7P0N0qUYWAIF7CszQySGLFJPnCOGgXSYAl\\ndBRrExLbdgh8gRAhUlhgQowxxKWF9jQVHTJVMBwa8xkc0biBpiOr6JnjkE3HkH5IWUh84ZDK\\ntCCmDpOLH+RsZy73jx5EtcpnjCKnT9eV87J\\/wh95GL+f0O+HqVs4OXk2X\\/nbL\\/D+G\\/+Fvont\\n2DEBaob7YiJXd8W85RBuqA1z\\/7Y8OjS1hT1r2P5SayDiahrP4hvv\\/RGdzu8Jh99IoQLlYkAq\\nVvUx9fH0aDBa4FcMLzttFeHY554wrvHInjJUyx+fSRTQE\\/vOA2PQgWL8sR6y9HCoNEV3dytj\\npe0MDQ9wWms7b1s6QDo1ycFRg7Yy9DYFZEUZU7E4NFHm4MEypYkRMmaCdNxjw8gwBJrsoYDd\\nE2VyrYKOXDNtTZqYKkAlwJIBApAIhJEIYai4JXzXw2iQUhCPRbw07VfQQUjJ00wWAh7b61JJ\\nXcCr\\/uY6EAJbGtb\\/+PU0Z\\/K0pCRFJZgyEpFIYIsO3PIEKX+SpZWlbBvZj93u8xfvkGIMOjTI\\n0Ka3dRLCP28YXX6QuPdOPv3mj3Hll67BD6ewlIkCb9X4GsCczHjD6T0wEUdaJYRiluD8l3VC\\nCX3DkrZTaPc+QFjcDcD63UTxtqr1Oa4eBejQEFYEz5o3FJ2aVRnPazYfCJnbKpnfqdh12MeK\\nyUj38plzqp0wxBZlSwRT\\/V1MectAFlnUO4+frd\\/FWYsynHdyio54Hq2SGG1zSusEsdBn\\/8QY\\ngSPJCIsxP8umvYYpdZAXXHAaLzrnZaw+bQ2ZbAtCKCYnjrD90T+wddO9hLu3sqhT0dokSCch\\nYQmkUgR+iOMIbGlhtMQYQ+AF5F0fO2YhhKJUCRga1zy8vcKKtR\\/g5W94P1JGlI4ND9zO5NgA\\nqjNOTIaohI0ykokAgniawT3j6OYmAqlIF5bjtW4Bpf+i+jQmipks6V6GbfbX3YTQ4fJPjhHL\\nSCy7Gj02kYfdlhV05QRnLVGcvbweGDPhGJnKp7jsOW\\/iG7\\/+CkpJhDQgogNCWoLJwjZGpxRa\\ng5Sw8WABJ6GQKlrYM+fCHDM9++e5qydqrBN5T0+9bs2Tus\\/pbHjoGk5qT2H8LbXvtg8IlCWQ\\nCqQQGMkf1aOQgtAz9LYtJi031w7K8SnBJR8tYRISOy5w4oJEWuIkZZUQL55BiO0EiQ4FfQ8u\\npFDswU3FiXklDh0O8Zw2VvUaLDnBVGhBUCDXZCGEha8lbdlW+keGGCpZ7Ng\\/xnuueCVvveLt\\ntDQ3H3WNuV3zWLbiWXDZO9ny6EPc\\/M2Pkxrew+JuaMsJkk6ELELfoKTBUpErpUMIjKJUMAyP\\nltg7WGFML+Y17\\/oSp5x6Xm183\\/e4+6aPcN6iOBIJBNiWxnE8EknJVBlamhdy+7ZJek9ajC5J\\nOounczi9DtRf9qTWgWFpVxPo3bX\\/339YcqAiyGYklpTTwAsMHJwwPHzY8MN1Hmf1elz7tiRW\\n9RlMMMRLVhX47q+zhGEBaVcPYgnKFtyzX3PXZg\\/tg3IgnlE4cYGczqhianE\\/bUwjpUDUx6rT\\nTMQff7pjjFWjJlTHQXKcet8\\/5Z7EHx\\/j8RQK8UTXPvbv68\\/8xN8\\/\\/l553PNGVTGipn+qh5vv\\nGk7ubITsuwajAyn6G4MQx9ZjLC1xEtH9BL5h2fwOCB+pjfPzdT4qK0m1qyhMIUEpgbIA0UAa\\nOe78NejwKeBRnTDENrUtw+h4jmQ8hz6sCdpa2Z2fwpss8t+\\/zaO0ojK5n3e+cTktYoyYCSgq\\nQ6GYZ2isjGut4SNf+y865857Utc75dSzWHbdT\\/nFrd\\/mV7dcx5xMnt4Oh2zSQkkP2wYdFgFB\\npaIZzfv0D\\/t4zhLWvvw9POeiS1Gq0Rr98mffoDN+kM5cEkeGCAFhELm5tvTI2AE9J0sunrea\\nn\\/1mgoVz0wwd8rHoJVze9xc5rWondQCLO7yGXfLgzgKpZkWy2cKKN1CTok2jIZ7VrD8S8rHv\\nVvjEm+O1v415P+Ocpedy7+67okUs6otRWYJYMkK4liOw4gLLjjaOqWblQt8QeoY1C8+hu6UX\\nx4phMJS9EvsP72Ln4GNIJ0ISQhrksTKwuk5hCT3Dqvln0tu2iJgdR5uQqfIkG\\/c9xHhpGOUI\\npIqSHQ2IsRp7qt2TPz3OQhwrBkJQrOR5bP8jDOUPYjlRgD2ivYgG5BQF5g1hEM2dEKCsyEgg\\nzTF\\/H\\/gGHUR6kjL6vbQECA1G1MYzOrqmrCbcdQihZzh32fPpyM3FkhYVr8SDO+9lvDIczZuK\\nkLQJo2fzSppyXnPKvPiM+1A8uHWSRKdF6Msa3+zxepQ2WLbAhILA01TymoWtjetp16CDsPz6\\nYWIi3qcOozlQFqAMUv4RXc6YD6Gq81ddAycypHNCSqr8vMA+3It22imbBJ1dnZjKAIVyiGhZ\\nxY4wgVPYzsVnx5iXNaR8RTFU7MoPs7fPY+X5f89lb\\/3gUYbm8RKGYcNvlFK89JVv5QUvvYzf\\n3vUjNj98N3sf+B06mMSyDFob4skcvUvOpW3ByVz+jsuZv3DpsQ1zfoINv7qeFz0rRTalsKQg\\nCMFzK2itkb5HUsfxjGAeB0m0z2frVJnVrZ245TIDow663XvaDZuoJg5CT3PqgqaG7w5NxnES\\npZrhebyujYk2mRCCe\\/b4bNgVctqS6bTZFKvmlvj1FoNORe5r6BsuWPpirnntJ5k2c1\\/48Ue5\\nZ8dttbF1AH7Z8IqzL+cNz7uKlBpAeztBlyJXRTYhYlcwWUnyP7++kdvX\\/wArLhCWqfMDTbQR\\nwmp275IzLuN1z72CXGwc7W2pjiURag0i9j4e2rWJf7\\/jc4yUB7CcqkGqut1GR8YsIZq4dO2V\\nvPBZl5C2htHeNtCFyLVTKxDxv2Pv4VG+fvtn2T60ATsmImrEjNMgDAxLO07js1feUJvDb979\\nVW5e902s2OMMapX\\/9dI1r+fqi\\/+xupMFH\\/3Oe9nY\\/3ukOvZ47\\/y3N7Hr0FbedOHVvOqCN5Jk\\nB9rfC8ZDyCbe8ZJ3cMv9t\\/HNX30JOxFdM3Dhyue\\/j1ecf1mU4Dn8Fkx1KUpnHvf9z++QCHYd\\n2s57brwcIeA5y17MNZd+qqbH6276CL\\/c+DPe96qP8MLTL4nCG5M3oPObavf2iWt+CrINIeDr\\nP\\/kilz7vclqb2gDYfOBRPvCtq3ASxyhFqB6+ftnwdy\\/9EC858xW11fuZmz7IA3t+iZInFrT9\\nv0JsxkSnSuXhDHtKFYopmwW5kIoehlgT2aZOJvw4PiVOahvhxash6+WpeEkOlzWPbg+4+A2f\\n5SUvf\\/NxDdqP\\/+er3H7TV+jqXcq7P\\/gV5nbPr6OLWJwXXXI5L7rkcowxVCpltA6xLBvHiT2p\\nk+COH32eFQtC5rSnSSYFnu8ihcLgowMfSxlCH2SYIQa8YuUY39nSxe27DKd3hsSHcpTahp\\/2\\nwnlddUGSVpa5TUdgRkZ+\\/d4SKhW5iJGr9jijKEDYApMUJHKKe3fEOG1JfYDl3YrAMxHiEYKg\\nbJifGsPvO7fmSoX5BGEIypio7rakueZV\\/8pzT3IJRy\\/FD8eOed8pq5Orn\\/\\/XrFrwWT590\\/uJ\\npas8qKobFniGOakFfOztX6Qz\\/jB68ir84NAxRpKc3vZ8vnjV9VzzXx9ksLgHUTUyWkPgGnqb\\nlvHJt3yOrL4dPfa6J7yn3thpXPvm93Hj3Xdy6yPfxUlMoyswRhBUDIuakvh959cP9VGL0I+Q\\n6\\/ScTqNor2xYkj2Af6A+X+5EnNCP3MGgwlHj2eUuvv6uH7Ig8wj6yKvx9cTjlObw6jVXYYJ3\\n8617voyyBV5Zs7JlE37fV6ZXRX2P+vsJ+59NiKE8GMMvRSjvKD1OxKlMaVZk78Pv+8xMbF+P\\n2Q68vP7cRyTyyC\\/wJ\\/MAdJnVuAWNZasa6qwj5kif3ZmTuHDx\\/hnPaxgf8tChQDknlmEgawGG\\nP+cDFB\\/QNHkBZy\\/oYZnI85LsDtZ2bCVmduB4W1mTWcc5qYd45TJDuy5T0nH6vIB1+wZ51Vs+\\n\\/6SM2rUfvpzdv\\/8cLz5dcnLTHr5wzVpu\\/PKHmBg\\/eoEKIUgkkqRSGWKx+FFGbXRkhHK53BCU\\nHRzYR9\\/W77N0aRvJ1hZ0IolIZjBOhkpFIqRCSkPoBCBLqOAIXe4eXtXdh9+0iPUTpxNkVjN6\\nIF0PGjxdn6phWzpvKTKsJw7cIMZgIYxcRCWqKOboj6jGzey4YP+o0zBXudghdFB1wUKDVzas\\n7EpWl2tEa1+3PY8JI3pA4BpeuuZ1PHveQwSjn8I8gQGJ4niHCUY\\/zrldv+fV57wVv2Kq7ooh\\n8AztsV6ue+snouze6GcwxzRq0SbWxV+SzP8917zyatyiJgw0OjQErmF+03Kue+sHSE\\/9DeHk\\njX\\/8ntwNhENXctXa5ayZd37VqNeRn+9qFrf61WePPnsOaUxoZpQiiZor6ZU0y+bYtfkyCNbv\\nHI\\/mU3PUeIY4H3n7J+lVnyEcvx7zeKNWpeiE41\\/jktUeMZ0h9CMk3ZEcmnFfR+0iQLN+b5Ew\\nMARlzcruRj0+tHUS7Uta4v0zxjFHzfX0Z\\/sBn90D5dq\\/0\\/YoKkwQVmk\\/jevT4BY1b33Bq6D4\\n49rfbNgbsG6frocPTuC++LPfK2owuIcMiWFDc4tPWD5Mt\\/LpCYfJuRKjCpx6RguVMKStLUWz\\n8hFCMRoEbDlY4jkv\\/z+84KWXHfc637nh46ix37JmSZZcNo7vG1qSgu1bvsPHr1nP52+4AyEE\\nYRhSKZdJpdMNRnEqP85A3w42PvwLNm3awMiE4MZv\\/rTB4N36w0\\/xrDUtZNubIWGjjYOuuCgj\\nQOZx7ADP89BArFKgbMro0KEj2ceLWjdwy+Dz+cNwhrg7l1j2B2TavKepcWW0iMLAcFKnDaZS\\n+2Zbv8FyRBT4l38E5c8wbpOVGFCpbY64oyJeVLVWkECxsK1Y2zuuH2dwYpympIXW0eJ9zZkd\\n6MK\\/14afKGhu+UPAkSlDzILnrVKsXlTPWeniHbzm9L\\/hlvscQttDSAjLin958zUkp67BhEfq\\nKCGEP2wJ2Duk6W0XrF1tMx2ZMOERemPf58xFa9kwcA9SQZPVyb+++b2o8fdgdKE2TqliuH2d\\nT\\/+IQQm46DSLFfNVbfOGox\\/lb1\\/4Ya786h9QtkFVWfhBxXBKT6IhfvXwrjyxDificlfXlK5u\\n5qTK0J4arqHosak4Ja9ErprEefx40momXXp\\/7ZlH85rfbwmZKBguWKFY3F0Pw1il7zGveR67\\nxrYglWDPwS1kY4LO5gQx26397uCwxogobrh1MEAqQegpFraVHqfHEk5asu\\/QbhIWpOMWzZm6\\nkRzLQ6GsI8oUsKm\\/zKa9gjULq8tIH6G3bT6HvJ1gZqQ1TISa18w7lzO6H8WUgpq3928\\/97Fj\\nElVNTp3IHfPnx9hCqGwImZtyMLpEQm2hc24LoQqYyFucMS9NKhjhzvGlrAhGaO9OUXB9+o+M\\n09L9fF72yrce9xLrH\\/otm351Pc8+LUvC9rBEHCk1LSnBonab0UMj9Qzgvj28\\/dWnsvLkFjo6\\n2hDGpVQYIJPRNLdKjKWYmlB89BMPNRi1LY89QOg+QNf8dkzCwklnKBXHUIk0SsZoag+YGt1H\\nzLJxfE0llGgEgSwxpWKcPXc\\/G8cPsTE4mURQZvf2M1lzzn0I++mxa0aD9gxL5zZ+tWFvBSsu\\nozT\\/cQqURXVTHhX01SO1gnqjDYvmnIzNvtrXm\\/b7SDvKuBkNuVgHreKOOs3gQMjVXy8jMhZO\\nQqBD+NEjHufN9\\/nM2xI11yMV3MTJc1awc2wjxhhedvpr6bH+E+PWjdp9WwI+d6vHRChQdoQO\\nb7jL5\\/qr4nS1yiriepTlHefw0O7IF7zyNVcQn\\/pQg1H7xSM+X7jNJ3AkVkygQ8NNj7i88RzF\\n37wsVvtdh\\/w+Zyx6No8O3YtU0e+Sdpa21OGaoRotxHBNkaRdz6jWpi6AFb2nIMI67eKhnUUs\\nJ4rdGQ2ZWPOM8QQmGIjivWXD9T9xuXubxklItDZ89U6PT78hwYWnT1vyEm0p2DkqcBLwDz8K\\nGOvzufuza4lxb7RFjc3LPzpGsl2RzCmclEDZsCB3tB5VXBJLS971A5\\/8YMA\\/veZ8XnHmxtpv\\nPvNDwe\\/3VEhkJVYMZEox6TpANZhnKizsyHLwgKkFf42J5sEtat5x+UWY0rW18e58xKevCE1z\\nZDVj+wzJipb2BeRc0PGAioiTwafVAydpWN6Zx3ECTLyZ\\/r5WCuPDLO8uMVFQ7D2S4WMf\\/uxx\\n416e5\\/HFf30\\/LzillXRiEikUxSLYKg5hCEGAperxoKamJtYsljzv1BKdLcM0N4EdTyKTmjKa\\nDXsCzum+gnm9i2dkakJ+cednOe\\/cHMm5MdLxDnS5hIwJYnYzZS3RqRIJNZfC6CQVfxzfKqN8\\nRaxgKKbyGOPTmhjBFC+gEuwkUGczMbKJ1q7C02DXBEZrAt9wSk+y4buBCQc7Fp3QyOPgx6rh\\na0o3AXX3xwtiDUmBZYvaQNc3xGN9AXZcRhs\\/MMSlBF13GcfD56Jjd9PUpoilJRhI5iQPDYX8\\n5AHNK8+tGqRwhPZUE9sOGwgsLj2zBePWDcLvNgf88w88snMsWtKRsQ48w9hIyOduCbj+qroL\\nPb+liF8xLOo8mfMX7MAUx+tx1HU+194RkOmwSaejjKzRkGjSfP\\/hgN72gJedZVVjU7tZ0dnO\\nIwdMZAADWLngFES4uTbeup1F7HhkaKWckTyoJhpO6ohcx9rhO6Kw49FvA9+wvHfpDMMXGYTD\\n45p33uiSV5KW+Q6WE829sgR9k\\/OA+vx6lWGENFhxRTwD8xd0kYvvqfHOBkYU6U6LpjlWNP\\/C\\n4BYMy3paG\\/S4qc\\/HSQpiaYkdB79kOHN5ZsY6kzw6UCDXbZHIRrShypRm73BjiVVnphR1qTZV\\ntFZ1t1+45pXMT96BcaNnrHiG\\/\\/xtQDJnYSdklIU+wQ7On1154O+zSCqN57mk4laVAGgQUmGM\\nAyQQOkPoJxjKtzBemWRv\\/zgXveLjNOVajzv+9276MQ\\/tLoPMcXJrjK6cBSrDmAdToc\\/4kVHc\\nGeQx33OJp+J0NsdZ2G6RzvmYmCCMW0xNhhwczfCO93644Rp\\/+MNPaJ+7nzmLeonrDAmZJB9M\\nkm3qxvNDrLTG8tNIspTECAlhCHURIw1lCcoFVIG4CogbTSUZR5ssfTvPpbX7bp7yPi5GozU0\\nxVtpTQ7MSBwI1u0tolpVddGI47qzRsOCOc1APU5XqNRrC0PfsKi10hB3GZiwsWIBssoVPDI+\\nBKZONTh\\/VZJvfez7fP32z7FnZBMqJnDSkoyG9QMBr8TB9cENDIdGt6FDOHfJs8lxW+0qfghf\\nvMOjqcuKaCsRQwOrSkHZMqzxQ4Gtor+YnHiM0De84tznQvG7tXvZcTDkc3cEZOdaJJsUyqly\\nwQxISxH6hh\\/8wfCys0TtGXubpwg8QxhGhmpRmz7KUFnxKkdM1DMHxkTztaK7EbZvORiinMj1\\nj8YzDeMZAx\\/8jkvBUWRaJXYiMiKBC1ZccvL81gbDtneogIxVjaoUnLZ0GYTra9\\/fv71APKuI\\nZSNCbRiADjWL29wGPR6acLDjIZYjCIShKZNlbq6eiMqX43hWieZshOqi54Otg2UMKUT1h3Oa\\nIjqMmYFajWtzxdqlGPf22vW+e69PUUmy6aobKk98z6M\\/C7G5YxoxHscXU1gKpDRILLSRhFIQ\\nSLB0lClLxGz2lDo4MDJKSc3hhRe\\/4fjjuy6\\/ufUrNLV2sKm4lMdKEqs\\/AARlmWRSGRjt5yUr\\ns7VN67ol0k5AKl1GJiR2wiKMQwHYflCz8ox\\/IJutk34rlRIPPPglnvecDLGglZa5GRQlmhM9\\nQCuOmqIUDmEn46DixLIulWITwiox4Rbwk1lkoYylXZqKB1jb+iseGlrKEVIMybM4sHUdC06Z\\neEqNmzECHWhWzV8G4aN16kolTsEv0+xMJw6O79KGvmHpXNmw4Hf2D0ccraphW70w1wDzHto9\\nhdVpIy2B1FDWmtEpTWtmOn52F4viI1x\\/1T+zezjgtnU\\/5JebbsWKCzaOwEuudwmCKKNoJwVG\\nG85cGGtIFNz5SEBeKHLZKtpR0bWFMMRSEt1quO4XPlNTmrxrOFwCgeKCxSORta3Kjb8KSbQq\\nkk1VYzTD9VGOxklK+vtCDDEEUawyqSaiGGOVU7aipzG5svlgGHVDUfVWVrUsoGtY3lOPJYbG\\nYtvgFE3zImOn\\/aPHu3N9QF9J0NRVdRuViPC76fEAACAASURBVGKbIkqqrJzfNEP3FgfHpmjq\\nsRHCYEJY1FZhZlp8aCoR0X2qiDKsGqQn1KMS4BqW9S5DhjvrIaHdZZykqHZ+ie5JOQIfQ8WP\\nk7Aj7+SkudnImOlq8qSiufSCt5HT36+tqtG85gfrNKk5Vl0PTwEBVNarV5\\/kB0NhvUQYn0rg\\ng4yaNkoSGOngAb4xuNpD6yksNc5YJcYj28dZ+1dXY9vHDz7dddu36ZRbefN5E5w2f5h8toX+\\n9lUM5ZaTT51EKX0yhdRJzF14aj2z2b+LXFpilI8RAaEyeFIxMAF7D\\/fw\\/Ive0XiNu\\/+ThQtd\\nurrnsGP7BL\\/8+X483YxvuRhL4WMhrDRaJhGOg06HFFp9\\/FgaKWIor0TAFH26h13FDAuTe8kK\\ngxNL4qZayLuLq4vyKfpg0CaioCxo9cD4DQsxQhIzGgA+wUfriNxLYHH+io6GOdp2CGTVsDki\\nQVd2ZIbxTFDUkRsmZJXsmVJ8\\/w+NXD5TWY8\\/eDkL7a\\/y9y88j\\/\\/nvb9g7YqLkZYg3qLIzlWk\\nOyR2QmBCyRkLGxf5Lx7VxLMy4ropalHm6YRHPKt4eEywrSwZCBWuEizpXkpKrKu7xAXFI\\/2a\\neEainIgoO3MOhIhQlxOzQSYaNr2p1uEGnmF590xDZbN9qII1jThmUFXCwNCS6iRr99VR0ZiN\\ncCKdGGPw3cbxAH70QEAip7ATohZCMICpjpeLHagbrUkLrOh3ET1Gs3JeqjFGva8cIURVrU4J\\nDbaIH1OP0p5ufQWL21VDImrnkMCKCZSqJx6lig6k3Yfq666ruRIRkkND4EFGtvGaM+INB9W\\/\\n3+VjZaIyrOkSvKdif8g\\/KYsKeJMGNaLwq+1+4ok00giUjAM2rtYUAh83DChXxmhtVbgWTJSa\\nOW\\/tK46fkwhDfvuTG+hKSVpK21icmqRUKDMeOBR1HB2ksCoWpjjJBeeeVYflOx9jy0CC0eJc\\nkjKFljZjJc36bR4XPPcjOE49MDw+foQd279GU1MrX\\/7uQX6yIc4N\\/1PmN\\/f04xkXEcsTSxri\\niTZi8bmEpInF20iKTpLZHoa9ZkbLHawbWcZXfruCR721\\/HLXEkaEwRaamJ+gNL6SUt7iBGex\\nZ3xEDWmtfFx8bedhgR2XDbGfJ9InROTeFz7rYtLioYZxHj3gYTvRdZZ0L0Pp+sZav6eMU01O\\nKEugHEEiK7l1i+EXG49ub6Mr6whGPkxm6u2876XP5bNvu5Hu3HwsW0ZIQELaydLs7JgR43PY\\nejjESVZrHWc+i4yMhBMTxDOSZE4Sz0qUJTm5qwXC+ub95aMeTkpGc1INVB\\/NXDL0zulFzNjQ\\nk4WJmpvekuwgax+YYagspFOd4xkbHhMZojWLVoAeqv3+ge1TtXgkWtCa6mwYb3TKZt8ExFJR\\nXa+sIm1BlGFdOf9k0IN1N3NbKRrPqiZ3AslJc4IZGeQYByeDKDMuBQKBCWFJ17H1aFVfxKlr\\nyL0uu4dpQKZCRmjSigk2HagfZDF5mNZMB6Fv8Euay9e+Ebvynfq6HAj59W5Doik6qGrNTZ+C\\n\\/SH\\/JJAAVPYKrDDE91yUnSBEoYSNUjah1hRdn3wxYHzSw3cF2g3wqdDde0bUAPI4snHd7wkG\\nHyNlF9jm9\\/CDR6ASNCNCD08HlFEEfokkE5x3Zh2x3XX\\/Th48tJCRKYEVMxRdw8EjkoJ3Juec\\n02hQb7v906xY3c6+sUUsXPsFei76NBdc8UW+e+cYA33NhAaE4xOEARqDERB3sqRVE32VZv7j\\nnmZ+vqWXm7aeyUT6YipIdvmrKNlJpDTYJsSLL+DIgU6eKtA20+VZ2tW4EA+MKKxY9dT\\/Iwei\\nMQbtG\\/yy5PXn9WBmGIPBccPOUY1yoozg0rlpMMUZpzg1VAgRCrLiknSr4gu\\/1nzkhy79R\\/Qx\\n+GuHCI58kOWpb3Htmz9FWrWiq2U5TYkMQh+uX+OQwopLrOobwx6\\/FqcTH7JaoC9khEAToq\\/B\\npR4uZrATom7UHjfOdPZu9aIFDUjl0JiLkNHzr1q4FMLDjzNUjWNO+6KBB6t6ZEPnjMF8Aruq\\nEx0YVi5oHO\\/ezWVi6ShTK1TjvYU+9DaXGjtxTDrRb2VksHpaFpCQ9YTArkMGFasjasN0uOEJ\\n9KhEjUj7eErLpr7pbK6oH9SWwHIEk+4MDywcp7etC78UkXFfuOxItbojuv5X7vRJNqsqWnvK\\nwFqt08+T\\/rXRwJBNxStjtEYbTRiE2I4DaEq+S6Hkki94VCqCqZKFmy9BWOGkpaufVAXAXbf8\\nJ7mMYUB18qODKzhgPwdL5EhVprB0iUCXCMtDvOyCVaSSEVI5MjLK3Xtcwq5lBMLG1zEmyxYb\\nt4W85JJPNVx3\\/4FtDAzfwcO7FXL+G2k+5VTiXXOpdHTTffon+cQnHuFQn0RIgR+WEKKEFXep\\nGJ\\/RuMXmUcWIWsack3KkFzgU7SnsMECKcWR+EulPYBI+I3aSkalT0aF4yiybDqAj20Xa2tuw\\nEDccKFRrJ8UTuqKGaRKp4XUXvI1O51eNbtH9Pk4mQiQ6hKVzGgur9x2xUE49sRBUokJ85UjS\\nbYr1Y5IrvuHxL9932bDn6D5Kunw\\/6eIHeNWZr8EvVw1bMt6wefcOW6hY1aWe6e5Nl5G5hvZ4\\nL24xIg+HXhS8dlSjoS94iWiDq2O45jOY8WtPaW4wiCMFL0qMBLC0UzfErw7lE9jVmNPMGm4d\\nGLSnOH9p0+PQb+QWRrxDWNjaGA\\/rm0jUjK8U9QNpOr63al6mYbxNByqRsZHRNZf39EA4Wvv+\\nkb2VBsNLtU7zWHqcLh\\/ToaEp3kpL4mDd5Z2w0Zas1gKLGhFZVkMBe4dnjhcwNyMoTYa87aJX\\nQenmhsz29nFBIquwHFmNrT11oRoZsX6P\\/wHwRg3euCLvaoxSoCsoGSBjNlrDmOtSKGs8v0wl\\ndBnxLLpTZVIyINPadlyjlp+cYOO6n5NP9nDrY4s4OLmY0LLxrDIBMULfQntjeBOHuOLVL6lv\\nwtt\\/jY6fhBfvoe9wiOdqdh0ISeQu5uSTT5+x6Q0\\/ue16Dnm9nPXSa5m\\/8llY0sESFqFIUWxa\\niF56Bd\\/46j0Yk0E4GYwPXhDihzbJRJLVvW10ZiZ5dJvH6JE0niNRgY3te5yR28eZzgZivoUT\\nJBk1K5gcSdQqIk7kZ5qYe0rvYphBYh0txPBEvSj9qL+b3sxhVLu3pG0Nbzwvh\\/HrXUGmSoY7\\nt2jiaYWU1cB5d2Nh9cYDeZQV0SDeddHH+crbbua\\/\\/\\/ZObrj6VoSEZLOiZZ7NpinJNTcHXP6l\\nCvdtDR6H3oY4r3cQr6ijrq9+vsGwhGa6Y4iou99imiyrWXvyy\\/nK2\\/6Lm695gO+++ze8dPVl\\n1aLyyYbrKLul4YUjM+diuiywu2kRK7sb\\/+7+nW5ECQkNJ3U0svA37i9XUXGVw1Y1kL5reN7q\\nF5OzN8xwCx0OjAe1sqvQM0fFwzbuL0eGsjretI6NNuhAsLSrfv1AO+wbq48XBLCwtdyY6ZyM\\n1d1Hotrb4Bh6fLRvKorDVV3VlfOXQzhQ+82DO0pR0sZmhi4iI2fZgi0Hy5gZTYJyTolTq2Tc\\n6UMqCOGG3wSkmqfpLid+Pzz+86QRmxBQ2S3QOoxiO6FGSYVlxZDSphx4VHyPihdQqWgCbQhC\\nn8AbJ2UZuuZ2HNew\\/epXd7K3nOOW7T3sl8+CRHt0CobVcpvAJyyOs2JunHPPOLVmrH54+\\/2Y\\nRA7htLC5zzAwlmTLDsXFr\\/5IYzB1\\/T08uH4z51\\/4CRItq1C2QhuP0C\\/je4KynyVoO5nDphk\\/\\n7OF\\/fngvSgcEQQltxpHGoidZ4HXn97DX76YQdBMrTmJEiIdDEA6zqLWPiihiyRw2OcqlphOP\\nuTE1N3Jxu8fMzpIP76ovxOnY0fRnZucNt6hZ3LyaT13+N5D\\/asM8\\/ddvfEQ6WoTGzCCSzjCe\\nftX18yuaXvtXtLkfIjV5FbnS+8iqdoSEWEaSbrNomWczlbT4l1sCrr\\/FbbhWRq7Hr0TPM1H0\\nGhzNXLq5gWeHqLbnCQzlvOaSUzrx+i8iOPhsrJFX447eEnXFMI3NFDpzcfRRrYbqY7lFzdtf\\n\\/HqE+4e6qzcKgyVTRayGnpZ6kNzXcfonAqRdj9dN17c6YYYrX7CqIWC+b1ih4jJKxBjQgWBJ\\np98QD+ufDKpUkBlGl8i17m5ZQELOaEc1LCMka9cN5eMbIKzbU6y6taLWASTjHK1HT0SkXYQh\\n8A3zmysNiaiBSacay2tE\\/0JGiaVAaCp+fEYZnubdr34RpvTr2v\\/d8oDPqJHEsrKWzHgq0dqf\\nlDwwGsy4he9Gr6GTUmKkTSyexgsNU26ZslshCAzG2JRcjdYeujJGu3QjPH8cue03G9nuns9Y\\n9jQqsRYCFEJIdNTuAeNXCPMH+ad3vKbWGPKh9ZvZsL+EiCcphzH6prq5Z7ugd\\/Xb6Oist0AK\\nAp9rv\\/Yl1rzkH4jNW0Y5BgVPU5ywKBcFlYpLwfWY0Dl251dxxfse4ge\\/KLFpex9uIcQv+hRL\\nE1RKeVZ17uCNFw0hGSKuHYqyRCACKmGcYHKcuDlMaOXRAvZtXo32T2xgFCGi2ky\\/MR4SuRbV\\nALWJXMgwiDJdvhchNLegSZl2rlp7DZ99y3tQE9c0LORH94fcsd2QyCmUExm2FfOWIcJ6hm\\/d\\nrunAtST0YPjwIxhvR7SZg37OWnQ2fiV6zaEVE8QyklSrItNh8aOHQwp+vYGBMGW0jlpLj0yN\\nN1Qnnr3yFByRRAfV\\/mmm7j5fcvob6ErcV4OfoT\\/BPVsKCAVHJhvJ0S89+1Rk4BD69d5mppoN\\n9oqGS8+7ijO71je4wT992CNWdcUxikwsX6cKBW0gq2itWhcauIagqPjn132CnP5ew\\/Uf2V2s\\nUVW0hp7WhcRnxMN2Dxms6dIi1dheXQeGZd1d1ZeoVOd\\/dykitlpR9ZsJJD3N9e\\/LfoLxiq66\\nodOZ2ifQYyIyWiAIfRoQHcBjB71avLYh6VJtVmnFJLsH6\\/P2vLNOZWHTbTX0OFUyfOeBkGSz\\nqiZPZiLwp+7zpEuqtCdg0sb3CoRGY8vo7evCjlOs+FQ8Hzf0kaFBKokIISiUkLZHc1OA6xaP\\nmw39w+bdkOjBUnPxhY+UIeioUE\\/7IaY0ylmLmnj1y15Q+7trb\\/g+JtlFoDWe53Ak6OXODX18\\n74PvaRj\\/xz+9FdXzV3g9pzPolUkUiviFFoqTFhMTNuNjYxQm8lTGxwms1WweLiNiLfzkt3fx\\nmrVLsEnhmWFKQYAsVlibCbivdYQHJiyEaYFAcXgyzZEwzjxrHzvEXDxsLNlLGNpYwj+RBLao\\n44YnWdTuNtQ9J9Jncf7yOPH0dLBXELcTJGMZOprmcuqCs+huaYLC9wiHr4+O8qocntB88laf\\nVJtNLBmd9NqHBa1hA5H0wJiFHfdrG3vrwQKnzZ\\/2x3ze9vzV7BzaQ39he9TGRkYuFcBfv\\/Zv\\nyaQfxlSBW75YRKooq1pBMzwBndUcU4oHeNcr\\/5Ev3\\/HJaiNIgV\\/WXHLam7jigoWY8R\\/W7unX\\nmwPGPIglJQ\\/srRCEiaitOdBm38sHLv04X7jto3jGQ1ZRmFc0vHXte3n5mhjh2DfrsbW85vbN\\nhkSnFW16Y7BEvubpJRNpOnNdlCvDCKmj7sVtq\\/m7yz5It\\/wapjzQWAWSj2PHSkgJfmBY1tMF\\nYZ2O8sieSkTxsEU99jTj1XeLW4OG4vaByenxBEFg6Mx2YZv+OhIrtqD1eK0nHsIQuPrYeqxW\\np5jQoH3Bsh6r9pyBdtgzkqd5vlOnyEzzxKpZacsRPHbAZVVv9P\\/NzjqMW88G\\/\\/dvfHRSEUvJ\\nKv3o6XnD8pN+r2iQN0hpMGjiiQTSEtiJFBXfIITEC2U0OTogEJLAD8gkY5jAI2MdYWD\\/jj86\\nfsV1GT5SQLTYeFRIBwGBjOOJavTWm0JM7uffv3FdDa3de\\/\\/D3PHgHuyOswjDANcLGJ2C9139\\nYdLpOjQvFqf40a3fwTn9Q4xONaOHEjhOSFC2KEz4jI7mOTw0xOjAPoqDW8hPjDBZlGi\\/wN0D\\nJeZkDjE6XuGs1e1gNMZPoP1DnDa3k\\/uHXWKigDZZimEHw16RxNROmlrmkVfdBHYmyoyeQBLi\\ndMfc+R1LiIl9DbTEt7\\/yddTesQYYo0EXMXoUgiNo91OEh7Yd9cahkbzhn37g46ctUlVmfuhH\\njRKXz23kHm4dCLBiAsuJKgC2DARAnWzqlL\\/Ol6\\/+GtsHSzy48x4qfpm4leTCNZfQlXiEcGzz\\nDINUwklGVAwnbbhjg8tbn2dXgdgYF528iyW93+OXG36GZVlcuOZi5qW2Eox9po5QPPjmfSGJ\\nbIQK\\/Irkt1t8Llw9XR7Vx7k99\\/Lff\\/8TbnvoZopuno5cF2tXvZis\\/gnh2L81sP+vuz3ArtZW\\n6gCM0LieS6I6DZYZ5Jv\\/\\/A3u2ngfCM3pS85lXi4kGPs0prxluvVaPQSyv4RqmiY6w6JWt8FQ\\nDeYdrFil2l47WivTYYPAg5XzGuk8G\\/aXsHLVeJyB1nQCdD3O2tu1lO985HNICzxd4R+\\/dQWB\\nZ1h2LD1WkaTvQ3tmLilZL8k6cESiYnJG4kU0rEEpI\\/1HNaNuVWd1ozYworl9q6Gpx6qjvqep\\nG+uT7u7h9tu4gU8l8PC9kKZUM1YihUokqJRLhIGF0CAI8IxASIuSq8nFHDKVIQ5uewhjnrhL\\nZhAEKLeEdsfwU3GKKKSO6jKMV0SPH+Dav7+UU5YtqVYaeLzzo19FZLrQKkRXXLxynsXNDm+6\\nrLG64Y5bv4x0NCXXUBgcw5\\/oAinxvBEmRg9xZN8eDu\\/dytIOyamntXLaqrOYO2cOtrQoFd9C\\n\\/77H2Hrvg1z7X7\\/jtS9upT0bEs\\/EaW6WSMpIkyJUeQwORyo2PXHoMfvYq5upOFkCL1YrOzlB\\ngA0dwrKeNghnGjaNP\\/zeP3m87QdDPvGzkFJM1QK8QpgqU92wvMduIKbuGJ4i1+ugbImTNGw8\\nFPLo\\/pBTF0w3qcwTDL6JkxPnsfTs00FmQE+hSx8jHNs6o2TLcPMGTTxrYccFCa342WafV59j\\nyCaqhmDqx\\/TG9nDVcy4C46JLnyYY3dwwF5\\/5qUfBUqSzUS+wZE5x4+9CzjzJ0JQUtSqIVGUT\\nl535KpAdEAyj81cSBoMNc\\/H1u3w2jwsynVH760Aa7IRkc98kZy6uGko9iTN+FX91yl+BkOjK\\nJ\\/EHo3sKNUyW59OSirhiFT\\/OSHmSlnYbiCpFVs9vzHCu31\\/BaoleiDLdSXi686\\/Qit7WQs3Y\\nVPw4R8qTtHaoGq8vX+xvMJS69Gt6YlEDg8GJcbxiSFAxrHgCPSIixLayd1EDkly3u4idELXK\\nhaNoNirKjO47cuy3B33tbp9ES4TWatnep0metCsac2JMeOMoS2LZNsqxiadTaCkJjSAIDSoE\\nhEZXyaOWnQAChPLY9egDHDp0kO7uY7f+TqdStHc1s7dSRPsGGabQwsP4k+jJPt504XLefVXd\\nYH3yy\\/\\/N9iMC2ZQh0BVwK+iRPXz0ur9rqG44PHSQ7etvphCcQmHKQ+hBpDOK79tMju5g7MA6\\nLjljGVe\\/72rmdc859sOfdx6XvfGv6e\\/v57rPvJviWB8L5nZwzyaAHBWZiNjdwSgtXQHSa6Kt\\nWOYgASVLMra\\/k2zr3hOG1qY3dO\\/jMmF\\/qowXDN++1+eO7YZ0u0WqWrYUxWUExmhaMu1krAO1\\njXVoTKHiKiJ+WmDHBakWi8\\/dFfDJVwoWtMvaneryfVC+75jXLruGD\\/7Ao+QoUqmoIsARAr+i\\n+NBNHtdd5hCrBseNu5HQ3Xj0YRjCdbd5rB8RpDuiUikhIZZWFL1o\\/M+\\/wSEREzU0EY5\\/7dj3\\n48Hnb\\/O4f1CQ6VA4yQjJWEYQTwtuvDfkWQuj921Gxm2CMP\\/txqx+yfCuL5f4+j91ApFh29If\\nRC87qXYAEUh6chM1O1T240wEeXKOqruh9RJeFnWdhG3qa2d6PFmNxykbhscqTBYtmlIzEJUb\\ndb7dsi9CiS2ZtmPqUTlEJVkGepqnGhJRh4sJnET9JcszbYWg2tLdEmzuL2FINhze6\\/eEPDwk\\naO6JdCue5neCPOms6OSuMHqYUOMIC8tKEIg4vrHxAp8QH18KPG1jTAypBSbwCHyfWAjNiSLf\\nuuHzT3gjSin+9s2vIZwYxhobRZSGCKf2EhzZxIfespYbrvtwDe3dfc\\/9XPvNu5DpDoSykIFP\\nUBzh2afM4eKLntMw7s3f\\/ijt2QQTrsfoeD+HDo2zf98e9my4g5b8Nn7+xffzqX+88omN2gyZ\\nN28e1\\/\\/bj2le8ir+43cB9wzGIxVrgwwMbSkbJZIMjkGTOEAuNYQThnim6YRle4SITj5lQaG4\\n8UkrOgyjjbfjYMhN9wd85CaP1\\/2Hx28GJc3znAipJRqDxFIJ3HCEwKvzmh7aVyDRFGW3lJLV\\nsiaJm7K4+jsBX\\/q5x+C4fmLk78OdGwOu\\/rbPwVCRbFE1vpUdEySbFQcDxd9922fTgfAJEeu9\\nWwOu+obH\\/cOSTIdFLFmtglBRwXeyWTGI4upv+\\/x8Q4D\\/BIC57BpufjDgiv\\/0eHhMkp1jEU+r\\nalOHKJMZSyuGteSa73scmTz62UINP98QcMXXXfp8xdTkA3W+2aEKiaxCVrlbyjEUpurttjce\\nKBJvkjWyLTPeSSClYKq0AxPmjxrPcmQtNqnSiv\\/z0+CY875rJKKFuHr0mHq07Op9WVAqb2qY\\n401DxcgoW433VudSRgDm1JP\\/b3tnHqdJVd7771mq3rXX6e7Zh9mYYV9kX1wTEyPEqCjucYvm\\nJjHXG1Ev3iTe3Ot1SyRi1LgE0SSKS4wmIkpUQGQRkJ2BgWFgYPbp6X15l6o657l\\/nOq3e9im\\nBxGReR8+9elp+q16zzl16qln\\/f1ORZuefc793BUZlV7Tap1SSv3KM6H7PCdv+qcl83rlb\\/tK\\nJ83JEVxSp9hRpdzTT\\/fAIrKkTm1iL9THwDVQroEg2MhQMZ6uAhgsDafZNer5xJd\\/xuFHHf+4\\n3\\/PPX\\/93vnTJZYhWHHvEGv7sLedy+Pq1s27T\\/Vt4\\/hs\\/wLhdgip2BeieZBI\\/uJFffPvvOO7o\\nw2c3we0388+fehv3jvcxUYgpVU5iy1g\\/tbH7ee9rzuDdbz+3Fa87EPHec9br\\/pxrtyhMpUxq\\nOzA2obM8gZtyHD5Q4NTCDVzTPIxt9jAKE9dyyu\\/d\\/FQF2PBeSOuh5KE+7khqIeb2uJIXVIYH\\nAaJiePijnEYttF7NKYJltr6rOeWpjTuSaY\\/WUOw0FLs0cSublvMKJEJSExqTjvqEZ1WXsH6R\\nppSXODUz2DEm3LlLiCqGYqcO7UOFWXQMycsvsobQmPLUxhx91nPMMkUlr9kab8DND3vqWlPq\\nMhSruhUnmlub5rNQt9WcCmukm8JxS2GgU2F1QA3ZOiLclY+n1KmJZ8bzGNdKG0J93NEYc5yy\\nHBZ2hozx6DTcvFVIrCKuBEDqtBHujzJQ7AjjjIrBCm5OexpjjsZ0oGwsVDXlLkNcmVNSka9p\\nlkJz0lEf9yQ1jzbhJVLqmn0JiQtja0x4pkczjuiDRZ0K54U9NcXWusJWNOIC1FBSe\\/R9RIWs\\nbiPfTy4NWdpyt6bYMUfpztmDAVFYmBzMuPDNf8Uh5uMtM\\/OHt2Z85nqhe6kNSQPz9CQM9tny\\nf3jR\\/BTbyHUVBm8ZD8mAri5K3Qvo6F1A0qxRG98LzXG0byBpA200pWKRSCf0lDTGC6kukU2P\\nkhVW8KHP\\/4RlK1Yd8GA3bLyfs975N+zOFqBLfWAMuIRsfCtvet4qLv7kB\\/cpxj3rlecyOjXM\\ntmQ5v7VyE4et6uHCS2M+8YF38qZXvXS\\/33ff\\/Q\\/yj1\\/5OrXhnZx+8nG84Y1vJo5DkPzm2zbw\\n\\/Nf9b+K+VdQ6urAeVleHoNkEVWZtfB8P6BXs8UeRbb+Os9959VN207yfVSZZGur8kCe6jarV\\nXznDhKSNmu39ewyABRFmGaJyZqGZc03eyzjzTpjpBPAu1NZlSYDlDg3R4QMz8RgTh1YcG81S\\nwu3LQ5pX22cz1\\/FkibSAOrRR2AIBeTXO+w3N449\\/poE9a4bDZ4KX2cp5G8+OSZtHjwcCIq64\\nsN5pfh2XSg55lM8nb1+Sme4DN8tipaNZVBKfSou5ijksV621eIx1cPk6Kj33emH9Z+KtLvVk\\nCWRN36qsmhmXztHJveMx72Pr5ZQGUAXJeUbNDIuYmR3TTKmMz4TGhOP3jngjbznxbqR5R26R\\nC3\\/4+QS\\/IKLSa1ovzadb7HxVqS7FZF6hlUZU4AEID9jswogPm8ZgQBnEa5zXlI2Ayqh0xExO\\nbeV\\/vuVM\\/vxvvsKpz3vxvC2kL3\\/ze7z3b\\/+VRmkJttKLVxEKh0+niRuDfPj8j+9zznd\\/8BN+\\nvNkR9xxL0TQZH5lgsKPGhef\\/Da+bh1L71Bf\\/lfM+9iVkwSLKLuH2ay5j48a7+fjffhKlFCcc\\ndyTHr+\\/njpGMVDXocjV+79C9NNPt\\/Od9R3ND7VQaVYvLDIYST+UrS+vAeqy1whYPIMymHsnl\\nyOOOSylQJjBHmWiWe0\\/BHMIaNVvvqsPDIDYoHqmGrN4MifhMcWeruVs\\/9veHPkRB5W5WXNZh\\nb8lcLtFcCei5I3js8WuTI3cUg6U7gwjcar7WTzweyBuq7axSDS+SudawyrsFZtLC6tGcpTO\\/\\nx6pVqPvo+6Eedx1an3\\/EvQvKM5RY2RikombXXO+rqFscpo+6j8zupwKP+V0+V2YdUS\\/DU0Ok\\ndeGkQ17Em5+7Ahm7pHWZr1+XUS8Yujr0HKX29PNS2nmzKqkYrSOU5GCSBHPXZVngSlWhZkqh\\nSZ1DZRk2tqG4FqGgPOiIaldMeXKED533Bpae8VbO+7M\\/Zt3aVY+ZLW0mCd\\/7r6v4+Be+xd07\\nG+iuVdhCJ17ZUDiepsjUXs7\\/o5ezeOFsZ0Oz2eQvP\\/ZlVGkRmS2SOsXPH4542avexete\\/Yr9\\nTvXCL36VD37qq5yypsJkPMV9tRXE9NgHfgAAIABJREFUySHU9l7HTTddzymnnBGU29FruOWK\\nByjWC5y2aCNr4o1sHOmm6RYwHnegXBPiCK\\/0U8xelT\\/Ov\\/I34YEyN+SfN3MMyEfw6M4v3a\\/m\\nWC7yOIpLzXudjA7X0cyhTjqg8cyOSfKA+ZMbD09uPZ\\/MunOg83v8\\/RTauoSi7+Izb\\/omzQyc\\n91T1fWSD57U+t3fc8+93CNUleTGu5imH\\/J63Ypt3Tk1ZRGtwoZnNOY9zGZnLQlpaKbQJSB9e\\naUQ0ggo8oCpDi0O0piAZrncJe6f7+OnVW\\/jyj9\\/Niu4iv3368XR3ltFakTrHtl2jXHHDBmoU\\nUdV+ogWLwRRRxoL3uCxFmpMsLjf4i3fuW97xjxf\\/Gw\\/tFeJewac1atPTvOT0F\\/PWP3z7fqd5\\n7Y238p4Lv05H5yKKbOTdrzqNf74JttxWxOpJrrv2ck45JdCHrVm5BGo3sTJOeMlqoZqOMjm9\\nmCztpMNOs6g4xM6Gpq5\\/mdzlb6jMPFDqUSHCJ3cdnsLrqGfAeH7V6\\/4UjmumXayoyvidLyXS\\nFSIM2Rw0GBH4u8sy4m5DXDF58bb6ta2L3beJ7vElzQJvZMHY4GML+5w6U33jnEdZRU9XN2lj\\nPCfxsogG4zMio7h7uMg96gii3kXYrMFgJlxy9S6cNBDTCGax6oaudZjIgC4g2qCUyd0JQfkU\\nmd7DX7\\/\\/tVQrsw3FI6NjfOjz36DZsxgVa3Td0m8n+ccPz49n4U\\/++tOo\\/nVkUScb6yUu+tLl\\n\\/PFf\\/D6Xl\\/q44xf3MLB6tnJ7zSHL6GSQF67bQ5Vd2CyiUirQUdxG\\/8A4K+Id6G2aXdEU813n\\ntrTlmSYhpgalOA6F3W70UZ\\/5+nUZGyc0nYtMi3UqBAp\\/XYptnmKMI9KWmIQIAQfOW7yy+MxR\\n1AoxFi+GSpQik1NUKhatDU40ymc0bBc37e3lnuRopLQSrz1KW1QceCkNgujQyaCwSG5fKx16\\nRlEKEYf3HprjHLO0yFte87J9xvmhC7\\/EpO4hMt0hU1jbzgfPO4e+Bb37neNFl\\/wH949oqgu6\\nAMtk1MODcizf+tpVvOuNz+U7chTXXHE98pfBQo2U5\\/cOHeKozgY6HWXSOboY5LcG7ufuoWm2\\nR4tZ3f0Ayzu2tJ+OtvwGa7bwY3x6x6NsQBH4xvUZX7tD6BwIbGS\\/LvdzX1d0nho1TVN0iJyi\\nUWSZw2UOfN4QryJq0kMz8ZTjvfgoQSKLRoOZZMz3c+f2XrZyKFPlZWjjsKSgYtyMf5+nt1Te\\nmKaYrcJGQPAgDp01SCd28P8+9BfB1c3l\\/ge28NlvXYnuXY8yFtWYYM1AxNtev3\\/k3nqjyd9d\\n\\/D1U1yHoqIgXBZRp+gU8NLiZ+x\\/azZknL2NBtdqy\\/B54cDNpY4LUFqljqJuUnVKl0bR09a5k\\n+1BGsb6LdWv72SFD7QekLb+xms1EsHe6weevFhYUITYwPAU\\/2+wZFU3ngKVQnUUTFvkNUWy6\\nUsfEPUgzAa3wPsNnWXAL0TgxuLiPhCYwiljBa43OFInuYNNYN1vMEYzFizBWUyRDSwmvJMBZ\\ntTCaNErrfZBnnShQgheP8o50eojfPWkVv\\/PCM+a8OYT3f+RzqOoSdFxCeY9vjPG+\\/\\/EqCnG8\\n3\\/n9y79dyu56jK1UERPjReO9peY6mIwP4V8vvYtzXnoEfQtXtM5pZJ56WqBnog6qwV7Vz+SI\\n55jFo\\/zn5lEq3etomm6Sxsiv\\/Ua3pS1PPm4XSkPiDs2VO4W04UNJiFFEVUtHSYWCYZvH1Z4B\\ne93O1wfuWJoyWaggyXSO6+5wWYrzKcZDpA3WNCkVG1jt0K6I9jF4YefUQgZZyGRcQHSTYiZY\\nUyZTZZRqYMiYQetTmpxV2wTMLEBLKPlQEso79PROPnb+hfvEzH567U384Mb7MX2HokyEZNMU\\n\\/QSvPnv\\/JSXOOf7pG5djq31oGyHa4MXgrSWRXib9cmR6nJuuv4vXvePc1nkb7tnMtqlOdqcp\\nVWVJVJWGK9GcGqNUOpQ9aZXanjqV5vBBmD1oy7NJsyktOY+GUOzIs2F5ic9sWYl6xuzzeSs2\\ntCedKfnQDklT0rSJcw7vFZEyxH6IzjJoByaJUSZmAsu2RieTuoTPEkq6QNHFSASN0jSRBIst\\nYNaHldLahARC7oo6CQkDcQlS28tbX3YGh69bs49i+ssLLsJ2LkJHAZ\\/MZQ1efOqRdHRU9zu1\\na2+8lXu2T2IHlgIKUeBRKKvJsgJTqpemLOS2Tffxdyec2frOmzdsZXOyhr\\/fXKRcWM4i30W5\\nqBis72WcpQzpw1nXP46Kxmjh9LSlLb+Zqg20YLR6dAnP3DKaZ4jMu9zDi9BwjrKOcqJeR5ok\\nCJBmDh110FXfTRwX8SrGmAwRxfZmN9LZR2Mkw3gLOiZTFqUyrGQYXcBg0DY0AWtj0cogSIv1\\nJ2DHOLK0RtWN8r\\/P25dK76vfvpTbHxzDLliN6JxTLqvzvJNPm9fcLvrG91GVBYixKCRA\\/Sgf\\nyliMwesy06qXQ098BQMDoad02\\/adbNjZQPWvZUitR2eGUWnQm0ywo9HB3uoA1j5Mb2eBysoe\\nxhluPx1t+c33Sef8mI3APfPEyjzLEKKiUBqoIztCdtJiaGQZaEPqhIYU6GxGKF3GlTQ+G0Eo\\nMOg6mRhrkqURoi2JychMRkEZ4qwcFJrV2FypiYQeO6NsUC54dAqeFD81yHvf\\/gr652Q4p6dr\\nfOjTl6A7B1A2zuN9GZI1OGrd\\/tu2xscn+P7Pbkd1r0fmRD01HpHwM81SXGOS157z+pb7+93v\\n\\/Qcd8RhVO4iugZS6qUnGbl2k0y9jiRpjLJvk1jv3Eq\\/cTLld7tGWtjyNrui8RdA2oUEZT0rJ\\nZkwnioYyKBwuqTFpO4l8jYITHAW8L7Nk8XK2bB5HvMeaGk2vUKaEQqNVhtEao0N1uDEejEGb\\noDyVBIIJwZPWxllayfjTt75mn1F96otfZee0wXZ1oIgQb1A+QL92du7fDf3BFddQkyKRKQCG\\nTNkctVehAS8O15hkScXxB7\\/7IgCyzPHz667k9adELO7YhksSrtm7nHpSpqB2s6ZTIf2d\\/Oge\\nzdHre6l2FvA02rvt2S4SWgp9FrhagbwPVbfX5mm32GS+90zRf9gIW7d1kXooaIUShziHVeDq\\n4+hqmSxtEMcRCoh9ChO7MNJNKgbvwOq8uNbYkBHVEcw0Z2uD1jPUXAI+xLsyl5BODvLB\\/\\/Um\\nSsVZTPZdewb55Fe+h+lYFRIGM61GIoh39HR17nde37\\/y51DsDDE1D\\/jZYmPEo9ImamoP7\\/nT\\nsykUQnb1qmt+zqW3DFLu7SWKoFIpkzY93R0ToBQbkgi3tcRqm7G0a4Ra2sSY9mZ7tktSE6K6\\nY7H1rOiGVYs039wI3j59yLFtaSm2+btIptREbA2XKJQ2WOXQLkWTYfBMjQ1Trmqmm46uoqUo\\ndRaYCXqK\\/eyZ1iAG45qgwWPwWphB3FN5o1roJw59fV4Jmc\\/IamMctbyDV73sJfuM5\\/9c8AUa\\ntgcdlxCl0Urw4kJ8DsXo+PgTzifLMq6\\/9V6wi3OlKAgZWnToUXQpUh9mVbfjHW98Za7ghb+\\/\\n6Nu4jsOZtP14ZRhNNGXVpDZWxxQMWaHCYtnDiw+7l2217ejYt8s9DgaDzQlvO0lx+IBloFvT\\nTIWLbkjp7JwFCG3L0yN6Djvbfo+o6Cn113DaoLSlaDWxAu19nh0VpmsZKQUa3qDxRM1h1i4p\\noHUTj8e6BOM9IhF4i\\/YeLRlz8BBCK31es+aTBo3R7Xz0\\/D\\/ZBzvtrrvv418vvQ5d6gUd5Q28\\nEmpDlCDGkmX+CSc\\/Nj7B9j0joAJpolIBNFK8C1ZlcwI\\/9jCfOP\\/tFAsFAG64+Q5+cvND2Kgb\\ni6aiIfYJTVcgKfQxFfVTSgzHL9hFMnYXDV2bRVVoH8\\/qQ8eKT1zl+fY1gbjnnq0Ob+ZiO7WP\\np+uwB\\/IiEYGOQyYY2TZA5j1FrWmQ4cQj2oDzaK2pJY7YKrzyRDQoNB8ijsrUJEYjZM7hU4hw\\nWOPQAuIMylpajqAXxGUkU0P87inrOeXE4+aMQ3j\\/R\\/4B27UEHRfx2uSwOIISlRcUFvjp9Tdz\\n2knHPb65ag2i5oD7iQ+WmjgkrePGd\\/CmFx\\/LWS9+PhBKPN77kc9DxxLSqISyGocDBZFOSWnS\\nYWKe23sPa5I7GLVd6BXJ7MZuy7NajA3QP2ccGULXv9jiKVZt+97\\/Oiy2A1GESkH3sgYUHF7A\\niqegQ82IxlPUQuQa6LSBUYDLsKR0+VG6S5osy\\/IGd9CqiUqGMOkEZA20min4lfzwJPVpsrGd\\n\\/N\\/3\\/bd9YhQ\\/\\/MnPuPauHehSN1g7y1MoAsqHgsG4zNU33cUTudpGG0pWkCznPXUZyqWoZBqZ\\n2MkxCxWf+fD7Wp\\/\\/x4u\\/wW2bBokLEdYmaJWhlKAwiHd0S8y6aCuHlW8hnd7NmGQQS\\/uFfbAc\\nHqTuOGx5sNLu2iHYgmqvy6\\/hsOIPOJJAz5FD+FtKiHIUjMFrhZOUss4ouDqIQaUe7+toHVNg\\nKhTMmQJZ2gDTwGUJ1XiMxX2r2TmeBhgiG0HmQvO7a1Ib28Mbf\\/9MVq5Y1vr2NE356wsuwnYu\\nREfFwBKk1BwFFlADVVTk6tvv58677+XYow5\\/zJl0dFR5\\/VnP4+If3h6KDG0MWRM\\/tYcTV3fx\\n\\/X\\/5e0qlUPB718b7Of9T3ybrWomKSwiC8R6NRokFrVncs4UXHnIXjd17SCqLqC\\/2ATfOH3xv\\nTJ8JadOT1kMLjo11wNgvaLwLMNvNaU+hogMnwByMM\\/EzcNeOpB4AK6OSotSpicohueRnEG0b\\nnqQeGNuLHYHGDwlIt2lDWoQzCkWaCGnNk9Y9tqApVDVZ09OY8kQFTalbP2EG0yWe+oSnORVu\\naFQKFHg2VsRVjc+EI\\/qhECmm68IDo9BZFmpjjqQWvrPcpbHFfb9jPvN1mSfL55Q1w3yjgmrB\\nn6MCDHmxM\\/A1HPTJgwM\\/RdG1usnIwwXsaIHINxET0DmsT\\/GmgBKDadZBO4yfpKgdncWl2PES\\nmeqmLKN0pns5tLqHhelORuUo9rhKYKaUOpqMZi0hzkZ5\\/7vets+3X3zJd9m8t4ntXoTKG+hD\\nDEshSuVoqxqtS+jKIt7\\/4c9x+SWfetys1IUfPp84+gSf\\/9plYGJWLV3A+973Wt72hnNaDfbD\\no2Oc+2cfwpcWI4VunLbEzhKpMcROk2Qd9KkJjunZhR7bhLaekZKGBenj4nc9q5WaFzq948TF\\nsLIbjlxhmWzAe76X0bU4Iq17Xr0ezjkx4rLbHV+9x1HusUCA8Z7a6zhlkfAHv2NY0R8s\\/NEp\\n+O4tGVft8JR7DeXUc3yvsKgCx640eOADP\\/GBV7QprLIZZ52oGWnAP28Q+opw4oCwskdx9CGW\\n3ePCed9MeOfzDGcfH7F1WPjADxzVhY+dwUybHjOW8e7TNCetjWgkwr3bPUkG944IP9srJHXh\\nyBXh3FsfdDiB6lTGu07VHLsyYtuQ8LErMpyNckU+z\\/n2GHrEc9JSWFKFNYs0SQYf+k7Cn\\/5W\\nxAmrLUrBz+7xXHxzSqHfYqKDu8REPxk7TxmhctwUdV3AK0NRCyUFBoVojdVC5FNSX2CUhWyb\\nWs3OHRWsT4EhllXGee6qYQ6tDhJno3g8SebI0pQ0aZDUJqkPb+e9b3slPd2zxMfjE5N87Ivf\\nRFcHwBTyTGYek5MAiRwMN4VTBordXL1hFxd+8WuPuwClYpFPf+yvmNz8U0buuoxN132Hd\\/zh\\nuS2lNjo6zu++4TwenIiQchdFVaMkU2TRGDVjIe2hN9vNmSvuZX11iIJP8X4BY8X0oA8aT9YF\\nLcKiHs2hizWrS4JrBoukrwyxVZyxVtOYDLHNpC40d2f81YsUf\\/XymI3bPa\\/+h4TXfLIBHt79\\nkphT+gJpTMmCzTxnn2hZu1hzx4MBaUZ8sJDOPkxz5uGWAoHNPjJQmxJOXKNZ1KO57e6UP3+u\\n5jWnRVSKisOWaKr4x5yHiFAfdbz\\/tw0vONLy\\/y5p8KpPNqk34IVHWwaHQlN4c9Jx2tqwb264\\nJ2NVWfjsGyP6y1CKFUcs15y2TJGlcmDzrQdo9OFhz6nrDGsWG8bGPF94R5HpunDFbRnVouas\\nEyx\\/dHJYz4M+kSMSFvlADgQKCxz1HiHVBWLtKauQOBCtMKpBQXsaqovN9SX8fMdiprICBkGb\\naVZ07mR5+jAdjWFQMVPTTbzLEJeSJgmN6XGW98Db3vDKfZTQ3376YkaaBZQtIaIAj8r9PKUD\\nU71ugbWbgLjbuYzz\\/+E7fPzTX37CeFuxUHhUX+kdd9\\/Hc8\\/972zYA6rSj7Mx2htiAYVHlGcg\\n2sk5x45wRv8mzMhmXGYZkiLRct96KA62QykYU5rrRzUf+ZFjx1C4R6evUTRrHltQfPYaz9V3\\nZSRZuF0uEbKhlI+9wnDKOst3b8j4lzuFBYfGFJfG\\/PjOwFByzomG5pRnr9N86xbfInnZsNNj\\nSxqXCYWG45R1wRm59WFPVFIMe82lGz3TeZ10VxFOWm\\/5o0\\/V2bTTc8XdGZMqf88\\/ak5Aw3Pk\\nco0I7JqGBasjLvhJRjMVdk4EQoYo9axaFD7z0FbHBW8ucMGlCW+6sMFITtvXbIbn50DnO6o0\\nP7jX00zCHj5yteW9X0v4wi3wuRuE6+4Onz9xtaY+4Q\\/KfTf30E9WKSJCccU4dbEoZSiovHtA\\nC7H24DIavsC2qRKTlQoUUpRukhGTTWcUGw4jXdSlQiIR4j0uSUibDRrjg\\/z1f3\\/zPnBDD2\\/d\\nzue+cTm61IPSGtWqgRO0eMR7vPcILig7rcAadLGC6T2ED\\/7TD3npm\\/4HDz60bb9m7EPbdvDO\\n932Yk855D5sniqiOPpSN0crg6MFRppxGrIt384Yz93Jo4XpkeBdCTF0vY2ig1gIPPVgPbRVR\\nOfB0fv+W8NC94AhLfdwFcumi4oFBz61bHLaomBzKePfzDeuWGLYPeb74c0dHvw3sTQYSFx7o\\nrrIibYR\\/H71MUSoGsu7bd4R4WnPK89vrNdaEluHbtvlAhqKgGsHi3gCr85LTC3z4eylDHRHv\\n\\/6HjszdDqds8ppGNCIkT0lwJv+0FEfUJT9RtuO5Bz6gofCYctzSwZo2Me95zboEvXJHy872a\\nww+19PcEhXf3rqAEn8x8l3VDX3dwMT\\/\\/44S9saFzoaXSa9g67FufV07ayQOedGBb0bOqycT4\\nFI0Hq8RuDJ2jyirv8R6UVfQv6GJosol4i8fg6GTPkCVZosiMZlKK1J3CZQ7xiswlnHb0al72\\n0t\\/a59s+8NHPkBUXYOMiwelVufJwofYtx2wL6ByCarEaabwtYruW8dN7Rzn8Je\\/kpWccxanH\\nHc6ZJx9LZ0cV7z279gxxzU23c\\/OGzVx1y2Z0ZQDTvx5lS6AtCoURaBbq2CxjSfIwJ5fuZdnk\\nMNn4OJO+xChFdpYNdqm0yGQPdolKmusfzHinwEC3ZlEBagkkk56zT4z4P99NUcZwVJfneXmZ\\nxD9dkVDpjwI1nAfXhP6OvKskN8jThufwxeEhf3C3J4t0cAdHHOe+MgJg+5BnUjS9WpE0PCeu\\nCOUYSsFVd2dsTzXVfrNvT7d\\/7L0ed1iu3OA46wTL846yXHNfk5tGFZ+7BXTF0px2HLkiKK8F\\n3Zrr7\\/dctV0RlxXH9wa+0aFxz7Yp6Ch7juqSA5yvcPKycJ2JaeHKB4SelWH+WSIc0h\\/+PTol\\noefZH9z7zv5SFdEClcOmGd\\/TR7euUEjGQ4+WDu1NOqvRVxym7PpJtUaoIhSxHRFNWwY9yVSW\\nkRGBB+8dzjlOOuE4brjlzkCsCGzZvodLr92I6V4ewoKSxxCY6ecMhblaZt+wM21RgoQWLRuj\\nq334YgeXbxjj8luvwH\\/xMpTPseBMjLJFiMtE\\/evBFnKFpnOcKUFJipgMskmWVbZxwqIaZjJj\\n2vcx4ZskPb3UFo3ktTFtrZa\\/V9jdgKEJT3+X5ugliqt2Zjx3pWL3mPDQtEIZzytOzWOak54b\\nd0DPISrcPQ\\/1CccZhwVltWlHcC2bU54TTw0P8w2bHHFZUx\\/3vPwoRU9H+P8\\/35RRqGoEIZn2\\nHLM6JzTO4Ks3OEr9EfPtCShWNRdfn3DmYYauiuI9Z8f80cVNUq3RUSAjPm19hFKwZ9Tz+Wsy\\nqstiaqOO448L47n+XkehqmlMCq94wYHP9znHhOtceVdGodOgdEjUNCcd65cG7+bOhzxxRR30\\nnQ72l52\\/jiE6cpKpmw1lrdGZR1QRBxR1QinZQUEqpGoBYlKM8WTe08yEMhHNRCHKtiCKxMR8\\n6utX8Q9f\\/j6ZS0K3QVxGdywEE+eKK0AKzeQ\\/5uZCZjoYFFkosxAfFJMG8TrgtdkSqtiNFj\\/L\\n7YgGTCg01jqozBav4mzrV5R2U\\/GDVNUkxmumXMKQeHzUwQ41jVhP65S25Gznhps2Oc46SbOm\\nD753c8bbzy3ytz9IKXUbJnZnHLEiPMg\\/ui0j7jCt\\/ZAlwqFdwuIF4T5fdqcjKhmmdrvWOXft\\nCIvdnWWce3qMzwl\\/79omRMUApNCY8JyeK4sr70yZspqq3b9VnTUFlwV+Uum0fPw\\/m3zk9UVK\\nBcU7zrRccH3I6PZoYUk+xi9dmVJYYNE6JBROWBu6Vm7b6olKhvFdGUesKMx7vnHJMLEn47jV\\nQXnd9rAnroTC37Thec5iRV9XsBYvu8u1\\/nZwF+jmBLJP9gCoLG4yvUTR9GVEKxpKEymP18IW\\ntwTRHkuGokBEzN6kl22+nyldZdx1oX2CRkhMsKx8sQs6FhL1rMB0rcCU+9FRNbh3TsD5vKxD\\ntZIZwUAKDL3Ke7ybjbt5L4HkFo1SGq0MSkdoU0DZIhIVIY4hti0IJaMFrTwqvybiibzBi6dT\\ntnLCkoRmNs6QGJx085Cr0Byogfrl1vPZeERFxd07w4th3WLNWYcpHhrybBwLZMAlA+VCeL0M\\nTedFrTlz+fSw41Un5pX8mzLuGA7u5GF9UCoomqlw5zZPbSTjf50dcdVNCVoHVrWbNjt83VGf\\ncCwpCQs6g7L40QZHsSOPp+1n7PVxx18+T9EYzYhKittHNFfcHmKGZxxhyKY9WdNz3PLg4tab\\nwtUPCFE5JDLW9kC1FOKAN25yqKYnSv0BzVcZxapO6KpoMifcul3QkcJlwuSg4w2nh7n8dEPG\\n\\/VM5I\\/1Bvuf0UxKpA\\/qPmWakq8yI7iY2nqIkRFooRBHG1yiZKSLdRCSjFg1wz\\/AS7hxaw9B0\\nOdhcMwF\\/QJQJ7qyJwUSgo1B0+wha7Zkspyev88ip+WZIX0Q8CkFJKJRVIigvQVkp30pAhL\\/n\\nVpkIAQVuThY4n2hiEgoyRq80qPqMrCE0GjFDNGms3xNqk9pl3486TKy4c3vILi7r17zj7AJf\\n+GlGuVujUNQyaOTZvomp1nuExpTniA7P84+2DI57PvHjjEqPJkukFV+7Z4tjfMTzFy+y7Bry\\n7BkLe2PjQ45OLXzhXIvUHM9ZEdzQkUnPhr3MsrE\\/wSEeGpOOwxdp1lZCQXCpS\\/PvN6YtG79o\\noDntOTbvNrjh3oyoQ6PzuNjRS3VrPL4hfOYcizihkcMazWu+TeGYpWHfb9oe4ol4oTbqOftQ\\nOHqVZetez2d+mlHuMbMew8Fd7vHLa0cEtIXq88aY6ilTV2VAYyQhSofoiA2Rb2L8BFo3qYll\\nLF7JpmQdDdWNMVGwuJygRYXUQK7AHB435z9PhlMO8W5WmflHpHtzK00ky38KgssTDfKIQr7c\\nmc2VXrimBx9S5j63+tAaJYaBZCfrK9vwYtnuFrPZwe5FdTDMywI4GA+lFbunhOmG0FHRXH57\\nxl6vMXmVf7HDcO3GEE89fV1w1cZ3Z3TVMj746gI7hj3nXZKQVi0m1rhUODxXGAULH35txNEr\\nNB\\/9z5Sj8jKPvcOeT\\/9xic\\/+OGNqGk5eGz5\\/1V2zrt9+x+6hakInwbknW0a2pUwNOxZ3hr15\\n705Pw4T418nrwga48UFPXNEtkuGjc4W3e6\\/nk28v8O83ZWSFA5tvMu05cU24\\/q2bMpK6Z2xn\\nxondjnedVeDBXY73fSuBbouxbWtN5ECY4Ofj1xqhevw4gzcMYL0mNlP4ShM\\/pjFY4kAmgDKa\\nmk8wBYsREOdQ2qCVx7cC\\/wrRkveoqlZ91Ey2USGt5ILWBFDKGc0SoiOIaJTyzPBdiQDah\\/Yp\\nIc+shvSpVjNZ1hzASELSQZglfbWqyaFsZ1nvAm6ejBnrG6Jj5TTRMw\\/y\\/ZklIqAUo1PC+LTw\\nlRs9HUtta80KVcUXr8\\/orsDzj7VcUA2JhecfFfHjOxwXXZ8R9ViiUrjHxsKO8bDaR6y2yFbH\\n+7+VYnotjTwb+MKTYj77o4Rf7IFiRXHMyqAYfrFNiMt6XvfKe2FFv0ZrOO0IywUF2LTT88rT\\nYjY87PjY5RmlDk1vh6enqnFeuHWnYHrDOLWBel5n99unxPzLz1Iu2wSdi2w+X7X\\/+Xohm3Yc\\nszLEB19+ZkxcSjl0ieHIFYZvXZfylZscpT5LVFDtPTgT2335Rwae4rUQJraXGN9aoGRTasow\\nsqsT5ys0007Q3ThlccbjdYaSGPGh1xJtgjKayWlqTQDrUK03rMoj0kqpnKJvLjoHrSyXaynI\\nkJpTeQ5VFEj+u0hOIjPzhKkZb1ZaD6NS4e+iLSob4vlLdjC0M2aH7OaYFz+ItcKjQODbsm8A\\nPvGYoZQv\\/0mR9361yW5jict6nz2TJaFjYGlRWNylSZywcbfgi5pip877H8M6e+eZGnY8ZyGM\\nTwubJ1RwwRRkE45jFyo27fFMW0OxU5E1hNqYx2dCqdtQ7NDzAn4UL8RNR7cSHt7tOHaloVqA\\n7WPC5vHwnTYOFltt3KEUlLsNhUrgxXWZx004juqDzYPCpNGUOjXaqHnPN0s9y9OMC99aJE2F\\nt\\/x9jXVrLLUU7t4pqKqmWNVo20bpfYRi63\\/KlbwIPHz7AnZt7aRSmCCuNHFYRnYdglILwJQC\\nn4FKyYjwOchkUEC6ZWGhzSxn6Q3wAAAGSklEQVQqbstqU7PptjktVfuqVj+L7qZmz0c0XpG7\\nlbmVqWYUW0iPZjJrsQVrUIPSGDwqnaDppugpbeb4F2xpkcO25ZGWTgBdRAV3bnIw46Mvj7j9\\nYcd37oVKj0Hpx1IkQZl4P9M8onhEWHXf7\\/Az9yggMM+4jzP7JFDC\\/XL7OGTWZy248DIMnJpK\\nz+\\/8xxvPfObbmPCcfYjwjt+JuW+b413fTOlcaPPH4\\/HX52AX+6tCdl1x7DBRqcGW29fiBmt4\\nDKnSmEKCQmG1zbOUKgTz\\/cwu0jlGms4rLGYZ4WctMGao4+couVk3VBBE5xZavqlEgNwtFe\\/3\\n2XwzG1fya0mu0Lz3eQLCkziPFs\\/aVbdxyGF7UTOJjrbt\\/ygrpzbqOWUJbBv03Lvdc\\/4fRNQT\\n4Vt3eDoGbCtz\\/OjXbHi4Hwmj\\/lifnVEEj\\/yM0nPo4J6C+zNXeRmj9juuxzr\\/ccezv\\/kKNKYc\\npx4a3PabH3AUqxoTHfg42ortKZRFa6coVu7ngRuXMzGhcGR4lWCUDtwGgFIeLQqvVLDcZtxJ\\nyQJ3AZpZIy1XUCIoFdzKAFu0L3O8Fk9QYXl8TdRsfG6mj3RuLE\\/NxNaESFIyFZN5gxBhJUOl\\nU0TpKOuOvZWFKyZAz8Tz2hvoUZaUg2MGhA++ooAI7B7xjNaE9\\/1bSmWBRWnVfhDn+YJoTnpK\\ndcfhKwLPx8M7PUkNovKjlVtb9hWz\\/oXlv\\/mV+bkKitWUvhWjNIarJHWF8x4RhVYBN82omURA\\nrrA0aHFo5VuWWDDO8iC\\/BpX7kUpJrqjmJDDyujZR+9h4LZc2dBAE6wvxocJEcksOyd1iDd5j\\npYFtjlKxW1l7zO0MLJ9um\\/3zcN8mxzwvOizEvH5yp+Pj\\/xUKVm3cXrz5KzY4bRl89LUFrFF4\\ngees1axfpLjuIcHY9ho9oe75\\/f\\/b97S8P72DXRv7eOjuARqpJsNSKFWwNkJpm8fT8kGJIOLw\\nRAh2TqBXtUJrGo0oHWo1lJ5VXF7lfQJ+HxegpfgQlPK5faZCp4EE286jybRBZ3VKvkYxG6N\\/\\n5f0sP3Ivus0yNW9J657auMdnoRWpUNXo9oN4wIqtMempjztcmscSjaJQDcmF9ktif67o06VB\\nDSw5YohyT42H71jI9FQnjfo4PiqibREbF3BKo7UNNWetpnY\\/k6BsYa2plhcoKAeiHVrpcI6E\\noIiZyQ4o8jhZ7oZKiJt5CS5s6EjI6+GUw2Y1itToKDzEmtO2UO5Ood3PfmCbqqTpLD0CJba9\\nLAcmGopdmmLXY2co2uu5nz34tK6Qgq7FNY7s28Lww10Mbl7I6ERoPWm4FFsok80UZuhQXa1w\\neYYy9IGKz9t7xeXKyhOIgHILTmzoCxWZVYIz2dQZy0+HmJz3LudKCKxU1idU4kEGVj7E4nUT\\ns\\/Zeexe1pS1txbYf3YaJYGDNOAtWjDP4QB97Huil0azQbGZ4HWOiUgB3y0NvWmlmmtCF0Ceq\\n8t81Hp85lFJoHeGV5BwDs6UhJldOLYw0FfCztBJ01iSWhFJhhN5lgyxeO4SxtJVaW9ryG+2K\\n\\/hofXGOFxev3smjdECMPd7B7ywDT011keTuK1sVgk+vZerRgnIWSDYXgfZNKoUA9aeKcxyvJ\\na3tUQHlQak7fJygcWgSfJEQGSoVBVh65ne7FjVluU9XO3LWlLW3F9kvZb+FH78pJeg+ZoDYa\\n0ax1MvxQN\\/V6L\\/WmBbF4UXgJSQa0DoUcCpQUSbTBKY+SUBPnRBDxASbcB45BI4Jknoga3cVp\\noi5PYWCYvjUj2BZFXrs3qi1teZa4os+sp7jUnVLqHqZ7yTBpfRu77+9jalc3mbOk3iA+dAI4\\nLEpbtAJpegoCIllog5EoYOH7BpFOiOMmpaKjWE7pXaipLhoji8dRVlo4WG1pS1ueVYrtmTWg\\nuUnsqJSw\\/JiduMP2kDUU0zt7AEVjuEhjvIIoE5IM4gMvad5LWijXKJSbdC+LMEbjy4NEVY+o\\nDGVmwMRpA0K2pS3PWlf0N2CQJnaYGAqde5\\/c+Y+hNNs6rS1teTYrtnaUvC1taUvbFW1LW9rS\\nlrZia0tb2tKWp1ex+bZia0tb2tK22NrSlra0pa3Y2tKWtrTl6VVsbb3Wlra05dmn2NrlHm1p\\nS1varmhb2tKWtjyz5f8Do0rRt3XbCQgAAAAASUVORK5CYII=\\n--------------020800050700000706000908--\\n\\n--------------050101030504090308030704--\\n\\n--------------030503000903030801000206\\nContent-Type: image\\/jpeg;\\n name=\\"john-deere-logo.jpg\\"\\nContent-Transfer-Encoding: base64\\nContent-Disposition: attachment;\\n filename=\\"john-deere-logo.jpg\\"\\n\\n\\/9j\\/4AAQSkZJRgABAQEAYABgAAD\\/4RUhRXhpZgAASUkqAAgAAAADABoBBQABAAAAMgAAABsB\\nBQABAAAAOgAAACgBAwABAAAAAgAAAEIAAAAAACwBAAABAAAALAEAAAEAAwADAQMAAQAAAAYA\\nAAABAgQAAQAAAGwAAAACAgQAAQAAAK0UAAAAAAAA\\/9j\\/4AAQSkZJRgABAgEASABIAAD\\/7gAO\\nQWRvYmUAZIAAAAAB\\/9sAhAAMCAgICQgMCQkMEQsKCxEVDwwMDxUYExMVExMYEQwMDAwMDBEM\\nDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQ0LCw0ODRAODhAUDg4OFBQODg4OFBEMDAwM\\nDBERDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz\\/wAARCABwAGMDASIAAhEB\\nAxEB\\/90ABAAH\\/8QBPwAAAQUBAQEBAQEAAAAAAAAAAwABAgQFBgcICQoLAQABBQEBAQEBAQAA\\nAAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIFBwYIBQMMMwEAAhEDBCESMQVBUWETInGBMgYU\\nkaGxQiMkFVLBYjM0coLRQwclklPw4fFjczUWorKDJkSTVGRFwqN0NhfSVeJl8rOEw9N14\\/NG\\nJ5SkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9xEAAgIBAgQEAwQFBgcH\\nBgU1AQACEQMhMRIEQVFhcSITBTKBkRShsUIjwVLR8DMkYuFygpJDUxVjczTxJQYWorKDByY1\\nwtJEk1SjF2RFVTZ0ZeLys4TD03Xj80aUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9ic3R1dn\\nd4eXp7fH\\/9oADAMBAAIRAxEAPwD1VDyMjHxaXX5NrKKWCX2WODGgfynvhrUPqGdT0\\/AyM6+f\\nSxa3WvA5IYN+1s\\/nu\\/MXkjaqsjHr619Yr8nKyMl9leNRVs9W01EPyLG5OS70sPp9Fz7MfZRU\\nz3\\/zCjyZRBjyZOGgBZonU8EYxj+lKT23Uv8AGT0TGPp4TLM60\\/QIHpVkzG31Lv0r\\/wCvRj3s\\nWbb9Y\\/r31Bj7MPCGBjghzbHMFZDT9H9Y6o+mm7+vVirnW9dzqWur6aynpFLhDm4TAbnN8Mjq\\nWU2zJyHN\\/wBJ6dKourZbb61w9a483Wk22H43Xmyz\\/pKtLNM9THy\\/l\\/3bTyc2NuOUvDEPbj\\/4\\nZPin\\/wAx3cjI6mbi\\/P8ArTTW789mNk3Wvae7DjdOroq3N\\/kqtazpdpl\\/XsrInn9TyD\\/0snIV\\nNtF32d17Wn0K3Bj3j6LS76At2\\/ze\\/wDwb7P0dn\\/GKbMR9uPbdWd7seXX1R7m1CP1pv8ApKq3\\nu2ZX5+N7Lv0lPqejFKRO569P\\/Q+Ni94y0GIysGVZJ5JcQH6UaljSjF6IPodTyqyPzvsR\\/wDR\\neQ1yOx2Oxm3F+tF9T\\/3bKszGb\\/25XdbX\\/wBFZhaokEcJA0bBLHHmYjbFGP8Acllif+m9HiZX\\n11qaxvTOrUdUZMFleRReZ\\/ds+3txsr\\/wZXWf4w+r9OeK+v8ASnVjdDrWNfQQP5FWVvou\\/rNz\\nti4qxjHfSaHfESrGF1TqnTYHT8u3FY36NbHTUJ1\\/o1vqY\\/8A4GpI5Zjr+yP\\/AKkZ4c2O84fU\\nZh\\/z+D\\/pvqHR\\/rh0DrG1mPkirIfxi3xXaSZ\\/m2uOy\\/6P\\/aZ9zFtLxqzN6JnNI6tgjGsOrs7p\\nwDB\\/Wyel278W36XqX20frL\\/8Guk+pOVk9E+sWR9Vsq\\/1cdzN2H9LZuDW5TXYtbt\\/o15eJa+6\\nyn1PSqvxbtn56nx5+IgHQtzHm4q1EgdOKP739aEvlfQUkklOzP8A\\/9Do\\/wDGf1H7P0WnDaRu\\ny7d72kTNeOPtDv8A2ZGIuO68BX1IYDCDV0rGowWEcF4Y3Ly7oHt323X1er\\/wlK6D66E5\\/wBc\\n+mdOMWVMbQHV9v0tzrMkH+tj4tS5B15yrbcsgA5V1uQQOP01tl3\\/AFL1RzSJykdIj\\/pf+iTa\\nHNzqM\\/60o4\\/8GH6yX\\/SgyaruBRddcRVinNge6rc5gA\\/f+0MdWzG49t1\\/6D\\/SV2qm1WMbEtzr\\n68WmoX3PJNNbto9waXPc115bUx3pt+luUR8Whj+eOhlr8o\\/S8P0nTo\\/YWBmeq7rNb9ri30Ka\\nH5hfQ4N9XFzn4Rsxtz278e9tbLsf\\/tQz\\/uPTqdCwOjMtt6riZ7cnptdd7LaSxzX0sOvoXG6x\\n1zvRxmvZ+tVU3W\\/zqji\\/VDIAac\\/L9MA6047S7SOPtF\\/p1t\\/sY1ysdT\\/Z3ROltxRivza8630r\\na7LtrrBsdbY++72foqqMfb6FdbKv8F\\/h7VRzc1jMhjxZuLLOUfRj4Zx0PqlGXphCXD\\/rv\\/QN\\njl8Uojjy4I4cWPiyAymeKEjH1f4Dx9U+lW15HqbGlzZ14G7RJwWj1Dqt2YXMZVXhYZduZh0N\\nY2T+bbmPpDWZF\\/7lbP1ej\\/u1b+nWe7lXYmwDRjfQ7j\\/F4ouNkjCMqhP3AN5AcMeL+r\\/V\\/rIn\\nBCciuQ3J4QEZj4q\\/k51uPV0HrQJe\\/AacZzGiB\\/k671q2b\\/8Auz0\\/N2f9beqDloU\\/p\\/qr1Gom\\nG4GdiZnxGSH9Ksb\\/ANLenR+Yfy8f+lwtvlifUP6vEP72P1h9i+0Uf6Rn0PU+kPof6T\\/i\\/wCW\\nkvJ\\/2i\\/7B9sjT\\/mz+zok\\/T+2fsnf\\/wB\\/SV3j\\/wCjxOnxj\\/m8X0f\\/0bmTbs\\/xl5OVMtxd1p+F\\nWE2R\\/nuXI4ojHpHhWz\\/qQuizCf8AnV9YT+d9mz9vx+zMhc9WRsZ\\/Vb+QKhLWUpdzw\\/4vq\\/8A\\nUjmc38o8Z5Jf9z\\/3KdqnDXNLXgPa4Q5rhII\\/lAoQOkpxfUPz2kjsDKZXZpU9d9TsN1WPbk77\\nG0uPo0UGyx1QDYdbbXRZY+ln6T9Ez02ez07EH64PBzcJg5roud\\/24+ln\\/R+zLc6PW2npGFW0\\nQPQY8\\/1rB61n\\/TsS6l0zE6nUxmTuaaiTVbWQHs3R6kb22VuZbsZ6lb2LncfNYx8RlmynhgDO\\nIlV8Pp9qPFGP7z0c+WnPkRhieKcoxNyN8Rvjl6pPCEhQcfFdUPqdh98y8\\/Cuof8AkkOz6l0u\\nP6PqFjP69DH\\/APUXUrXHP8oTXvR\\/5w\\/7lyP9F80P0L\\/wouB+zrrenv6hjn1aqNMysfTp\\/wCG\\nc3\\/C4j2+\\/wBdv8x7\\/X\\/R1eus9y7XpHScjoGVk5tmSy3EFBJfUyz1Q5jm2Ne\\/Ea25ztrPV\\/mb\\nb1x2W\\/Efk2vwWPqxHvL8euwBrmMd7m1ljXP2trnZT7v5j0\\/z1Nh5iGWUxCpRhw1kieKE+OPF\\nV\\/vw\\/SirmeV9rHjmRwTlcZ476x\\/Tj\\/VmgcrvSh6mH16g\\/Rd0m2\\/+1jWVW1\\/9KxUHLQ6If0fX\\nZ\\/8AKTO\\/Ljqc\\/LLwjI\\/81XKD9dAd\\/wCCP7T\\/AJJ9Lt6O35ftL7TtSVCX\\/ZfL0\\/8A3Y\\/8kkn8\\nR\\/YzcZ\\/8ap\\/\\/0rOVUH\\/4ysvDGjcrfUZ\\/4bBZ\\/wB\\/XIYzt2PS7xrZ\\/wBS1dn9cz+z\\/r703O\\/m\\n67RjPfYeJZc\\/HyP8zHtpXHuodi2WYj9H41llDvjVY+g\\/+e1RyaTkOmh+3ic\\/mo+k+GSX\\/PjG\\nQen+qbuiXzh34lNnU3bnVPyGixtrB7wyht3q1U3Uf4VldHq+j+sfpv03p36Prwxjvs2bh5WE\\n+p5qtbSa8iuss9jxtxX13+xw\\/wAHjLiw6PvB5ggjVrmub7mPa76D2e+talmXjdWLft1rMPOY\\nxrB1B8+hfHsrZ1LZ7sTJb+Zns\\/V7P+2MVUM\\/K8cyZyySxT6RnP8Ao8v3oQ+X28n6X6v9X\\/su\\nP25eX5uQxjHjEI5Y6Dijpmj24vT+s\\/6b2+F1Pp\\/UGh+FlVZE8ta4bwf3bKX7b67P5Fle9Wdl\\nn7rvuK806jg34uQcTqFLfUa1rgH7bGuYZ9O2p\\/ubZU7a7b\\/3yxV9lYbsAIrAgMD7A0fCsWen\\n\\/wBFUpfA4nWGY8J2uHH6f78Zw4v8Vn\\/0vwkxyYTGQ0IB6\\/4XC+pulgl8MB\\/eIb\\/1SiHtcDtc\\n10c7XB0f5pcvLG4+K36FFTfMMbP3xuRsW+zEyGZOMRTfWZZY0DSdHNc3T1arPo20\\/n\\/8b6Vt\\nYPwLQ1nuXS8fCP8A0pNUfjMTIA4iI3qeK6\\/weF9O3HkGD2IXn31kxGYfWsmupuym3ZkVsGgA\\ntG6xrP8Ag\\/tLb9n7i6Ppn1q6flsZXmPbg5Z0LLCRU4+OPlvHpe\\/82m91WR\\/Is\\/nFH6zdDyOq\\nV0ZWHsN9LXshzg1ttbj6rK68ifQbbTd6nper6dVn2i39PVsTPhvHyvMyxZ\\/1QyChx+mEskfl\\nIn8n7\\/qZ+dhHmeXEsREzE8Q4d\\/F4hxV3pNnpYnXrz9BvSLqT\\/WyLKaqx\\/wCBqjkMuoufRfW+\\nm+uPUqtaWPbOrd9b4d7vzXK5Q40\\/VXqVpEs6hnYeE3y+zB\\/Urnf5li3yNCD19B\\/6p6P+6crl\\ngY5LOnADL\\/FY+gf2V6vb0p+X7R+zJK59iv8A2Z9jkbv+bX7Uny\\/aH7W2\\/wDbftSVj2vPa9v+\\na2va8P8AJ8P1f\\/\\/T2\\/8AGz0439Ixc9rS44trqbCOBXkt9Pc7\\/wBCq8Ri4zrzm2dSGczb6fVK\\nKc5obpDnsGNlsd\\/wjcrFfZZ\\/x69g6z0yrq3Ssvptp2sy6nV743bXEfo7Wt\\/eps22sXjOJm4N\\nuEzo\\/WfXw8rEssfRc1m80ets+2Y2V09\\/pZFlPrVer+h\\/S+p\\/4JV5kESjMAkaiVerQ\\/pcP+BF\\ngzQEhIaDjAonQccPH+tFAHKQcRwju6J1L0\\/WxG19SxwAfWwHi8Dd2fjjbm1v\\/f8A1f2fvqj6\\nzGv9N52WDQsd7XA\\/1H7XKGMozvhIlW\\/Drw\\/3v3WhPDOPzRIbXrP9BmPuPo1Fzqq\\/zWGyPV9I\\nf4Jtu1rrGM\\/R7\\/0n0025B3J96VLCCTZN9NUkpiUPemL0aQIpC7nz0ITUZV+HYbMO2zFsMFzq\\nHmvdH+kaz9Hb\\/wBdZYgPsDRLiGjxJgKeJi5ue4NwMe3LJIE0sc5oJ\\/euj0a\\/+uWJEDhPFXB+\\nlxfJ\\/hMmMTBuF8X9V6Jl9n1q6S7Es9\\/W+mh12KZawXVuLfVrZWxoY11rGspfWxtf69Xg3+yr\\nJvWNl4tt+J0Po1YNeRnh+TucRtLuo3DDwnbW\\/wCjwMf1X\\/8AGItGHjdJyGZPVOojFyaHeo3B\\nwduTl6Ese261pd0\\/D31u\\/wAO7Irux7Peui+otd\\/1i+uOV9Z7a3NxsYEUu3Fw9RzBiU0+qdzM\\nh9OH9otyfTs9l2VUmcvG5iMNcMbnGQvhjfp9qH6E8XqlOHB6Mf8AN\\/uOjRkAcgrMQIz\\/AK0R\\n6uOf9b9B9E\\/ZfT\\/9A3+Y+yf9Y\\/0H9RJWklo0OzK\\/\\/9T1VU+pdI6X1aj7P1LFqyqxO0WNBLSR\\ntL6n\\/Tps\\/wCEqd6iuJJKfP8Aqn+KXFfYb+kZrqHglzKslvqgGZrbVk1mnLp2f6Sx+VasnL6N\\n\\/jHwKnUXVu6piNO5zXGrOrd\\/1vNFXUXL1ZJQ5OXxZK44iVfLxDi4f7vEt4APlJj\\/AHTp\\/i\\/K\\n+IXZdOPY49V+rjKnkTtr+2dPie\\/o7bqlVHUPqy536THzcefzasvHsA\\/9i6mWf5y95SUf3KHS\\nUx\\/1TKR\\/iyn7f\\/MW+3Z14Zf3oR\\/7jgfCHZv1RA9p6kT4G\\/CH4hpTU9T+rwdtZ0m7LB+ibs9w\\nP\\/bfTqV7wkl9yjVGeT\\/HyQ\\/HFPGr2x0jCPlD\\/vuJ8Xwm\\/WLI2N6L9XqcYuM0ZTcJ9jx2\\/wCU\\nerurpWwz6hfXXrvv69niil53OpusN5a5ulZGBhnG6a3\\/ALfsXqCSdDlMMZCXCDMfpy9WT\\/wy\\nXrXcJ2MiR2+WP2Q4XlOjf4tfqz01rDfT+0bm67smDWCRtdswmBmJt\\/OZ6lVt3\\/DLqgABA0AT\\npKcADZIAGwpSSSSKX\\/\\/V9F6\\/1U9H6Nl9UFX2g4lZs9Lds3R+b6m2zb\\/mIXUfrN0PpNdR6pmV\\nYtlrWvbSXbrCHT7m01h1zq\\/a79J6a5361\\/Wzo3Vfq\\/n9L6Yb8zPyajVXjV494fucQ33B9Ldu\\nxSxc7D+rv1p61kdbqfR9vfW\\/E6n6T31upDGM+yetWx\\/pei5v0f8A329SMz10Irv0C0yHQjz6\\nB6M\\/WPoI6cOqfb6DgFzWfaGvBYHujbW4t+jZ7voO+grOf1LA6dUy7OvZj12WNqY55gF79GM\\/\\ntLzfq7W5GH9Zur4uFbR0\\/qN+AzFc6o1m6yq3dkZTaSG3NY\\/f\\/Oen+m9f\\/uR9orr0vrR0v6yY\\nuHiWdR6yeqUHNxmjHbh10w42Dbb6uOXv9iByGpabUgzOuj2uH1Tp2fZkVYeQy+zDsNOSxhl1\\nbwS0ssb9JvuY9Cs6xinAzszDc3KPT\\/WZaxrtsW0AmzHe7a703bh+4uIwei9Ttt6t17ozzV1j\\np3Vs5jKnCGZWMXstswbZ27tz932d\\/wBD1P8AR\\/ocrE0vq7a\\/I+qv1gyHVPqdk5PULhS9rg9v\\nqN9T0ixwa7fW53p\\/R+miZmvHX8FcR7Vv+DYx\\/rZ9Z7sOrqDfqy9+FbW29tlOXVY81uaLGvqx\\ntjLrHbHfzW31Fo1fXH6uu6didSuzGYlGc17qRkfo3TU4VZFbp9u+i13pv93\\/ABe9ZXQfrd0b\\nB+r3T8Sz7TZl42HSx+PViZDnGxlbQ6qt\\/o+g52727\\/V9L\\/hFzmTjdRwruk9Sufb0fJ6hldU6\\ng94oOU7EGR9nbVW\\/FY1zrn2U7K376q31PyPfUz0UuIgWDe30UZULB4nvKvrd9WbqrrqepY9l\\neMGG57Xghosd6NRdH71rtiWJ9bfqzm5NeJidTx7si47a6mPBc4wXQP8ANXJdW6k7O+pnVMOz\\nqNvW8ttmPZudhWYRFb78euuhrDWxtn6Su79J9P8A7bWl9XetWu6m2jL+sF3VBkMdVTiu6ZZi\\nD1f50W\\/afSa32U1Xex7tiPHrVj+X+EkS1rwGrrN+u\\/1RcWj9r4oL4jdYG\\/S43bo2\\/wBpHzfr\\nT9Xen3\\/Z83qOPRbta\\/Y94B2v+g7+1C8\\/xGfWin6hY12JeX9IvZbTl4teOH5FNLrLa8jIbve1\\n+U1\\/6V2z9X9Guz6fp78qm\\/fkHp\\/UWV9N6xd0zCb0zp9eNkDAdmG+lgyfR3BlP6DY12\\/6Ffqe\\nt\\/wKb7h06bfy+ZAnpqK0B+16r\\/nx9UP\\/AC3xf+3Akuf\\/AOcF3obP+c+R6v2f0vV\\/Y9v8\\/wCt\\n63230\\/Q2\\/wBE\\/Uvs381\\/2p\\/nEk7i8R\\/L\\/CTxDu\\/\\/2f\\/bAEMAAQEBAQEBAQEBAQEBAQEBAQEB\\nAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf\\/bAEMBAQEB\\nAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB\\nAQEBAQEBAf\\/AABEIA7YDRgMBIgACEQEDEQH\\/xAAfAAABAwQDAQAAAAAAAAAAAAAAAwQKAQII\\nCQUHCwb\\/xACBEAABAgQCBQcHBQcMCwkLABsBAgMABAUGBxEIEhMhMQlBUWFx0fAUIoGRobHB\\nChUjMuEWGkJSWJfxFyQzOWJ2d5Kit9biGDc4Q1dyeJS1ttclU2iClqjT1OcZJjQ2VoeVuMLS\\n1TVEVWSYJ0hUY3ODhIWIsrPExyhFR4akp7TDxv\\/EAB0BAAEEAwEBAAAAAAAAAAAAAAACAwYH\\nBAUIAQn\\/xABlEQABAgQDBQMIBAYIEgcIAgMBAgMABAURBhIhBzFBUfATYXEIFCKBkaGx0RUy\\nweEWFyNCUvEkMzVUVmKV1DQ2Q1NVcnN0dZKTo6WztLXT1TdEY4KUotIJGCUmZHakwoOyRYTD\\n\\/9oADAMBAAIRAxEAPwCfRBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBDOYmWJNl+amn2ZeWl2XX5iYfcS\\n0wyw0lbjrzzrig22y22kuOuOENtNg5qSBuxbv\\/Tj0P8AC\\/XbvXSPwjpk4ylZepcheVKuSusb\\nMgHbUG13a1W2lKUv6MOyKQ9s3Q0HNi6U4c5UJGnt9tPzspItE27WcmWJZu\\/LO84hN+4HhDL0\\nxLy6cz77LCbXzPOoaTYaE3WpItcj2xlhBGmu\\/eXL0IrS8obtZ\\/FLFB5KXEyzlp2KujyDziVE\\nNl2YxAqdmzzDLu5wOJpcy8hvjLl0FkYS378oTqSy5L4XaNckwAhexq9\\/X+\\/OlSiohra2\\/b9v\\nU\\/UASnaOFF0ObVbmyAaDW1egNS2v7N6WD5xiymvqAFk03t6rmJNrJXTWZpo95KwBxIuL6WYx\\nRQpe4VUGnFDcmXS5MXtyU0hTY37ysA62N4k3QRDJvflxNOa6lv8A3O1HC\\/DNpe2TLi0cPpaq\\nPS6VILbRL2IFRvVt6YayDu0MsiXXMD\\/wUMZSoxBvTlBtNm\\/\\/AClNxaTeLrbM2HBMSttXTN2P\\nIPNPM7B6Xdp9k\\/c7IqlnmvMclPJ\\/J3AXM2fpXSYDUfKVwPK5kyNPr9TWM2VSZWVlJdRG4FyY\\nnA+AeYlVEDUi+kah\\/HdLb0Zlpx88ylppBGhBBLql+otiJ8NQqVOpEq5P1WoSNLkWMg9OVCal\\n5OVa1jqpLsxMOtNN6xIA1nAM+YbzGO13aZWiZYSHk3bpJ4JUp+XSVOU39Uq0p6slIS6slNFp\\n1Vm6w6M2nUZsyS9dwpZyLzrbaoAVw3ZdN3Tvzhddy1+56gVOK8tuGs1GtThW8UbZflNSmJp\\/\\nWe2Te1O088tt55kAxwEQef8AKjf9JNMwgw3uDbs\\/V3HrghObNLy8jL5ddLJmSLAKv6RSNU7j\\n+YV\\/Q9NaRbcXX1u+BIQ2yB3jMd1rxODuvle+T8tQutpxyNyzjRd\\/Wdp2HiJVy7qiZGs1UlWv\\nKUBxJeY2SMqtm55RLzGr5I6ZoY6XNy9Wh9SddqgWVjtdj6V5NPS9rWhSKa4EuJSpS5ir30xU\\nUazYLrI+aXAvINvbEkkRB4Ih075SuPZjMmWlMPSCSRkUzITbzqQCDqqbqD7SzoRfsE9wG+Ne\\n5jWtuXyiSYG6zbClEd\\/5V1259gvwtoZOVw\\/KF7dZS4m1dFyt1FagUsu1\\/FaRoyG1KZUNq7LU\\n6xa8Xg1MapLCJyXLzBJ8pZcybjouv\\/KB8eJlbn3L4D4TUZB2mx+fqreVyLbJaAaLi6dUrWS5\\ns3AtboQ21tGvohsVJU85oBioSo8Ek9gJiLzW3fahNFX\\/AMyGXQoW7OVplIZA0sSF+YKeubby\\n6bH6towHMT19wAKqS06\\/1NiWb320uhlJOvMm943K17l0tN6sLUuQlcF7WSXW3Q1QrCqz6W0t\\ntBtbCfumu+4Xdk84PKHStan0v5Bh5lj6COoKzywvKFVZpbDeOctRmXGHGXk0bDPClh1wObtq\\nmbmbKnJ2WeSDk27JTMuUdO0GcazNk4fwfaB7zFdivq9cR2Y2o7QpoFLuMcQgK39hVJmVO8Gw\\nMqtkgG1ikaEaEW0jCXWqu4bqq09re4RNPNgg2uMra0pHs0F+F4zeq\\/KT6d1bLxndJzEpnbNh\\npz5pnabQNVII85kUKnU0S73S+wGnl7\\/pSOPXtT02dMirrU5O6VekPk4z5O4zKYx4gU2Uca84\\nKSuTp1flZRwLStaXFqYLjiCUukjdGMmwX0p9Z7oNgvpT6z3Rp38Y4rmRlmcS4hmEk3KX61UX\\nhccbOTChfU62vqeZjFVPTizdc\\/NKPEqmHlEg20OZw8dTfvvuMdsVDSAx8qzSZeq434u1KXQ6\\nH0y8\\/iVec4yh8JcbS8GpisutB0NuOo2gyWEOOdMfKT+ImIdVcbeqd+XnUnkI2Tbs\\/c9cnHG2\\ngSdRtb866pKNYrOonzdYk5CPktgvpT6z3RTYr6vXGtXWaq59eoz69315yYVe39s4fffhyjHU\\ntS\\/rvLV\\/bKUTpa28ndfq2juoVesVctLqtUqNTMuFJYNQnpmdLIcILgaMy67swvUSV6mQVqjP\\nmMcfF+zX+KfZFpSocQR2giMNyYcdWXHVrcWq2Zbi1LWbAAXUokmwAAuTYAcBaE5Qfzr630tx\\nt46nd7NOdIIIIR2g4g\\/H5QdmeB698EO5Cp1SkuOTFKqU\\/TX3Ww049Tpt+SedbKgdmtxh1tS2\\n9YJWUKVqkpByG\\/NpBDrbym1pcacU2tJulaVFCkndopJBG+xsdYTlUOF\\/DX5\\/D2iPrZLELECm\\nv+UU6+LxkHyhTZfkrmrco\\/siQVN7ZmeQ4UKIRrJ19QhAA6I+qp+P2O9IQ63SsbMXaWh5QW83\\nTMSbzkUvKAKQt0S9aZS4oDdrrBI3gnfHVEEZ6KvVEWKKlPoOtiicmE77cnLagd19L3j1LjiP\\nqOLTb9FSh8DGSdM009MajGWNN0qtIltuSZDErKvYzYgzcixLoaDTbDdOnbgmZENMtjZsIMvk\\nxqDZamQMdgUnlKNO+hGXMnpPYoP+S7XZfPFTk7hCtuHdczAr8jUhOEB5zYGb2+w+i2OxLTWy\\nwsgjZS+L8VSoCZbEuIJdINwlis1FkZrJGazcwkX9Ea79B+iIyUVCdQbpm5lJG4pmHUkbuIXf\\nS2nfrGySj8sJyhtGbaaVj0iry7LTjaGK1hphPPKCluKc2rk81Y8vVH3kZlLZfn3UbJersyAy\\nGu26Fy6OnRR1oXPu4QXSlC2FFquYfTUulxLR+kaWbauO3XNWa3eUFpxpxP8A8rOS3GNPSmUn\\n6pKeriPbv9sIKQpPEbukcI3cttMx9LAJaxliIgG4D9Umpo8BYGZceOXQAJvYW0EZrdcqySMt\\nTnxbQBU08tNuACVrUn1Wjfpb\\/wAoP0hpXY\\/dRgbgzWQksmY+YJq+La2oDhMwGvnGv3WGC6zk\\n2xtBMeTrzddE0M2Y72tr5RDSXEtt3hor1KUKQnbTttYtytSS8rVdLq26ZVMP6VsACmXS22ur\\nTO02jylPJLTTbsZEgHiPTzwmpBHDePHj4CJFKbb9p0oUWxKp9CAE9nNU2kvpWAmwzrVIB8kG\\nxzB4KJHpKUCQc1vE9db+rUHDzDjUu7\\/rGlW9Vj3iJelrcv7okVRKG7ow5x4tWbURtHGaBZVw\\nUltJQylQE5KXzKVIqDy5g6oohQWGEvbUPP8AkrWSFqcslye9zhtD+NFRtObdP\\/gV1YdYiSih\\nmlajtZ+l2xV6G0E5ZEPVVvaKISztMyYg8QRJ5Pyjsey+QTMvQKgkEFZmJCZacUkEXAVJz0uh\\nJ00UWlAE3KVDSM9vGtabN1eaPf3Rgp15\\/kXGteOmndaPQjtDTh0Ob82SbX0nMDpyafKQxTZv\\nEq1qLWHVKGqEt0et1KnVRe9RSSmU8xee\\/hnkjR67RbjkWapb9Xpdcpr4GxqFIqErU5B1Km0O\\nILM5JPOsOBTLqHEFLhKm3G3ctVQjzSVJB6j44w+o1er1tTqajb1Zq9BqAQW0z1FqU5S5sJOR\\nKBNST7D4Sct6dpluAy3RL6f5Ts0MqalhKXd9L03JGquyxAsLZWX5Oazm4OhfQCNNANdi1jyY\\nH7fTmXNBq0+trxNltvcOF9+8x6YkEeezZunvpqWAWxbGlBjU0yx+wyFavut3ZSmc3Q9qs0q7\\nJmuUxpK3Rrrbbk0tu67pdz2roXl9ZHLi6fNprZ+fLow5xJS0kJU1e+HFIkkvBKgpBeXh67Yc\\nwVJA2RUh5vWRlrnagPCb0\\/yj8GTISmeptdp7hAKlBiUm2EkkCwcam0Pq0N7+agaEb8ubas45\\npq7B+VnGSbapDTqBcakntG12HCzaiRrYHSJtEERZ7D+US3ZLLaZxP0Z7dqra1na1Kwb+qFvu\\nMI8zNTdFuCgXKmbUSHPMVX5MHWB2mbeTubeHnL26Fl0iUZvOj4vYYTi9VM5MVu0afcdDlnCV\\nAmXnrNrtcrM5LoSEKW45bcq6VHzJZWQWZ3Ttr2zmplIYxRIsKJIy1FEzTAmwB1cn2Jdm2uhD\\nhSdQFFQIjbMYnocxYCeQ2o70vodZtc21W4gNn1LNhqdxjd7BGGGHXKFaEmKqmGLO0m8J3Zyc\\nTrSlNuW427Dq81rZkNS1Fvxq2aq\\/MpAU4ZVqRVMBvN0shkawy+p9Rp9YkZepUmfkqlTZtsPS\\nk\\/ITLM7JzbQzSHJaalnXWHmyoZBxpxSdxAJJzieSVRp9Sb7anT8lPtf12SmmJpu9gfrsLcTu\\nIO\\/cQeIjcszMtMDNLzDL6bXzMutui3O6FKFu+ORgggjNh6CCCCCCCCCCCCCCCCCCCCCCCCCC\\nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC\\nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCOErtfo\\nVsUqbrdy1mlW9RZBG0nqvW6jKUqlyDRyb2k3Pz77EpLtlSsto86hGahmSRGuvGLlcNBLB0zc\\nm9jFL4k1uVzzoeEFNmb8MwQMlCXueVVKWEpQP4Dt4NOa2WQyzMamq12i0Nnt6zVqdS2iCQuf\\nnJeVC7WBDfbuILirkAJQFKUdAknSMaZnZSTTmmpliXBFx2zqUFXchJIUs79EgnQxsvgiL\\/i7\\n8oWrj\\/lEjgLo\\/UynjJfkty4t3HM1Va0qOqjbWZZ5pKZdbSUlZUm+psOrcKAygMkv6u8WeVQ0\\n6sX1TLNUx4uGzqTMawTRcLWZHDqVl21gh1luq24zJ3VMtLGYPznX55aUFTeezMVJW\\/KCwBS8\\n6JF6oV55NwBTpRTLAWOC5moKkxkvoVsImN90pUL2jU3jOkMXSx284oXsWm+zbuOBW8W1W5FD\\nawbaaEEzf79xTwxwqporGJmIlj4e0tSVrRP3tdVDtaVcS3nrbB+tT8miYV9YKbZLi1OZJAzy\\nEa68T+Wa0DsNzMS9OxFuLFSpyxUh6mYX2dVKn5wIIUxXbnVaVpTjbn1UuSdxzCTkM9UbzCgr\\nFardyVGZrNxViq12rTqi5N1Ws1CbqdSnFndrzE7OuvzLy+OanXVEjgY4+KirPlM158rRQcP0\\n2mtm4D1RfmKm+BawUhDP0ey2rcQlYfSk3Bz3uI9M46nnNJWUlpcfpOlcw5w1BHYo4WIU2oWO\\nmupkrYm\\/KFZ5ZmZTBvRzlJdIUryWu4m3k9OFxIKQ2p+1LWp8kWVHLNwovOYGeQGRQC7r0xK5\\nY\\/T2xGVMtSWJ1Hw0pkyNVdLwzs6iUgMpzJHk1crrNyXdK6uf1mbiQSMwonPdq6QyTvVuHRzn\\nuhyAAMgMhFVVja\\/tErOZMziioS7av6lS1NUlCRocoXTm5d5Y9EX7R1ZIJBJClCI3NYjrMzcO\\nVCYsd6WVCXRa1rES4bChbeDe\\/Ekx2NiBjPjFizMuTeKWKuImIkw4vXJvS9LhuZtGqsutIZar\\nFRm2pdhk7pdhhtphhH0bLTTeQjrqCCK6mpuanXVPzky\\/NPq+s9MvOPuq1J1cdUpZFyTqTqST\\nqY0i1rcUVrUpalG5UolRPDUkknQDeYIIIIxCsDdr1z\\/XAEE93j18bQQRclClcAe3m9fCFksf\\njH0Dv7oQVqPG3h1eFWSnfqfb7tw9cN4vDazwSfTu9+UOwhKeAA6+f1nf7YvAJ4AwmAr5DTv+\\n7dDUMHnUPQM\\/acvdCgaQOYntPdkIcBB58h7T49MXBA58z7PHrhJWkcb+HVoQVKPE\\/D4QiEpH\\nAAdgAisLaqRzD07\\/AHxdCe0HAde+PIQyPQfUYrqK6PaO+FgDzAn1mLtVR5vh748znkIIb6iu\\nj2jvg1FdHtHfDjUV0e0d8c\\/S7Pu2tol10W2bhrCZwlEoql0WpT6JtTbi21pl1Sks9tlJdbdb\\nUGyvJbSt3GHmW35hRQw0t5YF8rTa3FWJCQcqAVWzKAvawJA3kQcbcTuHEx8xqK6PaO+DUV0e\\n0d8dwU\\/AHHarNuOUrBbFmpttKS085TsOrvnUNLUCQlwy1HdCFEAkA5Hhuj6+W0QNLWdl2puS\\n0XtIiclX0hbEzK4KYkzDDyPxmnWbbU06kngUKyz54zk0isL1RS6gsa6pkZo7iBwbPEnu01Nj\\neH0Ssy59SXfXpf0GXFac9EnSMb8j0H1GKRlu1oI6ZzzbbqNF7HIJdQhxIdw5uVlwB0ZpDjT0\\ng28y4Ac1tONocaI+lA5+WkOT402akHTL6MeLjYaUkK8vteYpRIXraobTVFSanh5vn7HaamX0\\nhAzMZ6cK4pVbLhuvLuLjLR6ibjTUWlzcWudO6HBITxNhJTZJ3ASzxP8A\\/SMMSlJ4gHtAMJlp\\nB5iOw9+YjOL\\/ALnHpwn\\/AOpmxL\\/9GSY909Fp5OHTi5tGjE0f\\/g2TP\\/6d8YV+CWK\\/4MYh\\/kSp\\n93\\/0vf1YwsU6pDdITv8A4V\\/\\/AIcYNlg8yh6Rl7Rn7oTLaxxSfRv92cZrz\\/J4ablPZS+\\/oy4s\\nONqdDITIW45U3tcha98vTnJx5DWTZyeW0lpC9k3tdo81nxX9gTpp\\/kv43\\/m+r\\/8A1KBWE8UJ\\nNjhyvA8QaNUgR6jLX74PMqgnRUlNj+2lngbetHv1jDqCMmXtDjS5YQ4\\/MaK+keyy02px157A\\n\\/E5ptpttKlOuOuqthIabbSkrcUtQQlAUenL4uo6PWPNKZTM1LBLFymy63Qyh+o4bXnJMl1SX\\nHAyl2ZorTZdLbbi9mPOKG3NxjDNHq6BdVNqSOPpSM0BwudWhpwHO0IXLzKR+UlX0C17racSN\\n43EoHMXNxyPf01BH1VVsm8qEXxW7UuakGTQHZsVShVWniUQ4hDjapjyuVZLIW2424C4U6yXE\\nDnzj5WMV5t6XUEPsutKIvZ1tTSiBpcJWASLgi+guCN4IjHyXvplI4G\\/s3C1vWefeQQQQgEHc\\nYSQRvEIrZBzKdx6Ob7IbKSUnIjL49kP4oQCMiAR0QtKiO8fDwj1KiO8fDwjjikHqPV7zCRBS\\nd\\/2GHq2SN6d46Ocd8Iw6CDuPq6\\/VDoIO6G8UIB3GFFIy3jePbFkex7CKkkb+b2+nx6oSWgLH\\nQRwPjmh3Cakc6R2ju7vAdSu+h9vzgjjVJKDkfXzHshFSM949Xjx8eSUkKGR9fOOyGi0FB6Qe\\nB8c8OAkG4ghpH3dj4pYm4YzfzhhviNfeH1Q2wfE7Y93XBaU2HwEpD3lNBqEg9tgEIAc19fze\\nIyEfEqRnmRx9\\/wBvjrhKMuXmXpdwPSzzsu8nQOMuLacT3BaClQB7j6oUlSkKCkqKVDUKSSkg\\njUEEa6GNmmG3LB8oDhrsGEY2O35TGC0TS8S7at27duGuIfrz0hK3asOgajurcIWv6+53J2Ni\\nmGHyii95Yy8tjRo5WpXELUgTVXwwu2rWqqWG\\/ausW5dcteInSU\\/sbC7qp5QeM0oHViNvFik5\\n7xx5x0+PHXOqRtX2gUcpTK4nqTqEkfkqi4iqtqF7lBFRbmVISd35NTagNEqTZNtxK1+rSxAa\\nn5iwsEpdX26Lcgh8OJT\\/AN0DusYm1YVcuLoH4iGTlrlua+cHalMpSgy2ItlzzkgmZ8wLaRWr\\nFfvKmtSyla5Ynaq9S21NJzmW5R5ewjZThnj7gfjNLiZwlxdw1xHb2KX3G7LvO3rinJVvJK\\/1\\n\\/IUufmZ+nutg5OsTssw9LrzS802dx82YgEZGL5ScnaZNsT0hNzMjPSjqX5Wckn3ZWal3kHND\\nzEwwpDzTiTmUONrStPTmItSjeUfiFjIitUSmVNCSkKdk3H6bMLFkgqVn8+YUs2UohDLKSSEj\\nIBeJDLY1n27CZlpeZSN5QVsOHxUC437Gh4X1Hp7QR59WEHKaadOCJl5ez9Im+atR5dLbSLfx\\nBmJbEujiWayIkZZm+pauzVJlgMglFDm6Y4lGQaeQDkdp2DvyiXE2kiWksd8BbSvNlCENP1\\/D\\nKu1OyqmjUV\\/4W9QLgTd1NqUytsHasS1Vt6WU6dszsmR5NFsUXb5gipZET\\/0jQ3lZQozsqZmW\\nC1FIARMSBmVlPpX7R6XYSkJJXlGsSCVxjS3rCYS\\/KKO8rR2rY8FM5lnvu0PXraWPBGpXBjlq\\ntAnF9UvI1PEStYO1uY1Aik4v269QZTXUBtSu66E\\/ctlyrKFHJC6lcVOU6jJexTk5s9ntnX1Z\\nOIlEYuTD68bWvi3JrJMrX7QuGlXLRJkhII8lq1Fm52RfyBBOzeVnmOA42vSsQUOut9rR6tT6\\nkjKFHzObZfWgH+utIWXWlDil1CFA6EAxI5aekpwXlZph\\/S5S24hSx\\/bIBzo\\/7yQd2msfWwQQ\\nRt4yoIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII\\nIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+DvvEnD7C2gTF0Yl3\\nxadhW3LBXlFdvGvUy3aWhaEaxbRO1eZlZdT68gWpZpTsw6rJpppS8gNP2PvLuaJWGJn6XhJT\\nrux9uNkFDMxQpRdnWJ5QlKwtqYum5pVNYeKHtmEvUa0axIvo27rNQIDO3j9cxVhzDTXa12sy\\nFNBGZDcw+nzl1INiWZRGeafsb3DLLhFiTuNsGcqUhIC85NssG1whS7uqG+6Wk5nVf91B3jmI\\n3ex1jiVjBhVg5RjceK+I9k4b0QhZbqF63NSbeZmlNlILMiKpNy7lQmlKW2luUk25iZdW4hpp\\nhTridaHDjpy2emvi95ZT7Pr1u4EW1MnZtyGGtKC7kclt+qmcvW5F1asMzYUrWVOWyi2PNQ2j\\nYgbUPaqrpvC779rk1cl8XTcd5XFOnOeuC7K3Urirc4c1rHlNVrE1Oz0worcdX9NMKJWtZO85\\nxRmIvKQoUn2jOG6RN1d0Zkpm55Ypslm0CXENZXpx9Gtyh1uRXawzJvcRKdxzKozJkJVx9Q3O\\nvqDLd+YQnO4sdxLR48NZhON\\/LsaIeHLlQpuF1OvjHivy+aZeaoFOVZtkuvoADrL9z3YxL1sI\\nSrJtuapFmVqTfKFOsPuMFp53UFjVy6mmJiL5ZIYZy9kYF0OYCmmHLco7N33ehh0FLzb9x3gz\\nP0svqQQhudpFqUSblv2aVdZmgy6NLYSAAkDd0dPfnCyU5bzx5h0ePHVReIdt20CudohNWTRZ\\nVy4ErRGvMiARYWnVKdqNwN5E2lN9QgEJtE5zFFanLgzRlmz\\/AFOUHYAa7u0BL5HCxdItw1N+\\nyMScZsXcZaoKzi1ibfWI9SbWtcu\\/el01m4vItoAlSaczU5yYl6cyAA2liQZYYQjJtLIGUddQ\\nQAZ5ADqAEVNNTczOvLmZyYemZhwlTj8w84864o71LcdUpajzJUT7I0ClKWorWpS1KN1KUSpR\\nPMkkknxMEKpRlx49HN6esb+mKpTq9vT0dkKoQVnoA4nxzxjX47h+r2crb\\/Awg6a7otSkqOQG\\nZ8bz1Q6Q0E7zvV08w7O+L0pCBkPXznti6GlKJ3aD4+PyhpSid2g+Pj8oIIIIQVAb\\/ZHgST4c\\nTBBH1tpWNet+1EUexrQui9KuSkCl2pb9WuKoku57PKSpErNzWa9k7qfRgnUPCM4sOOSw068S\\nUNTEhgJXrWkHNUuT2I1Qodg+TpVnqqco9zVKQuVY5lCXob7jeY2wGbcbOQoFcrBSKXSalUAo\\n6GUkZh9A9LKSpxttTaQkghSlrSlJBzFIuRly0nNzRtKykxNG9vyDLrxBFtbNtqsBpcnURrzS\\nhSuA3dJ4QullIyJ84+z1c8b77A5AvHSrFDmJWNeGNjsuAEtWlSblxBqDSTxS8xUGbAkdsnM+\\nYxVJhrofzIjNqw+QZ0aKJs3r\\/wATMW78mkbPNimzNt2ZRXclazhdlGaNXqwNrkhLWwuFotJL\\nwIdd2LjU5puxrH9QyqVSmac2vLZ2oz0s1a97lTLDkxNIy6FQVLhViMqVWVbfMYQxFM2PmPm6\\nD+dMPMtW5XRnU9x\\/rdudraRPAOYD0CL2Zd591tlpC1uuuIbZZaSp1151xQS2022nMrdcUdVC\\nEaxWv2TjrH5LvQSsEMLpej3a9bmWVEqm72qlyX35U7s9kXZiQuus1akDWAH0DFMYlUOZuolw\\n9vjKu3rFwWwjYCLUs7C7DOWYYSkJt+3rUsphEu0yptKSKbK01tDTbDqgE56qGVqSMm3FAS5r\\nYHOyrCpmv4so1JYaAU88207MMtDeorfnHaW2hITrnVoCDoQCY3sns2qcwtKHJ2XStR0RKMvz\\njhFtLJKZfMq+hANuSjEEGzNFfSTxC2ZsjAHGK52HQkpn6XhzdkxSkh0FTanasKSmmS6HAg7N\\nx6bbDm7LMxlTaPJK6et3IafGCRtmTcIAm7vvWxKIps5MqO1pa7jfr7eTbwWs\\/NGX0bzOt5Q1\\nsTMUqWNuFtKSozF5Ut4p3AU0TdXKlcyQaXLzScjkrNZIR+MvLh8JUtKHDeTzTJs3DVjmQDK0\\n2XYa3HVClLqE9JuhKwkLSNkpe9KVoRksiMVFPk04VzfhRtww0p9n0nJOTxTh1cyEmyQldNp\\/\\n0pUtVBR9AJJtYEZVETmnbCq1OZSKbiSZCtzjdOMiyo8w7NMuN5bb\\/wApfv1ERwLU5B\\/SoqoQ\\n7dWIuClpMLHnMsVi8LiqjJ1c\\/pJaWs+SpZHSW624cwdwyG1yQtn5P3KJ2b156Tz73np2kjbW\\nFjUtqthQzKKtVb5nM1OJ3JHzKkNrzUC7+xxt3qGlvKpyTSrKmHuP0s\\/Wm5cp81AP0EtTpnXz\\nGsD+uUfVSveFlKfi5\\/Ssvd46tOoVtSSSBvfaqU88B5p8wpn5NobgpKtZlZ1V+aUKTrxB57yh\\nvImw9dKK9U8TzDBAKJCkYzfzqJScodmpakUp5IBvdDqm7AHMVjSdSHk31ZzKXaDkSQLLn6yy\\nki3FTclNFwEnelTQ\\/tQLRh9bfIPaK1ObbXc2I2ONyTYQEuCVrdlUGmLXsUJcWmUbsioVBB26\\nXHmkGrKS22tLL222Jee74t\\/kddAqhlKp7C64bqWNYoFfxKv1pIUXGnULKLcr1vtu7NLZaDTj\\nbjLjTz22aeJa2POTukZirOAhutSdOCjkryKjUzMApKSkKnpedcQDra2slSVhWRStO4R8rN4w\\n4nz2sl69q6gKSoEyc2KccjqA6iqe3LKR9XJJQUaua9X66hESnfLm8l+lBbdF2VYpq60C6HZ3\\nD2GGpd1dvRAen8QT02hNwMxVJgjXKgnUzCS8myZTlLzWGGBpcLM3PLSNL3S7Jdmo77flTfie\\nEd8UTk4tB2390lo04bTGqHED55lKlcgCHXAtWZuKo1XWKVZ7NxYLjLY2TKm280jtymaL2i7a\\n+q7SNHnAa31B5pxL1Pwnw+pbgfZCi06HpegMKXMIQlSku621GRGZjXDcmL5pGsbvxQNMzAUo\\n3JeqpIqEyohKj851JoKDymiBvAcWhWrzg9GV3So0bqUp5+u6Q+DEq+hK3HETeKllLn3UMgoW\\nESprbk9MrSRqFtlp10r8wI1+GsT\\/AO0GpbhSvB\\/k4VGoqzANupq0vKEJKbApTS8H1QrJsEht\\nLiAUqJz6BJ3A2G0GnXTP4ow7TMgupApsm1YJtv7eflcth+cUHLy1jeZTafhPaSmDR5HDu2jL\\nqeMqqmytt0Yy6nApEzsDKoldkVh51MwUZa21O0z1zDl3E\\/DhnLWvu0la5Vqhq4KXMZZZbzsZ\\npwp+tuC9UqGeqDkqI7VW0\\/8AQ2opd8r0grFf2WyC\\/mp2qV4KS7kUhs0KmVDbZZ5L2JXsd+1D\\neqoR8FUeVD0Hqcl8DGk1F9jVylqdh9ifMqeKtTNLE0uy2acvVCioq8tQkBCkhRdGoXHPLm27\\nzwQKB5M1TbbNgC9KYvqaCCWrHPK0CmNhIBOZSvRAWgm2U51JwLsykwUze1CgN5QSUN1OgSxG\\nUG9m1VB5RIAACQMxKSka6CSe7jHheyCV3tRFJQQDsXXX1ZghOSEsNuKcBUrMqSkp1c1bkErj\\nj5jHrCWWCCu8pZWsTkZemVqb+rvOsJSmPlvcSQV5E8BnkCIxc9yt+hpJupbl7kvipoLeuZiQ\\nsOrttIUpS0lkipGnvlxIAWopZU1quJKHlLC0J+Te5ZLRLaDpbo2MkyWy4UbC0LeBfKArVLXl\\nF6S6U7YgFG2LISCnaBog6rC\\/K98ryaQTT9gFElllKMhqFAxesJJWCStCsQ0xSroGUJzoKVnO\\nolJDcNGibFGlWf2kIcFzfzepU1W4J3KbkZhPEHiFagagmJSD2kRhGjIoud97ziSGaDcA1Muc\\nh6lsgZ8ABrcBnl50Jf2R2E3\\/AM35v\\/0JV\\/8AqcRXf+7U6LP\\/AJA4\\/wD\\/ACWw6\\/2qx849y2GA\\ngdcDOFGLrjIWrZOOostp1bYUdmpbSLneS24pGRUhL7qW1eaHVgBYxh5T3lwPrJRsbwS0AE+g\\ncP1xpA+qn0TM4\\/zKJtqApVieAygJXKbBmQM+PJteY2uiabdN9PrBihqy7wASBfW2oNpYLmkh\\nhQhGsmtVF0jfqNUWqBZGY35vS7Schxz1geOQ3xRrSRwpcCiqsVBkpJOTtEqZ1ubP6Bl8EZ79\\nZRSrpyzOcT7\\/ALtngR\\/glxb9dnf0jg\\/7tngR\\/glxb9dnf0jj3\\/3lPLmzhX4pME5AP2r6Fnuz\\nJtvucelwHW9gsDu0MICNgVrfhxPE\\/pdo7m4afuFl48U8+RiWN\\/ZHYTf\\/ADfm\\/wD0JV\\/+pxe1\\npE4RulQXcr0vqjMKeoVfIJ6BsaY6rMZfhJAyIzzO4RNv+7Z4Ef4JcW\\/XZ39I4+k\\/7tTos\\/8A\\nkDj\\/AP8AJbDr\\/arAfKd8uGXUhS9jmCXQb+gmgVt1JsB9fzbH+dAubi6k5tQL5VWWiU2DPBQR\\njycRbLquabaOu63b0NIVuN8oOW+ttIlaMY94STSlJbvFlGonWImKXXpRJB3eYqbpbKVHPilO\\nsvn6DHJN4z4XPN5pvWjjeU5POPMLOR\\/FeYQvLMjI5FJ3b9wiKZL8stonOtNuLoGNMqtYKlS7\\n9oWsXWid2o4qWvp9gkcRsn1p4DWzEfWSfK56G80620\\/Xr9pyFpUpUxPWJUXGWiBrBK005+oT\\nGus+aNmw4nWy1ylPnh9vyuvK\\/lUD6Q2BUGaUkLKjT6Bi5AJSRlKUIxJU16DTRau0P7XYXTCh\\nRdijygGNo6WwSkDt6jTgPS5qXIS48TYZPzolONYo4cvZhN92klQTrZOV6msJGWWZCnplpBUd\\n2SQrW35gEZGG1Rawru3XVV2sP7lExLIacNSTblZ20mCVNtrM0mZDkuFK1kIVmySsZZkxGgp3\\nKkaDtRS0XsZJilvOvlkS1Sw7xOQtJKghDjsxKWfOSDLSiQdo5OANDznktJSTH3tK5QbQyrBS\\nJTSBspkre2AFURW6ElLgSlesV1ykU9LbIC06sw4US5XrILuslwIyGvLk29yOf6e8mapONgnW\\nXksYU1sAHU9pM0OqNLSR9VQFtFG5B0dOB9mE6kJldqNBXmsQhyqUF862sC2mfZUFam6VJSQN\\nCN4O+mqaNGjFdSnF1vR\\/wGuQuOtPPOVLCnD2sla229iw44qboMyS4hlOo0pRKkt5to8wx1FX\\nuTk0G7jK\\/nDRkwul9oCCKDRn7WAzdDqtn9zU5SNkrPMJ2Yb1WwWctkA0NX9F0sNGSsBl+j6R\\nOCzzxCnmWkYo2ZK1BrYOlBfXJzFZYn5fVdGshxxlrWCkuJKkLQs9425jJJVhSG7PxVlao4pS\\nkNotu+Wp9eulszSkoRS6s6oqDQ8pWkb0oBePm+dCFf8AtBpNvMrF\\/k31CQKLhx5VYamtEkZs\\n6Kpg6nFvLf0kl9YuLkpzEQk7D8PVDKJDFeHakXCChBp0i7mzgEFJZqMyV57gpIQM1xa++O47\\ni5HPQBrwdVJYRVm15h1Trq3rbxKxGB2j7qXlFqUrtyV2nMBAC22mJeTal22nFJaYJ2BZ6JuX\\nkGdEeqhblv31jpbEwSottt3JZtZpjaS64vJUvUbF+cnFBJQ03\\/uugBpvN3auFbo7lk8XcTZE\\nAMXvcK8iQPLKg7UTvVrDNU+JlRGv+MfqgtjzPMj6mR0icWZPIOXAxPoSBkieo1IXqkax+vLS\\ncrMK18wcluqUnVGrqc+xkfLs8meplDdb2TYppS3LF12RoOFZllpZAJJfla9Tp1SL5gFNyqlr\\nUQVNAXUnUznk2PqzKZRhh4bgAJuSWobtEsyakBXMlwc8xMa67m+T30d1LjtmaUFSk3BkWZO5\\ncK5WpJeOTSVJdqVLvilKlylflDgWmkzGaVMtBobJyZXjTdfIGaT1PDj1pYp4I3MhveGalUL1\\ntqoTHnNpyZZTZ9bkNbWU6VmYqkujZtg66nHAzG9eQ0qr7YVq1Gj2xPtBIzLcrUJKYUfMOZcR\\nUX2UDVCvNEp5ritYeYgoP2tO0tmyoJq1kqCQkaz1PriXFZgoGqJaZpyMs8lkEznEIQAfOWJf\\nIeUf5FeICA9WarheYeISBP0bGLAQQE2zLkGKzTWQbWKlrS3bVRBIVEQn\\/JvqzVyzQkuAAkqk\\nK00b8bhE7NJUSOCUt\\/8AdOsRVLu5HvT9tRLrzGDcjdsmxntJq0L\\/ALDqCyCGlJLNLn7gpNdm\\nCS4pGqxSnXAph7bajQbcdxQvXQ80qsPis3ho540UOXSSTUH8OLsmKP5rhZ1UVmRpkzSHFa4H\\nmNzq16rjLu9p5ouzkadpS4ezQCZ+RuWlrAGanpKUmWSSkjzVyk868dQjLz5ZsDXQPOOvs\\/ua\\nbjjhXVCAxeEhLqyyKKnLz1LyVlwW5UJaWaUd4GaFrRxGeaFZTqmzvky4qKfwa23YaZfeylqT\\nn8UUGWmNLZkop1WRS6iomxVY5lAXVqgpEQio7C63KBRNLxGwBe6zIefMpO8XclGUoy621c13\\nZjrHnVTUpMSb7srOSz8nNMLLbsvMsuMPsuDeUutPAONqAIOSk+iG8ejXW7ewexYlkSty0PDX\\nEuUKNRuUrlNte8ZYNpUpWqlioMVFrUClqWEhsgKcOfXixffJiaB2IPlBrWjbYdKefDhD1jfP\\neHIZWolQcZYsOrW3IpLTm9tpUq5LEEMuMrZGyiWnYa7Py6ZvDuLqPV5Z1JWy8WlIYWFBKm8s\\nzIv1JtaSFC60gC3pJQQbCDzmzipSy1NonGc6TYom2H5NY4G6QJggg6WO\\/jaIG6k57xx5x0\\/b\\n7+3ikpIIKSN3R0d2US+b\\/wCQT0TrjExMWJfGMGHU64o7GVFYoN22\\/LawBSnyCsUFmvu6pGYL\\nl1HME8d2zwdxE+T34t09U07hXpAYe3agKLkrK31bVxWHMbLerYOTNBcxAZcmGwUNNvFiUYmF\\n5OralE5NJjU7sex3IZslOl6ihNznkJ2XX6IF7pamVSswq+4JSyVXFraiNBMYPxBL3Ikg+kfn\\nS7zLl9+5BWl089G\\/HXSI7i0FB6uY+OeEVJz3jj7\\/ALY2cYjckVp8YdCafdwSfvelsa5FTw7u\\nW2rsL5QMz5NQpeqS12rIBBTnbqAr6jesd0YE3zhXibhjOmnYkYeXzYM8l5TCpO9bTrtrTXlA\\n1iprYVyRkXS8A24rUSPqoKohk\\/h+u0gk1OkVOQCb+nNSMwy0rLlzZXVoS0tIzJupKynXQ6Xj\\nRTEjOyhtNSkzL7gO2YcbBvusVpAN+BBIPCOuIIUUniR2nv8AHv4pxqSM4uN46t8oxYSWnLeO\\nHOOj7ISUnMZcCPGUOu2EVJyO7gfGUeoV36jd39fD1w6hV9Dv+I+fXOGpHEHsMIEEH3Hph4pO\\ne8cff9sIqSDu9RjKSbjv4wuGa05HMDcePV9kfXWLiRiLhdWW7kwzvu8MPbgZLZTWrKuas2vV\\nMmV7VptU\\/RJySmVtoVmQ0txTe8+aczHyxHEHsIhBQyOXq7Iy5aYeYcQ6w64y82czbrS1tuIP\\nNK0KSpJ3i4INjHqVFJCkkhSSCCCQQRqCCLEEcwQY3B4IcuVpy4TmSp933BaWOdvypbaVJ4l2\\n+21X0Soe2rolbvtJ63qq\\/PrSVttz9yC5w2hWqZZ1LTKG9xeBPyg3RjvcyFMxxsO\\/MD6w+tlm\\nZrEghGJlhSw8xDk1MT9FlKbecukrJe8klrGqYZZ3mdfcT9LDqUnI7uB9kJLGYz5x7osyhbYM\\neUIoSmsKqksi37FrKPpBKrZQAZlakz4ACbAInEpFzpcC28k8R1aUKUom1vNjKA3M\\/l02FgBm\\nWe0SOFkOJsN24R6VGD2klgFpAyCqlgri9h\\/iSy2x5TNSlr3JTp6s01slsj54t5LzdeorgS62\\nNjWKfJvDaNHZ5LGfeceXjSaxV6BUpSs0CrVGiVmnPJmadVqRPTdNqcjMAFKX5OekXWJuVeAK\\ngHWXW16p4xs\\/wC5ZrTuwMMlT57EtjGe1pTZNqt7GiRdu2bUy2kNuhq9Zabpd\\/eULZ1Usrnrm\\nqMoy8ht3yB0F9qYuvD\\/lD0uYyM4jo0zT3CQlU3TVpnZa5AJW5LulmZZRe4ytqnFaDfc2lcnj\\nRpYSmelFNnS7ssoOJuQLktOFKkgdy3FW3A6CJ58ER7tHz5Qho4XwmQo+kDYF44IV15xhh+46\\nLniNh8nWcLT09Mv0yVkLzpjSvon0yMvalwhhvatOVJ0y7Tk3uwwkx5wXx6oQubBnFGx8S6Ol\\nLRmJi0Lip1XmKYt0BSZetU2XeVUqFOFJTryFXk5KcbzycYSMgbsoeLsNYkQldErMlPKKQsy6\\nHeznEJIBu7JPhubbGu9bKRcEX0MSmUqkhPAeazTTiiL9nmyOjndpeVyw55bciRHcMEEESOM+\\nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC\\nCCCCCCCCCCCCCCCOo8W8cMIcBrZXd+MeI9o4dW8kuoYnrqrUpTl1F9gNqdlKNILc+ca5UQlb\\nbnzdR5WfnlBSS3L6uRLTz7Ms04\\/MOtMMNJK3XnnENNNoG9bjjhShCRvKlKAEJWtDaVOOLS22\\nkXWtaglKRxKlKISB3kgR25DV55Euhbzy0NNNIU4444pLaEIbSSpa1EpSlKQkkknJPZmYjoaS\\nnygrDW21z1A0WsNZ7EqqNqdZYxBxJRP2pZSXG1q2U3TrSlXGL0uGRfaAzbqs7YM42Vb23SFZ\\n6BdIvT50sdKZyZlsXMXrhnbXmF5ow\\/ttwWlYTTaSvZNv2tQhJSVZdYDjrbE\\/cZrNVQhxxry8\\ntnKKZxRt2wZQStimuO4knUnKEU0hEglV7WcqTiSytBG5cm3OJJtu1Ii8\\/i+mSuZEtnnnRcfk\\nvQYBFrAvrBvfm024m19b6RL40jOVv0KtHhdQpLuI7eLF6SKXWxZ2D6Ja73G5tLeXk9Rutucl\\nrJpamX8mKhLO3A5WJIl5Jo7rrDzB0R6Q\\/L1aTGI3zhRcC7YtjAa3Xy+01WVBq\\/cRHpdaXWNp\\n88VqRl7YpJmGVIeDVPtJ6o02ZCfJbgeLIfc0SJGQ6zx7oujnTEu3XHGIFOMSUy3h6RWCkM0n\\nMiaKDb9sqTmabC+GaUVJpVpdHOET+LKrOFSEOiUaNwESpLaiOGZ7V4kcci20nflGlvvsRMUs\\nSsXLhfurFO\\/rwxDuR8ulVZvK4arcU8226sOmWlXqpMzCpOSTkAxJSmwk5ZpDTUuy0yy02PhE\\nJ5z6PHjvolOseocYWAzyAHUAIp+ZmX5l1x+YedmJh1WZ195xbrziiAMy3FlS1qIGqlKJ08Ij\\nSlKWoqUSpSjcqJJUSeJJ1JMXJSVnIenqHTDxKQgZD09Z6YohAQOknifHNC6E8FH0D493jPEJ\\nsL9GExVKct548w6O3x9l8EAGeQA6gBDJN9T+qCADPIAdQAhZKQB1858c0chSaPVa5UJWkUWm\\nVCsVaec2MjTKVJTNQqE46QpWxlJOUadmX3CErXs2W1ryRnvAMbEMGuSi04cZhKzkthDNYdUG\\nZU0Pn7FydasNloO7Ipdct2dbmb5eYDTm0MxI2pMtaiShLhfIYVsqZRKxWXC1SaZP1FQOVXmk\\nq8+lBsCe0cQgttgZk3UtSUgEEkXAjIlpObnF9nKSr8yvS4ZaW4U33FWRKsotc5jZIsbkC5Gu\\nVtsr3ncnp6ez4w7AAGQ3ARJqwi5AG2ZQy0\\/jvjzWawv6NU1beFlClKFLNrABLaLuupNcfnGH\\nHCEeZZ1LeDafonmnX9oztJwk5NbQnwZ8lftrAW0a7WZZA\\/74MQ2n8Raqt8K1xONovF2q0qmT\\nSdXJt2i0ulpbyJabQpbxXZlJ2IYvqBQuouSFFZOpS+8JyaCSQLpZku1ZJt6VnJpojQGxKgmS\\nymBa5NWVMCXkUGxs+52jtjbc2wHNeYcW2RY3tEKLDXAfGrGOZErhXhRiHiEvabJ1607Rrlbk\\nJUhWqVz1SkpJ2nU9pKskrmJ6aYYbX5q3QeOyLCrkTtNS\\/wDyeau6mWJg9THQl1a73uxiqVgy\\n68svJ6NYzN1lM0EHXMpWJ2jrQAUvOMvJ2US46jf+G9lSzdPmbht+ksU9ltiXo9NUy65Jy8un\\nUalWKPSm3nWGkJSG2WkyrTaUIISMkb+o67pT2lJ7RFCotYrbqc0pdmSxSJNauYocWZycI5iF\\nyKDuAGe8jArp8nfZtmO0LaxSFzsv+30mUqUu5PAotnCqFRE1avAkoWgFISTcoALgBFm0HYbV\\nap2am5Cs1AKtZ1EumnSS78POJr8mRqD6Myk\\/nHQ2jU5hfyA+EVGMrNYv4233ez6Al2Ypdj0W\\ni2JTVO5pPk7k5VVXpUpqUSSptbzJpMw+PpkeR\\/VGxDDHky9BzCgy71C0frQuGos7NSqpiKaj\\niRMvPt\\/VmvIrznazRJOYBCHAKXSZBlp1O1ZZQ6d7CtaT1\\/VHWRSJai2+yoHUcalV1GdSVpy1\\ng9UFuSi9TdqDyFPOVlYyEdJXZixcjslNVO8b8nJKlMJUubfqdbTSKLLoJyKn0F+TpjCd4AWU\\nI3ZJz3ZGo6x5bPk5YSX5vgLZ3XMYzyFJTLzbtNlaZKPE5EI7Ko112frqVr0NvoZKiVAm6iQL\\njo3k6vS6Q9ON0OlNoTnWt8uVSbZAAUpZLgLKQkXJUmcFtRdKbRswbqmGOGtNaoknM2VZNMlA\\noMUOmJpNElmSrVK\\/JqNTksBOZA1y1KZ7hmMgMvgqxpKYY0vaIlJuq11balI1aVTHUNrXnqq1\\nZiqLpza0BQzLiC4hSDrtB0FBVoiv7lAtDnDZTzNdx5supTjOsDI2U5P4gvl5OsDLKdsqRrkp\\nLPhaNRaJ2blUy6\\/NmlskExhHfnLZYGUcPs4e4W4kXvMtFYbdrszQrHo8ysK81TM63NXbVwws\\nb9eYoDL43pMsBviMzXldeVNjYFvZzsTkMNyLwAl56syFVn1pQpFkKl6rV38MUNzKSTnXT3W0\\n2QChKfr7x3D2x\\/DQy4gx5LzTrAsuVp0zLqKSgpuhUjS2qnPNngEdogkXte1xJoq2lm7rKRQ7\\nPQhIGYfqtV11HozlJOVBQEneT5asqyO5OrrR1hU9JDFGohQlp+l0VKs9b5rpUstWod2oldVV\\nU3EjnCg4Hc+CwMhERe9+Wp0hqyXWLHw\\/wwseUd19nMT0rXburUv\\/AL3s52Yq1Io6igZ65ftx\\n4LUUlIbIUlWIl3coFpqYjuhicx0vuTUrXDUrYTNPsVxCFk+YlyxabQ554ozAQ\\/MPzD6f9919\\n4jU7TPLdx0FLxNtfZwdKLCs8rRaizQ5lhC8l20HBNKlkuJQEJSVPVgrylZ7RedZVqHtqWw+h\\nC1JwrUK66nKUvTEmlyWWUnVS1VucLrdwcwCJEjd6KSNJp9zYrXUqUfqF03\\/VJWly7ec0\\/Ubg\\nXTKSwjNWbj6VTMrItZEj6VYB1dUZZZRiJemmboq2Kp5V0aQOF7c0hbvlMpS7sp901VpxIKnP\\nKaZbLtaqjTpO8Jelgt05pQlSt0Q7qlScYL\\/m0T9yLvG4p0ghM9d1XnZiZCSolShMXDO7YJJK\\nlDzjtAdZGtrb+SkcELrmNVU3N0mQSrihUw\\/MPpOY\\/AYl1MHdnmfKd54dKYk95K8pVH0zu0Tb\\nRX8TTRUVuhAL00gmwWEztWqddeUVkek4qVRewui6bxoZzyo\\/M0Kaw7g2iUtsCyfOJ1cwnS1i\\nqWp0rTCkW\\/MDyrcFm2WJLl28rnoa22txuk3Bfd+FkE69pWLUZZDyw3tNm0u9X7OCiHB5OVK1\\nGFr89twy5DxxoujlwLElVOJsrAK7a4jNQaeua9aNaiuLZStxilUa8wTvdJQH92ohIc+lUtrT\\nXJYCSacjUbimnuOaJKRalchkQAHH35zPI+drbJOsPNyTxj6yTwYseV1dtLVCoav\\/ANeVB5Gt\\nu4qEgJFPXkAB6CREip\\/k6bAKSEiZk8S4lKQLmfq82znKRvP0WigpuTqQnKm9tBreBVLym9oU\\n2VGWqFMpnpFQTTqMw4E3N8qTVjUCbXsCok6m6tNM3bl5bPHmdLqbSwpwooDTiSltVcN23NNS\\n4IWNoh2Tr1ryy3Uazamy5JLZ1kHXZcQrUT0DX+Vd02K+4tNNxAt+1UvkpTLW5h7aD2qlRcGy\\nZcuSk3FNo81YShSH9ukNoUl3XClq+Lk7Ds6Ty8mtqkKKd4XMSbc4pKgUkKSucD60qBAIUFAj\\ndqnzjH00tISsojUlZaWlU5ZBEuw2ykDccghpKBlmBmCeiJnJYF2L0i30fsqw9MZbBKqtLM1J\\nRy2sVGqJqhUdLkkkk21vrEFnttO0SoX7TFmIUg6nzSoKpY1sd1NEum2twANNQALmOsappdac\\nN5KWt3GvG\\/J05lVt1mt2wyM1Nr81VrIpDLKc2kAahQkJK2xkl11CutqpM6R94qLtw3TiTX1n\\n8O5r5qs2s5LW+nW+eq4pw6rj7iwMs9ot0pG0LmeUQQOff7PHriuqkcw9O\\/3xK5SpUamW+hsI\\nYYpQTbJ5pS5VjKBbd5ozKgbuAFhpuiHzmLsQVC\\/ntTqE4DYkTtRnZu50uT2rxBJtqeO7vjDu\\nXwWvZ7LaN0uUzz\\/8In9YjJRG\\/wAlZmebzt2fmj8bdHNsYD3ArIzFYo7XDMS6J2ZGetwG0l5Y\\nqyTv\\/BzO7L8KMq4rkeg+oxmrxhWV\\/VVLNf2jAP8ArFORpzUJo\\/noGvBHeLfWKuXtMY1tYAKz\\nBmLn3b80MUYgkcxDjlTPA8QWz+LrDLOOUZwEo6cvKK3VHd28ssyrGas96slomDkd\\/m5nI\\/hx\\nkBkeg+oxXUV0e0d8Yi8UVtehnyP7RmWRy4pZB48+PhCDPTR3vHlolA5DgkH179fCOkGsDLTb\\nyK5u4Hjq5EKmpFCdbdmoBumpUCMjkNdQAPnayglUPW8F7JbCddipu6pGZcqC07QBWeqrZNsj\\nIgZHUCDlvSrW86O4cj0H1GDI9B9RjHVXqwvfUprn6LpR\\/wD0y84bMzM\\/vh0aj863Efo28Lbu\\n6OqkYRWElQKqQ84Mj5i6nUwnPmJLc22vpy87Lm6iunCiwEKChb6SRvGtUqwtJPWhdRUgjqUC\\nOEdmxbqpPN8PdDRq9VO+pz\\/LSbmAPYHAIQXpn98veHauC\\/jZWunHodefqYWH\\/wCTssP\\/AL5n\\n\\/jNGLThfYvNb8t6Zie9\\/lXwjsQoHMcvbFuoR1+\\/t5hCRVamP\\/wDIz3rm3+7\\/ALTuH2Qnt5of\\n1Z0\\/\\/wAizy779GOujhjYw427Lf5xPf8AW4p+plYv\\/k9Lf5xPf9ajsMgjiMvHN0xQpB4j088K\\nFWqXGfnvVNv93\\/ad3uEAmn\\/znXfU4v4FUdbKwpsJWavmEZqO8Cp1kDMnMgJTUQAOgZAA8BDd\\nWEdiKUSKS8gE7kpqVSKU7huzXNLUeH4SjvPr7OKOg+v7IsII4iHU1ep8KlPcrGbfPuLh9ohY\\nmXjufd8O0Xfh334bxHUy8GbLWCEoqbRzz1kTxJGXEAOsuJyPWknryjj3sELWVrKZnq60TuSk\\nTMi42nLnKV04uKB5xtBvO7zY7ogh9Ncq6d1QmT\\/bOFf\\/APa\\/XiYcE3Mj+ruetRI0tz0+evfH\\nQjuBtJVrbGu1FvMZJ2svLPZEHfmEeT5g5bgNXLpMcU\\/gU4MzL3Kle\\/6r1JKCE7\\/w0VFesc\\/\\/\\nALGN3QMs8jlJB6j09\\/TCRSR2cxjIRiWtI\\/66pQ5LZl1e9TRPvhYnppO50+tKDutzTfhHR9Jt\\nnGG11IXaeKFaoamtUNqpV0XRQVNDYlgpbNNdzQEy6iwMuLBU2cknI9pUnHjTotZSF0vSExOq\\nAby1U1LESrXG0AFtOAFi7JidZLYLKM0Kb1EoUtoJ2TryV82Ug9R8cYSIIORjEm5qSql\\/pWhY\\ndq1xZQqVEkJu4Nrj8o1qD0Oe1ksU4gp39A1Wek9b2lZuZlhcAAH8g83qANDvjsGjcohyhtsh\\ntE5ektczDAASxWbHw9qKlJ1NyHJqg0iQqUwfO19o7OOPhYCVLKUqbHclD5Y3SloYbReeDuHF\\nZZa3rmJah3vbM6+2FKUVLmHLgq8gFgJUErYpzbYQkeYspUpWKTjWe9O49HMe4+yG5BB38efP\\nj6Yic\\/gHZZVf3Q2YYOBJJUql04URaid6s9LMsvMd5VmuSb3vrEyp+2PaTIW7DGFdWAAAiaqM\\nxPJSE2sEpqC5xISLWsE2tpbhGym2eXAtl4ts3to+V+kKR5kxM2xfchXVLUlKApxun1a3LbLG\\na9sBLLqDykBKAZhaiooyVtXlgtD64VtorM1iTYm0KA47dFkmeaZ1nS2pSvuJqt3vrbQkbc6j\\nKlqY+qgzP62GjeYkpObGU3KS00Mssphhp4apz3ZOoVu847uG89MfPzVkWlOZ7agU1JPEy7Ak\\nyc8sznJlg5nLjnnmSfwlZwuoeTxsQqYPZYexBQSoG6qNiOZmSlRIOZCa4mpITY6gFOXcLWAi\\nb07ymdpckU+dTkhVAnKcs\\/S5IXAIuCqnJpi1A21ObPxzjWJQtoacmiLfBbFC0hMNGlupCm2L\\nkrqbKmHCpZbS03KXm3QZhb6lJ82XQyZhQ1F6mqpK15hWji3V5uVaqlk4jzVTpoWQiboF0mqU\\npw6mqQfI5yZkH8k79VYWAUo83dEJOawltGYz2LdQkM9bLyWeUsDMkj\\/w1E2SADlkVcBznzo4\\nuTw1q9uTianaN7Vy355ojYzci7MyM4g+cBlPUydkn0eapQBSlXPuTrebFE+TDR6XMKnMDbV8\\nX4SnAptbTsxJqcfztEqaC56hT1GcQUKOZDiWV5CSoN3JMTqS8qt6ZSlrEeDaPUW1ApWmWmH5\\nRHpaEpanGKuki1roU6M1gM6dxnu0rSLxSphCXqxJ1hCdyW6tTJNW7d9Z6nop8yeBOup9ShrZ\\nAjzcuzaTpZVBAbTXbPk5jMJDz9Jqb0lqk\\/WLcpOS89rAk+YhU4nIH65yyiCZaukvpzYcFtVr\\naQ94VZmXRsmZW6K0m92UsgAJaEniFT6\\/JNoShIQyhK8mE+a0pCRuyXtHlaNMO0NgxfmHdg4h\\nSjeqZqbTQqhRK2+EpyURULWqztCYCx5y1C2nEjikIG6JXT5LyxsF5FYR25y2K5dq3ZSdcq6a\\nvOuISb9kqXxxTJ9htKgMgLdSS4gEJStoJQqJFLbXthteIRV8JzlFdXcqdlpVlDCSQPSz0idl\\n5lSgSbgyJBIBOa5ETa6RpN4a1AAVH57oLmWSlztOVNspUAclNrpTs++tIz4qlmlHIkNkkKjs\\ndq7sM76knqOqt2lcUnPthmaotRep80idaK0qDczSKkdaYa1w2Sh2VcbCxrblZZw9rK5bXCya\\nW3L4m4K4g2bMeahxdrVaiXnLoVwLzjVXFizjLRWCpSWmpx1tO5HlChGadgcpBoY4hGXakca6\\nDbVQfCNpIX\\/J1Wxkyql79SYq9xSEjbZUnLJbktWphhJz+lyyiaSXlYeVnghARtA2NUzFUkyA\\nX52j02oMTK2wLuLeqeHp3EFEaQoZcixSm20kKzBd0pTu2aNsZxJ+4OO2pB526W5aozTLCVFV\\nglKJSrsU6bdUbkFAfWpQ3WFydy+J\\/JvaDuLiZg3To34cSM5MoOtVLEpz2G1UDytYonVzlgTN\\ntKnJlC1JcK6imdaf1AzNsvsZsxrixS+T8aPdwh+awlxhxMw1nn1qWmSuaRoeI9vy\\/HVak5VA\\nsquIa3fXnbjqThzzBB+iPeti4uTU7T2axhziMmqUXIJZnbWuZqsUV3NKVpQlVOnJumvAoWha\\nUK1gAUlPNn33Q9JfEellpFSNJuFpJyWahIJlZpaMyQBMU1Uk2lxO5JW5KvqWAVr11+eZNR\\/L\\nl2BYmcErtE2Z17CNQWQiZmZeRkazLMKJCVpeqFOVR69dKnHFhKKQtXoEgJdUhs6qr+TyuaR2\\n8gugVdpxOZDjYXTZl4EXSpDjPaMKBAAzKnRYmwJTcxHmxY5CDTHsnyibw7qOGuMlORrqlZWh\\n3GbPuZ1Kc\\/8Awil3uxR6Cwte7ZtS12z3nZgndmvWPivotaRuB23Vi5gliXYckw4W1VquWnVm\\nrbcWFBChK3SxLP25O6qlJBMnVH962d+ToidhRNKy35nUauC3KrSlE5KmKbMMVWWHOXFtvJps\\nw2jh5raJlxPDz8847kouLGG10tpl5G6KQpybBaVIVVwU197XSpKpcytTRLl85FSS3L7ZDgB2\\nalo43FQKx5Nu0jsxgXavR5Wfft2FLn6imRnFKUUhCGaJiVulVp9QUtCDkWsC4BNyFGoK9sOr\\nFLzLcplZkUpuS6llNUkkAHQl6WK0pFgfrzN8uukebWRkcoRWnLeOB98egpi7yemhbjn5TM35\\no+4euVGdZXr3HadOcsK4HXHgpaJ16t2NMUCcqUw2pQW2qpPVBleQQ+y80CydVGMfyezCispm\\npzArG+8rHnChx5mgYi0imXzRHX\\/P1ZRis0UWnWKTJk7PKYmpS5ppsod3Oh9Ox31T2K4okruU\\n2Yp9ZatdKWnfM5lQ3g9lNESwukgjLOLNzlF95rObwRWJcFTHm86kcGnOydsN90PhCb7yEpcW\\nTaw1IBieLGe8cR7vshFQ1hlzjh3enxnG2DGfkZdO3CFM5PU\\/DqlYw0GUJJq+EVeauGbcaVql\\nrUtKsS9AveaeIOTrdOtuossLafBe2Iaed1i3VZ922LWpm3L1ta4rPuCS\\/wDDKFdVEqVArUnm\\nSMpil1eVk55je2tOTrKc9QjKK6qVBrVFXlqtMnqeb2SuYlnUMuHT9qfy9i6NQLtrWm+hIMRm\\nZkpySVlm5V+XN7DtmlthW\\/6qlABQNjYpJBAJBj5EjMEEdRhAjLcYeLHP6\\/Hj2wgtOYz5x7o1\\n4NxfoRjd3s8fv+wQ0UnI9R4QitP4XoPw8d0OyMwR0wgRxB7DCgbEH2+EOpNx3jrr2w1UMx1j\\nf9kfQWpeF22JXZK6LHui47MualuF2mXHalcqdu12nu5EbSRrFHmZSflHMhkVS8y1u4GOCUMi\\nR6uyEFjI7uB8EePRGU06tpaHWlLbcQQtC0KKFoUDcKSpNlJUDqFJIIOt4UCQQQSCCCCDYgjU\\nEEbiDxEbqtHPl3dMvBpUjSsTn7e0irRllNtrlr5YRQL4Zk0L1ltU\\/EC3pRDz8y79IFT93UG8\\nZlIcAB2LLTY36aN3LfaFOOnzfR7xuSpaPl6TIaaco+KjbLFqPTbiloUmmYi0zbW2iTZBb15u\\n6hZz7m1yZlHEtOEQX4ItfDu2LGlCDbbk+K1Jpygy1YzTLiUjeG51KkToVbRPavvNJFrNHjvp\\nLElVksqe385aTp2czd3TQWS5cOpsNEgLyj9EgWj1FqRWqPcdJka5b9WptcotVlWpyl1mjz8p\\nVKVUpN0a7M3JVCTcflZyVeR5zUzLuracSBqqjmo81vALS+0l9F2pIqeBWMN4WI15V5ZN27Kz\\nyapZlVfzyWusWRW2qjatUdWjzBMzlIdmmk57F9l36QSANGP5RaP9zrd0t8IzvWhh7EzBw7g2\\nUIaRMVnDyv1DNSg8nyioz9Duo\\/QuO\\/Ntrl1lqWmL8w3tywrWOzYq6X8PTa7C80fOacpVhoie\\nZQlTYNySqal5dpKQPypMS+RxbITACJpC5JzQFRu6wSbAWcSM6bnU52wlN9VkC4lSQRjdgBpZ\\n6OWlLRfnvAfF20cQENy7c1UKLT53yG7qG04U6puCyqw3Trroba3NdpDlTo0ozMrQ4JV54JJj\\nJGLjlpqWnWW5mTmGJqWdTmamJZ1t9lxPNDrSlIWO9KiIlDbrTyEuMuIdbVqlba0rQocwpJKT\\n6jBBBBD8LgggggggggggggggggggggggggggggggggggggggggggggggggggggggggjXHpYc\\nqRojaJLVUpN1X41f2JUgt+XThXhm5JXNdLFQaStJlbmm25tm37P2LxaTNtXFVZOrol3dtTqJ\\nU3GS0NfU6tTKLKLnqtPytOlG75pibeQy3msSEIK1AuOKAORpsKcWRZCSbAsTE1LyjZdmXm2G\\nx+c4oJueSRvUo8EpBUToAY2ORhnpMae+ivolykwMYMU6PK3U2wp6Vw5tlabnxEn1Flt9hr7l\\nqWtcxR0TjbqFylRuZ+g0V5JIFUSRuioaVvLc6WGP4qlt4YzjWjnhzPIclfm6xqg7NYgz8moq\\n\\/wDktiS7LSNVk3lA5n7jZG0yG\\/1tMPT7Rdcd08Tc5O1Kcm6pU5ybqFRn5h6cnp6dmHpudnJq\\nYcLz81Nzcwp1+YmH3lKdefecU646vXcVnHPmK\\/KEp8qXJXCNPNSeF0pqdSS5LySVa+kzJpKJ\\nuYTYaKeXJWP5jibXhVRxq2nM3TGC4dR5xMApb8UMghahxBcU2QRq2REgfSg5frGu\\/jU7a0ZL\\nNkMFrZeccYl73uVMhd2Jc5K5OI8pl6e+y\\/ZtpuTDTqQ9KIlrunJN5pLshcLK8wnRhf8AiTiF\\nivc07eWJ17XTf111FRM5cF3VyoV2qOIU444JdE1Un33GJNkuqTKyLBalJJv6KWYZZGzHwqBz\\n+rx454XQMzmeA9\\/j4c0c1YkxriXFbpdrtWmptsKK25QKDMiyb+j2MkyG5dBSPRDnZl5SQntH\\nVkXMJnalPVBeecmXHrElKCcrSL\\/oNJytpNtCQnMRa5MXpGQ6zv8AsMLITzn0d8WAZkD19kL8\\nIhq1H1n3DrT7Y1y1WFhvPugioGZyHPFIVQMhnzn3QkegnvPDrlx7\\/GGouAyGXgw7aRqjWPE8\\nOofbzxfIyc1UJtiTkpV+dm5p5tiVlJVl2YmpqYcUltlhhhkOPPPOLUlLbTaFLWrpGUbM9H7k\\nkdNHHkSNScw+RhHaM4thX3T4vvTVpurlXNVS35G0Uyk7es6pcsoPyLjtvydMnS4yfnZpl3at\\nbCm0WrVl\\/wA3pVPm6g7pm83YWtDd7HM87bsmU6j03loTcgE3IvkyslNzznZSks\\/Muaeiy2py\\n1zYFZSCEJ\\/jKISOJA1jWilOZ38B7+jx8Y+ltWz7svqtylt2Pa9x3lcU6QmToNrUOpXDWpsgp\\nSBKUykS03PTHnOtoAaYWddaRvJAiWFgJyEOjfYgp9Wxvu27cb66yUuTFFlnHMP7BU4pOapdd\\nOoc6\\/d0+Jd4+ZMm8JFidS0DN0dhp92UG22x8M8DNHi3l0vD+y8OsJrfATt0UCkUS2BUFtgJS\\n7PzUuzLzdYnlDVzmJ5+cnHVrzUtxYBNn0\\/Y5UG5dyo4rrNNw7TmGu2mVLeafXLtJCVLVMzC3\\nGafKoSN7pmn0JsbpKRE2pez2rTzjaZhaJcuEBMuykzk2tRt6CW2j2VzewKXVqBBJbNrGI9gf\\nyLumbiwmVqF3UG3cD7efzc8sxHq2tcTrGQ86Us+3G6xV5eaLhyErcq7ZWUIdc2mRYD24PBDk\\nJtGOxRKVDGG671xtrLWSpmniYOHlkukAEtikW9OTV0q1VgoUtV77B9BH6zZ3xs1uXSUsukbZ\\nmhSs\\/c0ygrTrtD5tpqlJOqQZuaaXMqTmCULZkHmXE70OnIR0HcmkRiBWi41TXpS2pQq3IpjC\\nXJtSBuKXahN+UOa2tn58oxJ5HIZEa+0rvEe3fyU9lxdaTVXdo9bllEGVobQxE0V2G+eWqQwi\\npGdNldnNvzDdzdtQAEXlhnyfqnNdm67SSwhVj51X3eyG9JNqe2gu2N7pDsoQR6Jc+sYycw9w\\nZwD0eKKZbDjD3DjCmlpZ2E1OUajUWgTU8hGStarV1TbdTrD4AJ29VnpuaXqjN4gGGtwaROHd\\nF125GbnbimkZgN0qVUJULyGWtOzplpdbYG5Tkr5YQTqoQrflqmxi0kcJ8LAuq41Yv2xbM2tl\\nc00xdl0MOXDUGcwSqm0NcxMXBVwScy1TJCaUQScst41dYs8tJo92mJuSwos69MWai0t1EvUZ\\nppNg2nMgD6N9uerEtO3QrNWStlM2fJrUgAF1ClZJquc8sLbnj9HmGxLY9L0SlquzL1urMv1V\\nDaQSkOMzTiaFhiQdBsoMTKqm2kIVqsnMLJdwbs0wUgJxfjCUQ6yATSpBTUs4kEA5fMJQTlTc\\nRvAW01L3O8J3GRbcGlFdc6HG7fpFLobR1gl+aK6vPJT+CtKlCUkmyRnrIclHtXcCvPOMfb1x\\narjtOnqtfl+LkaFLtqVUZmsVmWolvSzaiElc2hTkhRpdBJCFLcaQklWzzI3REjxV5X3Szv4z\\nEpZ85aOEVIcC2kN2hQm6pXVMOKOQmq9dhrakzQSdQTlGkKGsDz0Ntr86MALpvXGLGmqCp3pd\\nd\\/YlVNK1qROXLWq1cglNYBBQy9UpmYYp7IQAhDTRlmEJ1WkJQkJREJqOyzykNqAU9tc20TVM\\npj\\/pTNEps4+7KZCU5mn6LSDQcMtqIBSl1C50JCipSV3UhWim9t2zbDIUjB2DFz8w3oioVAMy\\nKL29FxE1Mio1NxKTYqQ4iVKiCApOixLQxO5SnQ1wuE1LzeLdNvSsSpIFGw1k5u9lzK8s1pYr\\nlMR9yKVIJ1VJm7jllA6yfrpVq69MSuXEpzZmJXB3AucmCSoSdexKuGXktRIJCfKLTtZuoFxS\\ngdYlq9Gg3qlJDuuFt6SaVgzdM5qrqLsjSGjkVJde8smgkniGZXXYO4kkKm2iNyTzlPZdKwSt\\nyVCV1OcqFVWMs0BSZCWX\\/wDcmNeYTmecTm4fxoz6J5N+w\\/DQQ5VV1fGE2iylCdn3W5RTgy6t\\nS9HTTmS3cXDM1NzYNyFqcG6sq\\/5SmOaiVokZunUNlVwEUqRRMPlGosuaqJnBnIOrkumWOgKA\\njW\\/dWJHKm6ZuIiphpjEWQw7pkwV50rDe3abQgyFBQSJau1IVu72EtpUpKA3cg+sFr13UNqRh\\n\\/XKljFivPiq3XWb+v2fWpTgq121mtVtYU5mpZFSr82+lO0J1iA\\/5wV0Zxk9S7TtujanzZRKd\\nLOIy1XhLIdmgBwzm3w5NK5zmp4nPM9UfTJRlvPH3fb464talOYRwsgN4QwXQqJlTkD8tT5OU\\nmFiwF3nJVlMw8ojRS3Ztxaha6jFNVrHWIa+sqq1WqtVJVmAqVQmZltBvcBthbimmkgk5UtBC\\nU\\/mgRifTMEbqmwlVQfptKQQCpDjy5yZSegNyiVy6st+f68Tv1ctbztX7+nYE0NgpVU6vUqgp\\nORKJZuXp7KjwyUFJnXtUfuH0Kz87PmV3pBD8ximtTFwJkS6T+bLtoR7FqC3R6nO\\/fEYXPzS7\\n2cyC+5CQPYTdX\\/mtePh6dhtZFM1Szb8m+4nLNyf2lRKiPwiidcfZBPQhtCeqPspaUlZRGyk5\\nZiVaHBqWZbYQOOWSG0pSBluO45Z88OQgnju98KAAbhGimJ2ZmDd+ZemFXvd11xwX\\/wC+o+oD\\ndGEt5a\\/rOLcVzUpSuX6RO\\/kDpFgR0+r7YUi4IJ47u3j6v0QqEgcOPTz+uMQknfCMqlaqNu7r\\nd69YSCCert7oUCAOvt7oUCSerti8IA47+3u\\/TCCoDf7OMKCQOFz9\\/s+3lCQB5h6hF+orqHjq\\nzhWCEFw8APXr8o9JA3kd0WbMc5Pu74u1UjmHv98VghJUo8T8PhCStPefV87QQQQR5Hnad3v9\\nsEEVyPQfUYMj0H1GCPO0PIddHoa0giuR6D6jFII97Q8uur9bzIHiM4pqpPMPd7orBBcjcSIO\\n0HEH4\\/KLNmOYn390WlBHDI+Ovd7YVghQWod\\/jCgoHcfV17NIbkHnHrEWlAPV2d0OosKBzbvb\\nCwscdPh11ePSAd4B8YaFBHX2d0W5A8RnDopI6+yLCkHjx6ef1wsG+oMJKOINuue\\/4w0Ujo9X\\n2xYQRxEOSgjhv9\\/q\\/TFhAO4wsLI36j39eMeZlJ0UPn6juMIQRepBHDePbFkOAgi4hYIIBG7l\\n1yhIoy+rw6O6EyAdxHeIcxapIO\\/gfHGPY9hmpJT2dPf0QitsL38Fcx74eEZbj+n7ISUnLeOH\\nu8eOt1K76Hfw7\\/vgBtqI40ggkKGR58\\/G\\/wBEUh6tAWOvmPjmhmpJSSDDgJB+I5w7cLFjoetf\\nDu\\/XFICM9xggh4EEXENkEGxhm43qHMfVPDq6vthFSc+0eMo5EgEZHeDDNaCg9IPA+OeHkKvo\\nd\\/DvhxCr6Hfw7446ZlZWbRs5qXYmWx\\/e5hlt5Ge7PzHUqA6zlvPs+VnrBtOe1tpR5eXWreFy\\nSnZMpJ50ty7iGDx3BTSkjmGUfaLTzj0+PHenGSzMzLBBZfeZI\\/rbi0XOh\\/NKQRz0sfdDqVrR\\n9Vak\\/wBqoj4GOuKbZVTtSoprFiXrdVnVVrezUqPUpqRnmSMzqtTtImKZONp5wdsojrjKKx9N\\nzTvwu2SKbjEvESlMlBXSsQZWm3Y7Nho+aJis12VbudvMFSFiVutgvJOTi1KQ0pHUZGYy6e\\/j\\n6OMIkEbj+nrhiqSlKxE12OI6HQsRNhOUJrdIkKipA0sWnX2C+yob0rbdQpB1QpKtY39IxZiS\\ngudpRq3U6au+YmRnZmUzHjn83da7QEeipK8yVJJBBBjZhYfLSXnSA1K43aPLD6AU+U3BhzWp\\n6lsMjg4Ze3rkZrbEyVZ5oBvOWS3kEq2oc2iM8sMeVL0NMSthLv4hTuG1UmnEIbpWJtCmLeCC\\nvIa79fp663Zsq2gq1FrmLma1SFrI2Sdcx0nUap1hwJ9R9EfO1C26HUgpU5SpJ1Zz1nQyGX1c\\n5JmGNm8SOP7J64qKu+Txsir2dTFGquFplZKu3w7VnXGC4dxNOrKalLoauNWpZcqCLhKkE5ou\\nGg+UntFpJQiemJGusJsMlTkmw5k4gTEiZGYUvW6XH3XyDa4UkZYmxYeYwCoU1iuYX4kylZoK\\n1rSzUbPueTrtBecOTqk69LnZ2lTGYcDgQ4HQkrDhAKgDkfQNJy+KaEt1yTpdxsAJCnFtGlz6\\nsswf1xIpVIoz4qHzao555jMZHz\\/KFQqzZdVauDDi97ww\\/rzCkql6tbNbqFLnGC2SUFmcpkzT\\n6gnI55frw7ubcSczcOeUV04sLFyzM7eNu4zUKWAbFKv+kS0xUSwElCya\\/Sl27cj81kdo27UK\\n5VztW0azLyStp3TUrZntw2bFLmx\\/bhPtSbAC2qBWJidpsnZKUpQ0mlTpruFpt1KUpQlcyzJt\\n5RYBCQlJtCS2\\/wCzrE1m8aYLMo+5ZK5+RDE6QTbM4t+1OqEu3qSUsOzaxYfXJ9GdPb+ktYNW\\n2bVXRVLbmFEJKpyW8tkApRVlqTVPDr+QI891+Sl2k6wIVqBa0fX3VZOCOPtC+ab2tLDTF638\\nlE065qFbt5SUqt3IFbctVJWfMhNp3lC0NsTTS0BaFNusjOJLhpy0eGc4uVp+OOEV74bT7hQy\\nqtWy4xelu62f0k3MMTSLerklL6u8MU+SuJ5J8wLXnrDZtg5pZYAYyTEq9g\\/jNaVfrLiS9LUq\\nRrDtAvFtsjNTqbWrKKPdcslBJ13HKa0lJ81Z1gM7KkPK88ojZ2gS+2LZPJYrorYyTNdpLK6W\\nVtEpC3X6pS0VzC7voXWmXTJU0OJCkLW16S0SdjDGyrGqbYRxjLMzD4GSlzy0OrUokZW0U+o+\\nZVJQvopYVMpGihmBTn7Vxz5CnQ2xMROz+GpvPAa4ZgOusLtSrP3TaPlLyf2WetS8H6hNmWQf\\nPbkqFc9tS7WWzaDbWqgaZ8eeQe0vsMfLKphTP2bj\\/bsuHHGWrenW7Mvcy7JOu9M2pdc23SlO\\nKZycZk6JeFfn317VlqWce2HlEiW3MfcR7fKG3qm1cEokozlq8z5W4EgnW1aiyuXqBcUncC\\/M\\nPoSsBws\\/XC+\\/ba0obXnw0xc1Jn6A8QAqblcqtTxkM9dZbSzUG8xvDbclNFOWRJzCjbGGfKR8\\nlbaYptmoTc1s2rUxZOSuS30LKhy6UrUKrIrn8MJReyw9UVybi0nMptKu0SiA4k8n+py\\/aOs0\\ntqbQNfOKC8A6BvSDTnUIUVH85LMq7Y6BZuDHnu4j4VYmYRV9y18U8P7yw7uBsu\\/7j3pbVXtu\\noOJaKEuOyzFWk5RU1KnWbWzNyoelZhp5p5p11l5pSuvVjn6ePwj0sa3SMHsd7Xmrduei2Jij\\nas4P17btzUikXPTVHVKAubotZlZoSswhDig2p6Vbeb1wUKTmBGqLSB5CbQ7xWE3U8LXLr0fL\\nmmC84lVqzjl1WS7NOKBcenLNuiddmWW0ZZy8nbVz2xJM63\\/g+9OpbEzsmXUZNqrYNxDS8SUy\\nZQHZV1qYYUh9uwF5aflHJinzYJtZztZZFtCbp9Kjans\\/qsg642wrtHGiQuVmm1SU2g\\/oFDv5\\nPMBa5Wpm51yxCkWMxnzj3QioZgj1ePZG47SF5EbTSwWRO1izKDR8frUlQt4T2GMw8u6m5VAc\\nIM1YNYRJVyanDswBI2qu61kvNaql5PbLUdcVt3DaNaqFu3VQqzbNwUp4y1ToVw0ydotZpswk\\nDWl5+mVFmWnZJ9I+s1MsNuAZgjprip0Gs0NzsatTZuRVmKUKfaIZcI1IamEFbD3E3adWLa3i\\nHzUnNySw3Nyz0uo3y9qgpSu1j6C7ZHBr9ZClDQ6x83BF6xkc+nx9vpiyNcg2NuB3eMY0EMnE\\n6qyOY7x2H7c4ewk8nWRmOKd\\/Xlz\\/AAJ7IdhSTY+OkObfuW5LNrlOue0bgrdq3HSJhE7Sbgtu\\nq1ChVqlzbZGpNU6q0uYlp+RmknLVflX2nATmDnvjdnot8vjpX4L\\/ADbb+N8pTNJGxpZbDLk1\\ncDzVtYnSMmkto1pS9aZIvyldW0navuKu2hVmq1F9SGl3HJNALRo1cTrJI5+I7Rw9fCGUSSgY\\npr+G3u3otUmpFRUlTrTbmaVfI3ecSjgXLP6XA7VpZSCcpSbGMuWnZuQcC5WYcZJ35Feiq36b\\nZuhduAWlQ3er0LtFLlVdDXS4NMo1l4kNWRiNUVssIwsxR8ls+75iefSNnJ0B5+dmbcu59xxL\\ngalrXrlWqQbb205TpLaNJjZFHlU+che4lKkncQSCCOBBBz6++NpeiXyw+mZop\\/NtARegxlwz\\nkGmZJGHuLb9QuBun06X81DFrXYJpF1275MwSxT5MVGo25JN7EKtx9tptpPQ2F9vDTvZy2Kqf\\n2KjYfSdMSpbWthmmJFxSnUD85a5Z125NkSqEiJlIYu+qioM34ecS49hWyTrzUptY\\/itcI9Au\\nCNPGiRy12h1pPOUm2bmuB3R+xSqCWmfuPxRnJKWtuoVB0EeTWviSlMpbdUStamWJOXrzdpVy\\npzToZkaDMEb9wiFodQlaFJWhaUrCkKCklKhmCCNxSRwPBQ6QYvqk1qlVyWE5SJ+Wn5c2BXLu\\npWW1EBWR5vRxhwA6tPIbcTxSImMtNy0432sq828jS5QdUk7gtBsttRt9VaUq7ovgggjaRkQQ\\nQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRH65ejS9uTBvCfD3AXDS7qta97YvT9Qr\\n921K3KtUKPW5HDO3m1U9VMXOU56UmWJW9a\\/PCUdDcwpE5TLartNm2SxN74d6c1KUpSipRJJK\\njmVKO8lRJJJ5+PPGdXKU6SX9lPpi4uYj0+d8ts6kVb9T7DpTa1LlfuHsdx+k06ekipx0ol7k\\nqSatd+zzCUTFxTGTTIOxGDCRkO3fHz72pYoXirGNUmm3lOU6SeVTqYgLKmhLylmVvti9gJx9\\nDk1mABKXEJJOQRTFdqBqNSmXQsqZQstS4vdIabskKTroHCFOnvXuG4XpGscubn9HEfAw4AzI\\nHTFiBkO33c3fC6BxPT49\\/uitVG57hu+2NNF4HADsELpGQHw6emLEDfmewe72cP0Qu2hS1pSl\\nJUSQAAMySdwAAG8k7ukwyrU21038dSQLeP3iDr2xcgZDPp3+jm8dcXxsw0aeSc0v9I75trH3\\nEqwisGeLLwvXFZqdtwzEi4naomaHaRl13bWkTDGTlOnE0mSoVQLjI+fWGFF5qQTo38inom4M\\neRVnEqWqOkLeUuEuLfviXRTrDlpkKaUHJDD+nzD8pNtFCVMuMXXVrplng8t0S7JDGxmdC2dY\\nkrikPCWFOlFgKE1UQqXCkEA5mmMqphy6TmQrskNK0PapBjfU3ClaqpS43LebS67Hzibuyggg\\nWKEEF50EHRSGy2SLFabxFNwI0VNITSXqvzXgrhTdl7oQ+GZ2uykiKfaNJd3Et1m76u5T7YpT\\nobO1blp2qtTbzYIlZZ48N7ejxyAUw4uRrmk\\/i0hhv6F53D\\/CJJcmXFEhwS9Sv24qfsWClSUy\\n8\\/KUi1ZlTgW75BcDP0T5kQTtzYd4Y0mUoqHaFbdOpcsiWpds0OSlpVMpKIzLLEhQqWyhMnLa\\nxOz2cuzKIJJJTvjoa6dJSbd2kvaVGRKNb0pqVY1XpnLNWS2qew4JdlWQARt5iaSrWyUz5sO4\\nnxLsG2PBf4dYtlq1XWQFDD8iTP1EujVKF0WmuOrlO01CV1uaYk12N1psYujCexKdqnZupkZm\\noIOX9lTd5Clp1FygqIcmMqj6SWnHyob2QLg\\/QYH6IWjBouU1tzCfCmzLNm5SW2c3es\\/LJq15\\nTCA0EvuT173A7PV4MTCto47KM1OXpja3XfJ5JlrNmPs7mx+sS3ypmQmXrlnEZhKKQhJk0Hzz\\n59RfLcsts5Z60p5afOb8wDaamvzFDGSm0SlP3Xi5iPSbet+SWC9VryuGn2\\/QJRxQOybaVUJm\\nQpUu88fqNS6UOOuZpQlahGoPHDlmtHHD7yyl4S0W4sbK+yVttT0q29ZtjodSChwOV2tyTldm\\n1tPAkGmWtN0+cbStTVaQhTTq6OqPlcbT8bldD2AbLRS6e2ssorlWlW5xTAWQUK7BlUphmjPC\\n4Jbnp6rNK9OyTYGLq\\/AbAWBpZtzGmJJGTASFopMhlli4ABfs5ZlDtTnEaWK5aVYIunMoEi+\\/\\nm5tIe+K2XGaQZS2ZNas8pJPlVQUklQKXJ+aaKQQSCHJOVlHARkFERhPjTpNYNYPNrrON2L9s\\n2zOusmZTLXFXFVC6qiyXFEvU63JZVRuirNhwr1jTqbMpQVEq1d0RVcbuVQ0t8YzOU+RvJjCe\\n2pkLb+Y8LZd+hTpYW2WgJi7X5ieu0vKbUrbmRrFNk3XFqWiQa1W0N4HS1Gu6856YqWwqtZnJ\\n99b07Wak+68ZmYcObz83VJ9zOYmFHNTinHnH3CSUoUrKIPN7Ddqe0h5uq7c9qtQm2AsPfQ0n\\nNmbYllL1UlhLqZTD1HdFyFCnUmbYVcAKsBEZqW3zCuHG3JXAOEmUkAt\\/SlVCZRtdrBKlMtLc\\nn5xtVgQZmflHQBYoBOki3GrltcL6B5VS8CMNq7iDPNh1lu6L0e+5C2EOBeTU3J0ZhE9cdYlF\\npGsZefFpTKVKGeWpqq1S4xcprpgYxeVSkxiSvDmgzSiTb2FMs5ZrLSVILbjRr7U1O3pMMOIO\\nq9LTVzvyiwVZS5354+0XBRxQQ7X6qGhuK5OmIK1kHfkqcmEhCVgbiESrqcydVe7zu16PY1rU\\nPUVI0iWU+jIiam0+WTOsngtLsztNirPefJ0spO7zd0WDh7ZjsbwP2aqThaWrdRZsRUqygVWY\\nLqLWdSufSZSWcFhlcp0kwBqRYqJNGYn2143xEXW5vEE2zLOXHmFHP0XJhB3trVLFD8y2SSSJ\\np+aJ0BNkpAxflLZvO7JpyoeRVSovzrhffq1TW4BNOKy13nqhPuJM0sDipLjzquCQTkI7IpGC\\ncyoocrlZbZTkCuWpjRdXv36vlUylttCk8DlKvJz+qVJA1shYqAScufhl19ETebxXUHE9nKpZ\\nkkABKQ0gOLSkWATmcBQAALDI0ggbjuirF1GYdJIs2k3JI9JRJNySpXvIA193xNHw4tGlFBZp\\nTU5MJyPlFTJnlkgkheydzlUKTxCmpZsg\\/ugmOwGWUMoS22lKEpSEpShISlIAyCUpACUpAyyA\\nAEVbQED90ePcOqF0pz3nh7\\/HjqjUxNzEyrPMvvPq4F1xThHcnMSAO4WAHdGvcdW4SVLUrXeo\\nknhz4ch8hYSnPeeHv+yFQCeG8+N5gAzOXOfGZyhZKQn4mMIkk\\/AcobgSnLt5zF0EVAJ4CPI8\\nvxuLdW1igGe4QqlGW87z7IuAAGQhRKc+O4e+GlLJ0Gg+MNlRVonQfZ38h1rFoBPDx2wqEgdZ\\n8cIuA5gPQIVCBxPq6O3phskDfCwkDvPPrl7YTCSrs6+BhUJA6z093RF0ENFZO7T4+39UBUBv\\n9kEEABO4DM9AhZLKjvUdXq4nuHt7ITDZWTu0+Pt\\/VCMXJQpXAHt5vXwh2ltCeAzPSd\\/2eqL8\\nieAzghMNgwedQHYCfflCgZQOOZ7T3ZQ41FdQ8dWcV2Y5yfd3wkqSOPsghEISOCR6ouhbVSOb\\n4++K5AcAB6I87QcAevbBCEEOII87Tu9\\/3QQ3ghxFMgeIB9EHad3v+6CG2oj8VPqEWFlB4Zjs\\nPfnDvVSeb4e6LS2OYn07+6PQscbiCGRYPMoHtBHuzhIoUnik+8esd8cjqK6j468osyI4jKFA\\ng7iII4+CHqm0K4jI9I3fZ64QUyofVIV1cD7d3tj2PQSNx9XCEYtKQeo9Pf0xcQRuIyPQYIAS\\nN0LCxx05Hq8IFJT2dXARYUg9R8cYdRYUDiPV09nRDoWDv0Pu+6F6EcxDMgjjCakZ7xuPsh2R\\nzEegwkpOXDePd2w4CQbiEFJTqnXu639eMNCMtxghcpB4+uESCOIh1KgfHl8o9CgrkFde7u\\/X\\nFpAI9x6IRIIORheKEAjIwqFwzUnLeOHu+yEVoCx18x8c0PCCDkYQUnLfze77OvwXEqvod\\/A8\\n\\/v8Aj47wG2ojjiCCQRvG7Lx08YpDxxGuN2WsOB+HphmcxmDzHeOsQ6k2Pdxh3RYtuI69h93s\\ngi1SQsZH0HnBi6CHweI9UNag8iIYKSUkgwitORzHDmHR1RyDqNYZj6w9o6O6GZGYI6YeSbjv\\nGh67\\/drDyTcd43\\/OEO2LVDMdY8ZReQQcvBHgRSFA2N+UKhsoBQKTz7vHZxhkpJSSD+kZ8fTl\\nnHIrGRz5j7\\/Hxhs8jMaw4jj1j7PdnD4NwDzg6EceoZHqPjKLYXUMwfG+EOEOg5k2O8dA\\/P74\\nISeabdbUhxCHEKGSkLSlSFJzzIUlQKVDnyI4x8jPWVb86oOpk\\/IJgELbmKasyi21pOaVoQgG\\nXCkkAhWwKgQd\\/MPs4RUMj1HhD0vMvsE9i840R+gtSb20soAgKHMKBvuIh9pxafqqUkjUFJI+\\nHLrdHcGGOlppg4IJl5Sw8b6zXrfldk23aOJLTN50hMpLg7KnyT1eaqVQpEoOBaoE7QxkQkLS\\nnPLY\\/hby0KZVUvT9InA+pUM5lMzd+FU2isUgKWkBCl2rcE63MyMuhY133W7yqsyWFK2Ugtxo\\nNvaeljfmOw+728P0wgsZjPj09nX46YhmI9mezzF4ccruEqSubdzFdUpbX0JVC6oAF1yapoZR\\nNuAaA1CXnEHTMhVhFl4b2uY\\/wsWm6diGcdlGsoTI1FYqEmG0\\/wBSbanA6JZB4mVLC9bhYOsS\\n48EtMHR2xyckXMIcYbaqlfdG0lrdVUHrZvhl0Ml14NWzXEUu4XRLIDiX5yRkpmSzSvUm1oyW\\nc9rYx9xBt0Nszc81cck2AnYVptb0yG0gZ6lSYU1OqdUnJIXNvTiUnJwNqiABP2xRZ1aXzJol\\n5ptaHUzUkoycwhxB1kuhcvq6ziDkpLi0qKCBnwEZUYQ6bWl5gSZaXtPFmZvy2JTZ6tlYuNv3\\nhTNizqhuVlaw\\/MNXPTJdCNZtmUo9epEolKxmyCltTdXymxjHGAJxysbFNqdbw5MFfaqpNTmn\\npJqaKALNzU1TUOUqqBSQlKWKnRGJYFCSt0aZL0pXlFYdrzTcltCwjLui2Q1CmoS+lvNoVIlZ\\nxwTMsEm6luy9SW6QTkZuAFz4bX0kLLrGzYrrE7bE24UhS5hPl9LK1HIAT0o2H0JzO9UxIS7T\\neuCtzUDi4Xxb0e9HLSltxqn4uYbYf4tUYMOS8hVKjJSk3VaW24lZWLfuumOsXFb7q9utSnaF\\nWKfMay1ZqCvOiLHg7yy+F9XXI0jSCw5uXCWpL2LD92W8Hr4sXaFbbbk3MtSbDVzUxlRcDiZO\\nTp1zutISUqmluKGtt1wdx6sjECmIvHA\\/FCiXNTwGfKKhZtxMTS5Va0qW1KVqQl5jyqnzISta\\n1U2tSbEwhClpeYSYtGkeV1tm2eBqlbdtm0viairUmXdxJSWWJF19BUAXFuyqZzCdWdKcpTJy\\n4oirK\\/KqFgmJe1hHZxj1ha8E4llVOuozqo08fOLDT0VSc52VTZbB+s8tE42SLoun0oxZ0k\\/k\\n8th11M7XNFjFao2PVCXHmbBxU21x2m64VEoladeVKlhc9ClGEbk\\/OtHvOZeX9ecZGRiP3pHa\\nA+lhorPTbuMOD9x022ZdzVRiBQG03Xh9MNrcLcu6u7KCZ6nUtc5lrMU64F0isAZbamsndE3a\\n1dJW4qfs5e6qZLV6XTqpM9JBFOqacgNdTjaEKkZok6uTYZkSVFai8c9nGSFsYnWFfbIk5Opy\\npmZtlbD1BrLbcpOOodRqLlzKvky08lxLmotEq9NtqRrDP68X7hHH\\/k77Zg01hHFDeF8STJTl\\nw9Vkoo0+p9eXKyzTJ53zCpKF83Z4eqLyBvURZYFRYr2KVKldo8qnvSzSbnz2m3nqeQBbO60L\\nOyydwHaiVG+yVXBjzM4IneaTXI3aFukcKjWabZJwPv2cTMPC7cIWpKgU+ZnnPpEP1uxVyztn\\nVFtcxtHqg\\/TqbRK3Ui68X6626Wnmo6uk\\/wAiBpgYD\\/OVfw6p0jpGWFKbR5FQw6ln5a\\/JaTSN\\nzlVw1nXX6s\\/MlQATLWZUb0UlvJ95xgB5DO2r2zLE9FzutS6atKJufOKcFOOoSNQXpQgTCDYF\\nRLSXmkgek6DpFM1DC9WkMy+x86YGvbSoU5Yc1tWDyLD6xyFCbH0yBeNL606qiOvd2c3shi6n\\nVUeg7x8Y5+r0uoUiem6ZVqfO0yqU6ZdkqhTajKvyU9IzbCi29KzknMtsvyr7DiVNvMvNIdbW\\nClSeaOHeTmnPnTv9HP8ACK\\/AKFWIIVcpUkghSSCAQQdQQdDfkeOg0BOZJ0N02++\\/shgsc\\/o7\\nfHXDdY4H0ePbDsjMEdI\\/RDcjMEdPj2RlINxbl8OrwtBuPDT5dd0NVjdnzjj2fp98S9Pk6mln\\nUrzsnFHRQvavz9WrGHZlMSsLzVqnMz8y3YVSXJW7dltyCJt1S5WjWpcH3P1CRlJfXYS7ek9q\\nNMNyzYdiHHeCOmMvtAPSUf0S9LjBfGt2afYtuhXSxRb\\/AGWddflWHd1trt28wqWRmJ16nUWo\\nzFcpko4NVVapdOeCmnmWnWp3s7xEcM4qpk+twtybryZKpDNZBkps9k444OIlVKRNgb8zAAPp\\nERtaRPGQn5d8khsL7N\\/kWXCErJ55L9oN3pJTrHpRQQzl5hibYamZZ1p+XfaQ8w+ytLzTzTyU\\nutOtOtKLbzbzZS4242opWkp87LIl5HeG\\/dFuwQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ\\nQRrq5U3SNVoy6FWLt302dEneN5yCMJ7AWFFL4ue\\/mJ2nvz8q4EqQiety1mbluqR2qFNOTNBa\\nZdGTqhGxWIf\\/AMoR0iDeGOuHWjdRp7aUnB22xdt3y7ZyBv3EKWlZunyM0hSM1qotjy9FqUi6\\nheoW7ynWdn9FvgG07Ef4L4LrFQbcLc4+z9G08pVlWJyfBZQ42bj8pLNF6bHIS6rXNknS4gnv\\nMKVMug2cdSJZmxse0euCQf0kNhbg5lGul4j0JGZy9cOEjMgevshNAyGfT7ocIG7Pp4ePHCPn\\nqo2BPs698Uz3da2hQDMgdJjl6VSqpXalTqJRKbP1es1aclabSaTSpR+oVKpVGdfQxJ0+nyEo\\n29Nzk7OTDjcvLSsuy48+84hpltTiwI4tA4n0Dx4543QciDo7\\/qs6Vz2KtakXJm09H+gruhDq\\n2i5Jv3\\/cYmqJZUi+rIJSuTlxcd0yjiHAtqftqngtFlxWWXR6a5V6nJ05olJmnkoWsDMW2Rdb\\n7uUkBXZMpW5lJAUUgXF7xnU2RcqU\\/KSLWi5l5Dea18iN7jhA1IabC3CBqQk2jmNF7kQdJLF9\\nMhcWNU3KaPtlPLQ4ZCtygreJtRlclkmWtGWmmJSgJcW2Zdxd11el1SUU4iZRb8+zudkV6MnJ\\ny6J+igiQqth4eydwX1TktvfqoYhmWuq9m5tlBznqXNzMqzSLUdKStKlWhSaEpxtWzmlzGWsc\\nmcR8RWrBkpNSZT5wqNRU8mTllP7BptLAb2szMEJWtTSFOthLSdVTq9ZCXE6q1ow5vbFO4q7K\\nTk5ctwNUyhyjLs3ONB9FIoklKsI13X5xS3W0GXl0BxxT9QmnQykaynA0Dk5j3bPsr2IzrtDl\\naTPYpxxLoYcVIt9mDKuzLLcxK+fVZ9ky0gX2XG3EopknOTSUONl9hAcbWrqjA+xlE0w1UW22\\nGJS5P0tUSmYfV2Ssrq5SWGVtsNrCwFnzbQKHbuZTGYF0Y2Wbbe1lmJo1+ooJSZWkKS4w26CA\\nQ\\/UCoSiCnJWuJdUy6hSdVTKYxtunHC9Lj2kvJTCLdkHPNTLUla0zikFJGq9UlATKl+cokyok\\nkniUZAxpM0iuVz0Y8GDUKJYU3M47XpLLcl\\/IbJmmZay5aabXqkVC\\/wCZZmabMskZrRMWnJXW\\n0tYSy6qV1lON6ItITlO9KzH8T1IXeZwvsmdC2lWfhgqdt1MzKON7FUvWLl8qeuqsNTLOumoS\\nblVl6JOqdcBozbS0st0lUcQ+U7twuhc0jZbg6ZOjEmZulTMxKqAB7RwXxFUVLaJBStymUmbB\\nJCUj0RLqhirZPs\\/uhlSsY11rTJLlmbl2nkgfXfJFLl0pWkp\\/IicnmCAFpMSb9IHTu0ZNHNyd\\nlsSMTKfP3ext1O2Jaaxdt8OTLYSpUtP02nvql6DMPa+bTl2VChSz+qvZzBUhWppDx65bDFu6\\n\\/LKNgDZVHwspCw40zddzJlryvZxJzDc3KU+YYFo0JakqIdk5qRu0hQCmqkkFSBplo9q3DcTh\\nckZJ5xtxWu5PzJLUsVlRDi1TLuQfWVZhaWA87nuKAY7ioWEVPYCHq7NuT7oyJlJUrl5Qb8il\\nb3mzTyTvyUgyqgPrDONhhvyf9luDSiaxAlWMqyghbi6olK5PtrhSiijsqVLFLm9SKo\\/P3VdQ\\nWLgRT2LfKAxhWe0l6fNN4akFAoTLUhSlT5RpYO1JYD6Fo1CXJNNPBTYKQTqfgr5xIxWxsuM1\\nzEG8rzxIuN3aBmZuGq1OuvyzK3C4uVpzEw6+zS6ehxRKJKnsysjLDc0w2gRyVFwkrc6EPVZ9\\nikMK3loas3OkcQNm0sMNaw51zBcQfrs5+acgafS6dSmfJ6dJS0kzzolmktBZGeSnCkazq95z\\nW4VKJOZVHIoGZ38B4A8emLUcxCWGG5OjyUtTJRhAaYbaaaSlptP1UssNoRLMoGtkJbWBwMUT\\nN1eamnXHluOOPOqK3Zh9an33VnetbjhUVKJ3lRUTprHxdEw6tajJQ4JBNQmk5Hympas0rMZ7\\n0y5SmUbIJzSpLAcTkPPUpOcdgMtgBOQySgAISkZAZZAJAyAAHMBuTCSUlRAHP7OuHwAAAHAR\\nHJqZfmV55h5x5Zvq4tSsoPBIOiQbbk2A1FrGNS86tZ9NSlE8VEmw5DgAbbhp3axWCCCMNRsO\\n\\/hDKRc29vhBDlpvLzjxPDqB+PwhNpGscz9Ue09HfDwAk5CGSd5PiYWs29Eev5fP9cVSnWPVz\\n93phbsigAG4fp6zCyE5bzx9w7\\/HTDKlZj3DdDcVSnLt5zF0EVAzIHTCd0G6AAk5CFgABkIAA\\nBkIVSnnPoHRDKlZvAQ0SVmw0A66HjrAlHOfV3936IVAJ4RVKSo9XOfHPCoAAyENqVbTefh4\\/\\nKHALCwigSB285i6CLkpKjkB78h29HphoknUwhS+CfWet8Wwshoq3q3Do5z3QqhoJ3nerp6Ow\\nd8LAE8PHbHkNxYlCU8B6ef1woEk83pMXhAHHf2936Yvhsr5a+MEWBAHHf7ovyA4DKCCEEk7z\\nCCscBf3QQRdqqPN8PfFwb6T6oSVAbzCbrV3D2e\\/f7ITjLTBHQxxl0jMMr2xGwdRa94zlgVtq\\nlV3DWSrzTOJrki\\/TmqixcVMt2aYZlZ6izKlTUhJatURUqlUadU5Ol06ddlHEjFHUT2+nuyjI\\nfRf0jb20WMYLaxZsh0vKp7okLnt159xmn3daU64z88W3Ug2SnVmG2kTVNnFtvClViUkKq2y6\\n\\/IoZjdYdcoQqsunEbc6ujO5mZx2nuBuclA8koROsBTbqXlyqyHVS621h5CVISCopjMkPNBNN\\nJqPbGUcVkdUwsJdZCrJD6MyVhZZJCy3lPaJSUgpNlDoWrUmqUGpz1GrlMqFGq9MmXpOp0mrS\\nkzTqnTpyXUW35OfkJppqak5plwbN2XmWmnm1bnE80cZExDE\\/AHRV5TDDGi31KNs23iBVrblK\\nlbGIlFl5Rq76ew5Kp8mkq8w2tqVu6iyL36ynqTUnTPUd1mYkpSboU46\\/rRi9J7RTxb0Tb8cs\\nrE+jASc4Zh+07xpQcfti8qUy6E+XUedW2gtzTO0aTU6ROtsVWlOrZE3KiWmpGamt7XMItS9I\\nlsWYWrEnjDBM+4tqVxDSrkSr7a+ycp9akyS\\/SalLPBUtNSs0ltyXmkqlZlEvOBcqiQ4owdVc\\nNOgzDZeklpbcYnG0\\/k1tPpS4wtQSpaAh9tSXGHm3HZeYQpK2Xl3sMY4IcRTIdA9QiC9oOR66\\nPR0ifZ9\\/uhCCFtRPZ6e\\/OLS30H1woLSe7xgyrG439fzhODIHiM4u1VDm+Pui2FA8j7IM6hvH\\n2deyLCgHhu90JlJHH1wvBCgsjv8AH5woKB3ew74aqQlXEenn9cN1tFO9O8dHOO+H5QDw3eOj\\n9EJkEcR6eaHAoHuPL5c4VHHQQ7W0FbxuV09PaO6GyklJyI9+R7\\/RCo9CiPDlCZSD28xhIgjj\\nC8UIBGRhSVEb9R8PD5Q8CDu6664w0UjnHq7vHs4JEAjIw7UnLs5j3wipPOPSOmHgeI9UIUni\\nnfyH2d\\/W\\/e0IIORikLkAjIwiRkSOiHkqzeMKSrNw1HXQi0gEe49EIEZbj+n7IcRapOY3cR4y\\nhUKhmpOqerm7vRDZ5GfnjiPrdY6fR7uyHxGYyP6D7IRIIORh5KrjvHv7+vtj0Gxv0Y46CFXU\\napzH1T7D0d0JQ6hVjbgfjC1AKGYb+tPVBDV5GR1hwPHqP28fXDqKKAUCk8+7x2cYeBsbwhJs\\nb+3wjjlJzGY4j2+Pj6kYcqBSSk8x8H0jKEFDVO7n3jqPR6IeHPgd3XXyf3xYQCCDwhAjLcez\\nfz9+cOITWOf1+PHshxBsbcD8evsgjj3U6qj0HeO70Q3WOf1+PHtjkHUayetO8fEen4QyIzBH\\nTuh5JsQfb4R6efVxa\\/zhCLVDMdY4d0XcIIWrQhQ7uvWIAbEHlDYjMEdO6ECOIPWDDpQyJ9Yh\\nBYyOfT7\\/AB8YfbVw4EXHj+qHxqAecNCMiR0HKEFDIkersh2scD6D48c0ILG7Po4+PHGH0Gx8\\ndPl13wQycSDrIKQpKhvSoZgg5g5jgR1ccuvdDWjGpWjXJW6rGuC4bCuiTJVJ3FZdZn7cq0qo\\nqSpexmqY\\/LONpcKEFxKFJLuR2h4Q\\/WMxn0e7x8YQUMwfWIyAo5HGyAtt1JQ60sBbTqFCykOt\\nquhxCgSFIWlSFDQgw8w+9LuIdYdcZcQtK0ONLKFoWkghaVJsQUkApIN0kAg777HsFuVf0mcM\\nDKUvFSl2\\/j9azIQy5PTGxsvEViXTqtpU3WaXKPUGqiXa85SanQX6pU3UJ8orTDji5g7gsBuU\\nh0VceHJSjyl6nDe9pghCrHxUTL2lVlvkpRsqZVnpqYtisLecKhJS0hW3aq+0kuOU2VJKExWC\\nMwR0xx83Iyc8gtTssy+jeAHEBRRnkCW1ZayFZfhIUlX7rpqLFGwzZ5intH2qUnDdSXmPnuH0\\nNy0upatQp+jrSacpF7laZJFOeWfrTGgtduFNvWO8N9kxOTqcRU9FgZarlTsylAtm7GopInAq\\nwCUecLmmWxuZ1N\\/QBtTGS+bSLTTNTNWpzeqFU2tlc8gNHiiXmitM5LFIz2aWpnYJUCpTKv2M\\nZOWjpB2dXtlL1oPWxUFFKSZxQmaU45kTkipNpRsASjXV5bLyrSCttCXnSN\\/n7YGaYOkxo4uS\\ncrhviXPVe0pNxH\\/0tsRFTF2WUqXQUHyGnImX01q2ZZeoMzbVVpTi1FSlrUFqC9zuAvLA4K3o\\nZCg4829VcD7ndLMt8\\/lUxdeGs\\/ML2TTbjdep8p8828Zp5S3TKVujrpdMlgDPXK+ErcOPQMR+\\nU1sRLacO15vafg6WtlolUTNVR5iVRlSG2ZJ538IKcW2grsmaHUp2nMnKt9pywbi5qdjrZHtD\\nyt1NpWDa67Ydo6tqVl3HlWuRUG2xT5gZiMzlQl5R5eqW1DUmRPpH6D+itpgUd1WL+GFu3FWJ\\nmTLFNxFoOrQr+pyUsttS0xI3lRtlPzrUklhgytNq66pQTskszFLmWNqyqN5pXfJ9MYbEFRun\\nRVvOWxmtltUzMCwLucptq4l06XSlx1qWp1YU7K2febiGWxtpharLn3H3m5eRoc4Qt0bscNsW\\n3006RufDS96fW7aqaTMyU9b9WkbgtertFZbW\\/Luyj85SZxBKC2mal1LW3qkJfQeGd2EeKLmI\\nUtUZapSctIVikplnHkyrjipebYeDqRNS7Luu6wG3UajzRffSEqaUlw7TVT0ns12+7LNvVUlM\\nK1\\/Dk9g\\/aDOJmEy8uoh5mdfk5dyZmWpKtsS7BdeZYlpl3zSt0+WsEKallTLxBMdxvseTJSrt\\nWSqWqNOs2v6UkSmXnG0PrQhp15kFxt5C1ONhLqFzKbKC1BtGseahdlqXNYly12zLzoNXte67\\nYqk5RLht2vSExS6xRatIPqYnafUZCcbZmJWZl3EKQ4062CCDmNXdHyqhkT1743s\\/KH9H13Bn\\nSrs3SLo1PCbI0kLZEpc3k6EhMpifhvK0uh1aa2batnLmtWfM2fNpCmmvnOo064ZwrfmA+4nR\\nProdbQ62oLQtKVoUOCkLSFJUM8jvBBEZWI6G9h2sTdOcKltNPKEu8q13WFBLjC1hOgcU0tsr\\nSAEhRIBNjbmKoSLlNnn5Rwk9k4pCVkWzp0U2si5sVoUlVrkeloSDo2WMlHr3+PTCCxkeo7\\/T\\nzw6WN2fRx8eOMN18Ow\\/Z8Y0sY6TYjv09segFyMekx\\/ZIaCmGgqtQE7fODKncFLy2jifKXPuO\\nlZNdm1NaFOLmX0VKwqhbSJiovJAnq5KVtttS1yrxjbDEJf5PRpJHDHStubAas1ES1s6Q1qKb\\npLL77bcu3iRh6zUK9b6kKmFBtlVUteZvOlltkofqNSXQ5bJ5bcu2mbRHdezSv\\/hDg+lzLi88\\n3JoNMniSSozEklDaHFkkkrflTLzCzuzOkAC1halAnPPKYwom7jA82dJJJKmgkJJJtcqbKFE\\/\\npFQubXggggiexuoIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+cuq5aLZls3JeNyzzdMt61KFV7l\\nr9Re\\/YqfRaFTpiqVSedIBJalJGVmH3AneUNk9UebTj\\/i7W8fsbsU8Z7g2qKniXfVw3WZV1wO\\nmmSFTqDzlHobS958loFHEjRpLerVlJBoFagnOJlPLhY\\/pwa0JLismmz4lbqx9rtNwzprTLy2\\n51u2ErNw31OpQkAOyLtDpiLVqIUrzU3dLZghZyg9IG\\/Po+Occk+UTiHzip0fDLK7tyEuqqTq\\nQbgzU5mZlULTwcYlW3HEki+SdFiLm9bY1ne0mpaRQfRlm+2dA\\/rr1ggKFt6W0hQ5h7W8KgcA\\nOwQ4A4AdkJIG\\/Po8d8LoGZz5h4Ec0LOoHL7YhEKgZADoibXyPOj+nA\\/Qzs+u1KQ8ku\\/G2bcx\\nWry3mNnOCjVhhqTsaRU4tIeXJJtKTkK3LMLAZYm7gqK2R+uHHnoiOi5gpUNIrSDwkwYkEzOr\\nfd40ynVl+UQpyYp1qyal1a8Ku0lAOa6Ra1Pq9STrlDetKEuust\\/TCf8AVmZp1iWW980ysrTq\\nfb1Hl6bQ6fJpRLycmiXZbp1HkZWXSAhqWlimXZbYbRqtMNqSEEIBic4PclKPKVvFNRUGpKky\\nMwtx42\\/Isy7JnJ14X\\/OaYbRbmlxYJANjaey+iOVCovTiUZ1pU1TpMEGypqbUkLykblIbyIO\\/\\n0Zg6E2jF3F2vi4L0nw24XJOj5UeUCVEozlFrM2tIAAzXOreGukfSNNtEr1EoiEJykGlve2PO\\nkHiXa9HvivqwVs243LTtO0ZOrzLVq1BdrbKmVO5n6ZKvNyNXma1cEnUqpTKlUGHpmWpMzJSz\\nC20tFJlDaceOo0dtGDFzE9moKlbnat6Yt6yXA+hM4u+bsX8xW9NyyXVpdm3qROzxuOcaQsOq\\nplHnXkeaypaYMUq09PzcvKMAuTE4+2w0CfrOvLDaAo5ncVqGZP1R52\\/cBzXsMpjuMMWY52tY\\nglmnZmfqb7NNU+gPJlHphaZ6bMuXUnszT5P6OkZR5uy0S6nmsw9IG79vFd+iKVh3AlNmFttN\\nSgn6oltZbLrLSVSsmh4oIzofdE7MvsruhS0sOlJshQ+wt2xq5cTaJpoNSlPWVAT0yf2QJWpC\\n\\/J2UfSulCk6u8IaKgobbMHLuqgYc2\\/SlNuzDRq02kBSn55KVMJIzzLUmM2UpJyKQ\\/wCUuI+s\\nhxOWcfV0yRZplPk5BgANScu1LpOWRVs0BJWofjLUCtZzJKlKVrK4xzDKdVOfOrf6OaLkqFdn\\nJtbiG3CxL5lBCGR2alovZJcWDnJUmxUkFKNSMto5AenHXSoBWRFzYJ0JF9LneTbU6gb9NwhR\\nCEjVQlIQkAAJAASEgDIJAGQAAIATuEORuAHRCaBxPoHjxwhSI8s3Ph8ePXdGJBC6RkMvSe2E\\n0DM59HvhwhOsoDm4nshsm1zyjwmwJ5QuynIax4nh2faYWgghkm5ueMMk3NzxgiqQVEAcSfB9\\nEUh0yjIax4nh1D7YYUbnu4dd8OfUT3nr3db4USkJAA\\/Sen05Zw4SMh1nxlFiBmc+Ye+FgMyP\\nGQ54ZWrh7fs6++GouQnM58w98KwAcw9EENwdddcIAM9whcAAZCLUJy3nifdCqU5nM8B7fHx9\\nTS1XNhuHvho+kQkbhy+Pq4ffFyE859Hf3fohZKSo9XOfHPFAMzlCwAAyENKVbdvPuhwAAWEV\\nAy3CCDsi9CCs9AHE\\/AdcMw2pV9Bu4nn93x8N4hBWegDifHPDtKQkZD1857YuAyyAHUAIVSjL\\neeMeEgD4DnCItSjPjw6OnuhYtuoS0VIWhLzZdZKkKSHWg84yXWzkQ4hLzTre0HmBxt1sb0GK\\nRtW0NNOLDq37YoWjNpf4d2lido6tvzcrbNZqVqyFQuDCiZrc+9OztQllSsqKjPUVU\\/PTtQnp\\nullu8qY9NzM5TJ+oNMtUc7nDtOpdYqHmNVrbdAQ80RKT8xKqmJBM2FJLbdQcRMMuSUq4nOlU\\n6luYQysoLzaWip1vLkWJeamAxMTiZILSQ2+40pxkPFSQ2l9SFBbLShmzPJQ6EEJzoCCpxGqm\\nCJAOlNyQ1Due2JXFnQJqsletLqEs7VXcMKtfdOmWKzITZknqWMML0rnk9OS4JR1575txEulh\\nibbU1Mi8pXV8ie0G12Rqtp3hW8Pb0oFfsbEO2lJFw2DetFqFrXhR2l63k87NUCssStQdpE9q\\nFylV6TTM0CsS+rNUiqT0otEydhiDAuIcOMszs1LNT1GmkNuyWIKO+ip0KdYdALT8vUJbM2G3\\nb\\/kxMJYcWPSSgpIJyqxh2r0R1SKhKuISlWUPISpcuo2BAS4EjKSCPRcShYNrosbw0CDzn0Dx\\n3xeABwEXhJPUOk\\/DphQIA47z45ohBUTv9kakADcPXxhIAngIuCDz7vb49cLAE5avoI4buvhF\\n2zPOcuzf748gKgN5hEIHPmfZ3xXVSOb4++HAQnnBPpy8eqK6qegeqCE5xyPu+cbeuS+x9naT\\nVKngxPVByVeYXMXnh5Mh1aXJebYKFXLQ2VAk7N9sorctLIDbQ2VxLeU+Zltsby7eqWDPKG6N\\nVJomItFlp+kX5QmamyGnWmqrbl0SaH5Oan7eqKmlfNt1WpV0VKSceaaVLzrbMzLvS83Q6hOy\\nDkPHDe+Knhpfdp39RVKFRtWuSFWbaCg2mbYl3QJ2nOqy3S9SkVzMhMgbzLzLwGW6NzXJS4wT\\nKPu4wemZ51LkiWsRbPcS4ElhKnZOkXKww4VBSU7dVBnpaXZzSFv1WZ1UqU8pWhwXiCrbG8c4\\nqxNTk\\/SOC8aooz2KsITCu0plSmmhUJGuzTcsvOzL1CZlHaY+idS2FOzAfRNB6WUto9dbJ5mT\\n2hYAm8LVYNu1PCaksST7qQ44uh1ELVLMLB9J5mVmG5hhbZuhmW82Q3kXkMay9LnRTvvRHxXq\\nGHt3ocqVDnNtVbDvNqXEvTrytovFlmotMpdmhI1WTcKZSuUh1516nzm5KpiQmqbPzuLOqk83\\nw90TQNLrA6l6ZejJeNos0KRquLdq06euLDNbk9K0eYavqRknnKVJt1eabXLyNIu9DZoFXanN\\nSnJD6ZiZMs9TadUZSGQpKkqeZfl5mUmpaZmZGekZyXekp+n1GQmHJSo0ypSb6G5mRqdMnmJi\\nSqMjNNtzUlPS8xJzDbbzS0Jt\\/G+HaTJopGKcJzC57BOLZU1GgzKgSuTXmyzdFmyVKUibp7gU\\n0W3VF4ZFsuKcfYfXHO2NsKzGEqu9KKbWJVxaywVEq7MixUwV29PKFJW0sk9owttdyrPZqUDm\\nzHt7otKDzZH2Hx6YdlCeYEenPx6os2Z5jn27vdFfRDwtJ7vGGpBHEZRaQDxEOiCM9b0k8N\\/X\\nwiwoB4bj45oASN0K0PeIalB4j1H7ePp9sJw6KSOsdI+PRFhAPEQ4F8\\/b93XhCCjiDY9buUIQ\\nRepBHDePbFkOA31BjwKKdFXt1x4wkpGXDh0dHfCSkhQyPr5x2Q6ixSM944w4lfA+35\\/P9cLB\\nB3Rxq0FB6QeB8c8WQ\\/IBBBGY5wYZrQUHpB4H4HrhyFAkG4iwjPcYRUkjsPA+OeFooQCMjCkq\\nt4cRDyTcd\\/GGi08SPT3+PdwSUMxl6odEZHKEFJy3jgfZDwO4jxEIUPzh4n52+P64akZbjBCq\\n057xxHuhKH0m47+MKBuLjfpfr22\\/XCa0849PfCKhmOseModdsIqGR6ubx1R6DY35QqGakhQI\\nP6D0+jPOGSgUkg8QfB9McksZHPmPvhs8jMawG8cenL7IfBuAecKQbG3A\\/HnDWCCCH0m47xp9\\n8CxY9xhF5OY1hxHHs+ww0UMwR6vHsjkTvBHTDJxOoojm4jsMPIPD1\\/D7dYUg8PXDSA7wR0xe\\nsZHPp9\\/j4xZDkOQ3IyJHRuhm6nVUeg7x3eiOQWOB9B8eOMNnk6yc+dO\\/0c8PpNwD7fGDn11x\\n9scesb8+Y8e0fZ8YshcjMEerthCHR6SSOI3fZ8oItWMxnzjwYbqGYPrEOoQIyJEetq9oNx4Q\\n6g3FuXw6+yGpGYI6YbkZgjph2oZE+sQ3WMjnzHwYywdxHjC4akcQeww3IyJHR4z9MO1jfn0+\\nO6G6xvz6fhlD4NwDzEHQ93XqhsoZEwgsZHPp8fb6YcrHA+jx7YQWN2fR47oWk2I79IfSbge\\/\\nxhqsb8+n4eBCS0haSlSQpKgQoKGskg55hSTmCDwIOQI64cKGYPVv9X2QjGQk2UPG3Xxj2Mw+\\nT\\/xgnMD9JnDV8XRXaDh7dlyJti+LclKxMyloVRF0SU3b1JrFdo6300om3azUKbWk1MsoflGZ\\nB4JdLDkw25NAwluNNq31SJx1epJz7ho9QKjkkSlRUhtLq1DPVblppEpNr1QTqy5SRnHn9JUp\\nCkrQpSXEqCkLSSlaVpPmqSrcUqSRmCPq9eYMTK9D7GFOPOjphhiJMzZma9N0Fqh3apTiVPi7\\nrZcVRK8++nNxbBqs5JqrUsw6pTvzfU5Va1KCgo8+bYW5\\/CmLcDbVKKhAqNDqkkh1zRAdmabM\\nGpU9MwtKSp1E00mek5lTmbNLJblzmbIQOrvJ6rrdVpeJ8BVJ5a2n5ddRkUrUVlDEwhEhUUNB\\nRsjsXDIzDLaNO1cfdACsxOSXLR6Mp0nNAHF2m0yQM7e2ETDGOljBKUl75xw9lJ9+55JlvWbU\\n+9VsPZ+8KZJyiXCZiqzNOdSzMTEuywrz+bQnvLaSJdas3ZFWwOZOZZIK5dR5gAnWaSOhnhwz\\n9SXD+vN3jZFIqE1qTDr0iqQq7TqUupcnJZKpOdD7awUKTNpTty0rWbUzMDJJGZPm4aauj47o\\nf6buOmAyZZ6Utmi3pOzVjbZaHS9h7djbF24eOqmGipqZmpe2qvTaVPuII1KrLz7DzEvMMPS7\\nP0Ax55jijDeHcbUchyRrVMkZ5h0WuWJuVTPyRWE3s4ZZ59txJ1SttDZJIAFQ7QKM7JTai6jK\\n\\/LPOyMyLEgPyrigDfQnOkOgE\\/WS2ki43dFkZgjphA7wR0w6UMlH1+uGyhkSPGR3j2RTAO4+B\\nitwdxHiI+7wjxMuPBjFPDvFu0nlMXNhveluXrRl7UtIcn7cqsrVGpWYOosGUnTLKk5xtbbrb\\n0q+8062604puPTlwxxAt\\/FrDiwcUbTfMxbOI9nW1fNAeUQpa6PdNIk61Tw8ElSUvolZ1tt9v\\n+9vhbKiFJyjy2FjJR69\\/j0xOE+T76Q4xY0M5\\/CGqVDyq6NHO8py2ky6ytcymwL4dnrtsqcff\\nUTrN\\/Oyr2t6RZBHktOtuVaGTWyEdAbBq8ZesVLD7qsrVSlhOyqSRbzySv2iECwOZ6UWtxR1G\\nWUTEvwlNdjNuyilejNNZ0A\\/11n0rAHippSyojUhsXuBpvigggjqiLBgggggggggggggggggg\\ngggggggggj5e8Lrodh2jdF83PNinW1Z1u1u7LhnlDXRI0S3abN1aqzakgjNMtISjzygPrBBA\\nUN0JWtKEqWtQShCVLUpRslKUi6lKJ0AABJJ3AE8I8JCQVKICUgkkmwAAuSTwAGpMQ3OXzx7\\/\\nAFS9LmjYP0yc29vaP9lSdImmETPlEsL7vxuTuq532S2SyhxqgGy6RNtEreYqFGnGXnQ6nyeX\\n0cIGQHXv8eiOw8ZMS61jRi3iXi1cRUa1iTfV03vUGyorTKvXJWpyqiRZyzQmWp7UyiRk2W9V\\ntiVl2mWghptIjr4DgB1AR83sY1xeJMT1utqJKJ+feXL3vdMm0QxJINyRduTaYQbW1SbgXija\\njNqnp6amlX\\/LvLWkHelvQNJ\\/7rSUJ56awqgZDt3+Pf6YcIG7Pp8d8JcIcDcAOiImTck84wok\\nIcghgUmt4iYs6Q9WlFLlLGosrhzaDzzSiwu4rs1anc07LPA6onKLbtPp9OdQTqmUvFZLYyaW\\niQpjdWQGKVb7ThydWuqTiUKGezRry8mhSRxS4tc2tQVl57DSupGO\\/JnYFpwC0N8JLbmpUyty\\nXjSRileKXEFqZNfvxiWqrErNtEZszdFtxNv27Mo\\/36jKzy4R9hfNXTVrkrNScfCZRhxxhl1x\\nSUstykgksh0KUUoQ0tDa5kqO4B1W9KQAI\\/tqrysP7M26BL+hO4kfakXCldnPNQpM7Uj+bdOV\\nLMg4LklqaIGl1Ds7YvhxMmxTlvICTKyqqnM3H\\/XZ0AspXycZaWADuBlRYnjGG5dvHFMxWcIt\\nHSkToUzSpaZxXvSXaWlxtVQn\\/LLbsiXeKEazMzISDd3Tj8sp3NctWqZMqaSkSy3NGeFdI8vu\\nBdQWnWZpLBdBO8eVTGszL578gUt+UOAnPJTaVDpHYemFjY9pEaS2MGLQmVTFKuO7p2WtbMLQ\\nGrLoCWrds9AaWSGXXLdpdOmp4JAS5UH5uZKNd5alPMM6R822yw+tJExVXFT68wM9irJqVSDx\\nKSwhLyRvyL6+aJLhmiJwRs4o1FDYZnXZRKp1IFlef1AmbqAUbBSuxLrkqhRsQ200myQkJjnf\\naTiU4jxPXqslwrYmpxUrI3Nx5hKAS0qUi5CO0l2Q8sJuO2eWq5UoqPYiE6ygnpPs4n2Q+A4A\\ndghuwnir\\/i+4n4Q7QN+fR7+HujUE2BPKKx6660hQDIAdEVgi5IzI9ZhiCFEjIZek9sPGU5JK\\nj+Fw7B3n3CGyQVEJHOfB9Azh+BluENrOgHPf14\\/CELOlue\\/rrdBBBBDCzYW59fd64QgXPhr8\\nuu6L0J1lAc3E9kPeMJMpyTmRvVv9HNDlA5\\/V8fHbDJNheBRue4aDrrhF4GQA6IXQMh1mE0jM\\n9nHu9MLQxCTp1z3QRegZnPmHvi0DM5DnhYDIZDmhC1WFhvPuhCjYWG88uvUPui4DMgeAOmFw\\nOAA7ItSMh1nxlC6BuzPo6uv0wyTYXj1IsO874uAAHvPTFYIuSkqIA\\/QM+Pozzhgm+phK1cB6\\n\\/lFUIKz0AcT454egZZADqAEWpSEDIenrPTC6E5bzx8eP0x4SAPgOcNwJTlvPH3ePHXfBAASc\\nhDJJJuYQpXAb+tB39b9wASchCqUgcd593Z3xUJA7\\/HNCiUk9nT3Qypd9B7YEptqdTv8AD5mN\\nl+ghpw3bgLMzWHNWuKak7TqcvUVWlVph0zEvaVyuMTDslIzrEzryz1q1ieyS9KTLTsrTKrMi\\npBEvLzVXeVuXq9p6LnKg4Yow\\/wBJ2yKbT8U7SbmPuYxCtGa+5XEKyJudb8mZurDC+Uibq9uh\\n59TPzlQKiurWpU6jKyUtc9FrUkuRk3on4HMBGyvRHx4rVMmqY4mcU5dFnFpSUPuqyuC2lES7\\nktOKHnP6jRRIzrigt7NcnPBTk6HHkaaSxxi7Y5PzeJsJvmewtVZlCsY4FqSnJrDs6qYWUTFX\\nk5FRKaVUJsrSmozkh2RmX0y8zOtTSfOw70vshr9LxdLfi6xWG1zgl1\\/gnV3QjzgJYbKl0GZc\\nXfzmXS2lbtNbfzBlCX5VlaLSbacPNNvRC0heTZuOWdxrK8WdGiv1Rul2PpT2pRVyiKLMzkwl\\nimWtj1acgJhFkXM7rtsyVy0xx+0rozaVTFs1IVyl0XpaTflJ2Wlp6SmWJ6Tm2WpiUnJR5uYl\\nJmWeSHWX5d9lamn2XW1JcadbcU24hQcQohSVRNksLEbDvHDC963bzp1FxBwixIt+pW5WqRcc\\njL1ilzNKmxM0av2zcNOnEvS89Iy8w1O0ipSb6HTKvMPNoUtpptAiNcpfyed38lLeDOL+DMrc\\nuJHJ9YhVlpqcoyn52v3Low3LV5prYUyZq74mnqrh9W5iaUm0KvUpoPPzOpbFenU3GaVXL5v1\\nFEwftaw5MY12WAyNQkcoxJgiYWhM3TJlxN\\/2Mj0Uhh7KtUk83lk5tCFNoRJzbMxLJh+0LZbO\\nYdmHXZJo9iSpQbQD2TiQQFdkVek2tJNltK+pdA1QUuudExcEKPV2wzpFWpddpkjWqLPStTpN\\nUlWZ2n1CSeQ\\/Kzcq+gLaeZdQSlaFpPTmlWaVAKCgOTCSeAimVpU2pSFpKFoUULQsFKkKScqk\\nqSQClSSCCkgEEWNjFKEEEggggkEEWII0IIOoIOhB3Qlsxzk+7vi7UT0e0wrszzke\\/ui7UT1n\\nx1ZQ2Vp7z6vnaPIRyHQPUIy00NsQF4e6Q2ElfL+zlJi55W06uVE+T\\/Nl1pctqYW+kEBbUi3V\\nGKj+HqPSjbmqVIAOKWono9p7456hzkzITDM7KOKYmZCclp6VdRlrMzTatq06k5EBTa5dCgMg\\nRllq7yI01dZTNU19sixtYHl2gLRPHcV3Gm8A7xF4+T1VVSO0aUkCohivUyqUt4X9E5JZVTaU\\nRuz9pTw2g2uO1UkaLVeaZadxOW5W5WfBUWCdhPNJ84vSbqgX8gDkpTQSl9sH++NAAZRHV5Y3\\nR3lcDNKW3sYLakPJsMtLFipz8y7KhpNLoeP9rSKJy6ZFpLLTTUojFSykS99SEulTrk\\/dVqYo\\n1yYe8oqzSI32UGqNV2hUausoCWa1SKdVGkZqzS1UZNmbbQddCF+al8fWQk5cRxy6I5SfBGZ0\\noeThxtt2iS7MxiZgrTE444UvubUzEvfODKHbzpUpIBkLJmbrtiXuXDnUWENvSdyzLMw4wy84\\n8ia+TfW04qpeLtjtVeCkVGSfxPg9x3U0\\/EFMQnz1hi4Kgmelcr620ZUhmUnR9aaWo3ltjwq1\\nWKEubQ2kTMv6Cl2F0rQFKl3Cf4qgthWt1h5CScqYigFscxPp390WlCh19kcJZ9ySF6Wrbt20\\no50+46NTqzKpUdZbLc\\/LNzBl3Tqp+mllrVLvjVSUutOJKUkZR9EUkcRGodQtl1xh5JbeZcW0\\n62sWW242ooWhQ4KSoFJHMHlHDqkqQpSVApUklKgd4UDYg94IsYbRaUA8Nx8c0OSAeIiwo6D6\\n\\/HfCY8BI3Q1KSOzqhJSAd43Hxxh4QRuMJqQDw3H2QQ4lfA+35wzII4wmpAO8bj74dkcxEIqS\\nR2dPfHoJG7rxhZAI11ENSCDkYIWKQe\\/xzQiQQcjDqVBX2w2boOmo69\\/f94ixSc944+\\/x46kS\\nAQQRu4EcIcxYtOe8cfHj9EOpVbQ7uB5fd8PDc4CCLiONWgoPSDwPjniyHykhYyPo6j0wzUkp\\nJB\\/SM+Ppyzh2FA2N+jCahmOvmhEjiD2GHEWLG7Menr6\\/RC0K4H1fLrj4w8CCLjj16ujDMjI5\\neDCK05HPmPvh2oZjrHjKECMxkeeHkmxv7fCGz6CrjcfhxHy\\/XCEWqGY6+aLyMjkeaKQ\\/DsNi\\nMwQf0GECOIPYYdrGRz5j7\\/HxhBY5\\/X8PHZC0GxtwPxgjjlp1VEc3EdkWQ7eTmnMDenf6OeGk\\nPpNiPYYd+snvHxHz74IReTmNYcRx7PsMLQHeCOmHwbEHlDYNiDyjjVDMEekdsIw5UCklJ5j4\\nPpGUIKGR7d8PDhx039fKH98WEZgjphAjiD2GHEJLG\\/Pp8d0OIOtvX6+vhBHHKGqojoPs5vZD\\ndYyUevf49MPn08Ff8X3kfGGixuz6D7PGUPoNj46QQlCaxwPo8eOaFItUMwfX6oV9Ve7Q\\/ba\\/\\nvhSTYjv09sNljdn0cfHjjDdY3Z9Hjuh0RmCOrd47YQO8EdMZKDpbkfd1eHoaLGY7N\\/j3+iEF\\njMHq3+PRDrjDcjiD1gxkIOhHL4dfGDrrdDYjMEdMIHeCOmHJGRI6IbqGRPbC4cQd49fXuhtw\\nhAjIkdEOVjJR69\\/j0wgv63aPs+EPjUA8wIciyN6HIxYxBmq4o4DVSbyZqUvL4mWkw4pKGxOy\\nXktAvFhsqQS5MTkm5asyzLpcBSxSqi+lCsn1o0Xx3\\/oqYvOYE6QmFuJqnlsUyhXPKS9y6pXq\\nuWnXUOUK6EqbRufW1Q6lPTUshQUkTrMrMHJaULRGsc0BOJsJ1il9mHX3JQzEkLDN59KETMql\\nJsSntXWhLrUAT2bq02IUQZps8xGcK4yoVZU4W5ZqdRLz5uQn6PnQZWcKhuV2TDqn0JOnatNq\\nBCkgifVo6XBsn61azzvmPpbrUi2sjc62UStQSngkqW15E4lB84iXeWSsHzI3nym3RwMlV9H3\\nS3t+mrQZ9mfwRxCqDDKG2kz9PM9eeGc1M7JIW7OTkq7f0i9PTAKhKUiiSIe2bMswjezYVdFv\\nXVQK62+DKtTjPlDqFDUVTpxJlptYKVFK0+SPOOs5HJS0NuZ6uZP0PKc6On9lPoL6QmFMjIKq\\nN0LsmZvawGmGg9OOX3h66zeVtyEgRmWpi4Jmim1nHWs8pGuTjZzS4oC0PJbr5xjsWqeDppXa\\n1LBc69LSiFHO79Gzyl1WkqUokq1mhVKc2ACES0shAukWjofbNQgZ1+aaRdNUlEzbZA0M7JBK\\nHkIsN7jaWSo29JUwsnfePOwk5tE\\/JSs6gACYZQtSQTklZGS0f8RwKQcyd6YvWOB9HV43x8fZ\\nM8HpGZkFKzVKuh5oZ5\\/Qv\\/XCR0IdSpSuO91MfZL+qer9HxjDmGSw+61bRCzkvr6BspGp3+iQ\\nD3xyctORakfok28Dqn\\/ykfrhqscD6PHtjdPyC+kGnBvToo1hVWeRK2tpC2rV8M5sPqcEqzdk\\nl\\/312LOlLRzM9NVSjTdpSGsl1tLl3O66G8\\/KZfS0oZpPVv8AHoj6ewL4r2GV+WRiTa0yqSuf\\nD67rbve3ZtKlJMrXLVrElXaU+FJIUNnPSDCiU7wBn2bnC9XXQa9SqugkeYT0u84E3BXLheSa\\naBGv5WWW60ba2XGTKTKpSZlplN7sPJXYfnJSpJWk3IuFIzJtcaHeN8ep3BHXGEuI1v4w4X4d\\nYtWqta7axKsi2L6oeu42683TLpospW5JiZLRUhM3LMTaZabb3FmaaeZWApspHY8fQZtxDraH\\nW1JW24hLja0m6VoWkKSoEaEKSQQRcEEGLjSpK0pWkhSVpCkqG4pULgjuIIIgggghcKgggggg\\ngggggggggggggjUPy2eOq8G9BS+KDTp7yG48bq1RcIqVsyTMGk1YzNbvRWzGR8jmbQoVXoM0\\n8v6NCq7LMqJdfaCtvEQ\\/PlDWNxurSAwnwJp02XKbhNYc1ddcYQFICLuxKnGVplpoa+o+5IWp\\nbdvTsksozl27hm0tO5vugV1tWrn0DgSuzCFFMzOS30VKkaK7WpKEs4pBBBC2ZVcxMJN9C1eN\\nFiSb80pE0oGy30iVb5kvnKu3G4Z7VQtrdItbfEe1G89nv6\\/QYXQM1dm\\/4e8iEkDcT0\\/D9MLo\\nG4nry9X6Y+fSvqnrfpFOQsgZq7N8ZI6JGDDmkJpJ4O4RBh16nXZelOTcmxVquM2fRi7XbxmW\\n3PqodYtal1Z1hSiEmZDTefnjLHBA4n0ePZG\\/HkJMGxW8UcWcc6lKEyliWxI2JbTrycml3Bec\\nwZ+sTUqrPW8rpNBoTci\\/r+Z5PdIyCnSFMpaIStKlAFKSFKCvqkJIISrUaLNka\\/paAmwje4Yp\\nf01XqXTikqbfmkGYAB\\/oVkF+Z8CWG3AknTMReJONyT6aHbs\\/MsajBZlPJpNDYShLbroEtLJb\\nSjJKUsqXtAlBy1EqAO\\/dpi5SzGoYDaGuL1xyc75Lcd10f9TG0SHSxMKrd+h2jTExJOJUFJnq\\nLba69cUsobwujZ9R2sYlTyizT6UhZ89a595IJz1UAsS+snnQpSpjq12knjwiccvljOJu68FN\\nH2nzes1QaRU8VrpYae2jZn66\\/N2vaDD7aFhDE7TqfSbqmVNPgzHklfkn0JZYeSuZrCsMHHO1\\nbDlHcZK6dQi2\\/Noz52vyQTU53Nu9CYDUjIrskELsCrTTtCtVH8FdnVeqSF5JypNKkpQgZV9p\\nNnzFlSP40uhczOJJOoQTY6Ax8KRIO1eqSFNbz1pyaYlypIHmIW4A64cwdzTWu4rIHzUHzVRm\\ngwy1Lssy7KEtssNNstNpGSUNtoShCE9SUgAZ8w6Yx1wipQm67M1NaM26VKkNkjhNToU02QTx\\nyl0TQOrvGukf42SKBrKSOv2DefjFyYqmu0nGpUH0ZZvMof8AaPWUfGzYbtyzG28xw1UHMzqW\\n76Ni5\\/tl2J\\/8oT7YdoTqoA4HLM9RPd8IcoGQ7d\\/dCI3kDphxwiJLOgHP7I18EKoG7Pp+Hgwl\\nC4GQA6PGfphvr2QQ4YTmSro3D08YcxY2nVQBz5ZntO+L4YUbkmGFG5Jgi5CdZQHXv7OeLYcM\\nJ4q\\/4vuJ+EMKNzbgNPnDg9FF+O\\/22+z3w4A4AdghcDIAQmgb8+jx3wukZkeswws625anx6+M\\nNQokZDrO8+PG\\/OLoIqBmQOmEbo8OmvAA3i9Cef1fHx9kLoGZz5h74s4QuBkAOB5+3nhgm5vC\\nE+kq53Dd48B9v64vSMz1Dj46+2FotSMh1nj3Rd48euGFG57hu+2FFVhfnugh40jVTvHnHeer\\noHjnjsXCC+KNhtiLbV73Fh5aeKtEoj84ajYN8NTL1s3BLztNnaatqcEm828l+RM385Ux9Qmm\\nJWqykjNTMnPMtOyr26fCN\\/kgtK9MpQblwyq2i3idPhqVblGL4uaUt6emVkarVt3E7OVKy317\\nZ0MMtV617cqs264JeVk51tpsiUUPDshWpZ9buLMN0GaZcVaWxFMzFMl3ZdKGz5wmpqlnaegl\\na1N9g8+26OzK1AIUknYUulGrLEuxOybM4tzIzKTSn2lzBITlDDqWHGFOLUShLS3W1qUAEBV7\\nRoaQnPfzc3f6PHPCsbp8WuRHxpl5eerujHjhg\\/jNJy2u59xt8t1jDKtsJShKm6dK3jbr2KVC\\nqlWmm0rVLJrFv2VJF9LUtMzkqw4ufY0v45W5izop1qXoGldghilo9uz05820q57wocvXcLbi\\nnkspmjK21i1Y05dFgVZ9MspEw\\/LKrkpPSaVBE\\/JSrgQhWbUdmmM5KUaqSKQqp0x9pL0tUaJM\\nSlZkn2FgFLzLtOfmCtpQOZLmQJUn0gbDTIqOF6\\/SytM5TZhotqyLKUh0IVpdKg2VFKgD9VQB\\n0OmhhAAk5CFkjIe\\/x0QwpVTplakZep0ioyFWp80jXlZ+mzcvPST6M8tdialXHWHU7stZtxQ3\\nZZ7o5NKdbs8bor10KQpTa0qQpCilaVApUlSTYpUk2IKToQRcEWIFoj6UlJOYEKvYg6EHiCDu\\nN73vr4aiKpTnvPD3+PHUsAVEADuA+AEABUQAO4D4AQsAAMhDUClZfEwAAD3npj6my7lnLQuW\\nkXHJFRXTptK32QvVTNybn0U7KEnzcpmWU43mcwhwpdA1msx82lHAn1d\\/d+iFAOYeiGphhmZY\\nelphCXGJhpxl5tWqVtOoUhxB7lIUQeI4EQ5JTs1Tp2VqEk8uXnJKZYm5WYbNlszEs6h5l1B3\\nZm3EJULgjTURu45NzHhDl5X\\/AIM1GdLlKuOo1m\\/rBU+pQUmcS+FV+ly7as3CahShK1xiWGyY\\nl\\/mmsPHN+bOtu7ap1j4pWTdOBeMNu0i98MsQ6HULWrluXGx5TSajTKu0Zabo84gqS43LzWvr\\nyczLuMTdOn0sTkpMy8y2w\\/LQ9sEMQJnDHEvD+\\/5d9xBtK6KXPToZWsPTVHTMIZrEkAkhZaqN\\nGfnaatAz12XVpAGtqxLTZfZfQ2\\/LuodZdQh1p1tYW242tOu260tJKVoWkhTS0qIIJ7RWlLxd\\nW9kGO6ZibD7pHZ\\/kZ2SdWpMrWJBCm256nTqU+g4zNy\\/YuBRQpbEyW5tpIeYaUn6OS79P2g4R\\npFYcaR2VeprUw4lCc4k6i2ksTiGr3v5tNpeZNyA6lC0rBC1AwhtKnRou3kl9MSf0bbrn6hWt\\nF7GKYnbw0a8RKw404uRo87PNszVvVucb1Zdur2vVZpu3LwbKJZDrjtvX0mSo9Jul2XT2JkTw\\nGfjn6IlH8qfoYU\\/lJdAu\\/sPJClsT+PeEstMYkYJVEMsiquX1b1Nm1otlE4pvbinYnUJM\\/aM7\\nKKfakvnx6iXBPIW7QJBTUMPRBxem8ScO3LcuRbwvjDx5q3683NpU1PTcigPNUeozTLw8pRN6\\nks7Tantc3jUKe\\/NOhszSG09f7T6NRsSUGi7WcHWXQ8SyzEzOtpCc0u88oMKXMJQVIbm5SdQ5\\nS6khKzacbaJzOLfdVxLtGwo7QanMLDRRldyTCRfLqQEPpzC5SoFPpG5WhxhxXpOLMZYahPV7\\n+3nEV2Y5yfd3wpBFBFaudvCKzi3UT0e098chIJCUvAZfWZzOWRGSXsgVc+7PduyBB35bmMcp\\nT2nHCW2WluLfeabaQ2krW47kpKWkpRmtalKdSUpSCV6+4EgRhz6rSb9ydyND\\/dEcTyGvfaLV\\n2Isuv7UsJobzDJMVB5ZTpZtikz7q8x4JUlJQb2BKgm91CJbGC7oODuEqlqWpasM7EWoq89ZU\\nu16UVKUo71KUFZE8BnzZ7sosIp5tFbqNLcCVMVOmrOo4Apt52WcBCFoOaFpVLzMykhRy3b0g\\nZx0FatITblr23b+aT8w0Cj0UKbSA0fmyny0kNmlKUpQ2NjuyASkbshmM+08P5sS140JQUr6S\\naXLK5ioTUu7Laqhl9XJ05nPzcknf9eK22MYjXQNr2z+qNOBCPwspcm8pJsUyVYmU0edtrreS\\nn3wQd6SoAi4t3BiKWE3R6s0QTmlZh1AI3rYHbt7\\/AOOhPO2+IKNuWQMFcWtKTRlQViV0ctJT\\nFnD22NdJQt2wDddTqFkTxCjrNiepjrr7bJKkMM7ENrUk6rfYRBHEZeObpjtzlIqI3YPLV6Xt\\nGl2jJ0\\/FrC7BTFKXlwSlh6dpOH9l2rPPoSpCFKemqomvz69TygF12dUHkfsCOq46i2vUtNF2\\nhYhl20ZWJiaTPtAC1\\/PG0Ovq5G80ZjvIAJtuj5zYllUydbqDKRZHbKWmwIBzfXIB5uBZ52sT\\nqYalIPNkeoeAfRCZSR1jpHx6IdlAPDd7vs8boTII4+g8x7IrlLnI37j18xGjhqQDxhJSSN\\/E\\neOMO1Iz3jcfZCRHEH0w6FBXjyghsQCPceiESCkkEdxHxBh2pHEj1d3d+iEiARkYVCkqtpvHw\\n65QzUnLeOHu8eOtJQzHu8dEOyCkkEdxHxBhBScj1Hh3QA2N+UO6EcwYakcQfTBCqk57+ce2E\\nofBuLw3qhXcer+I63wktOW\\/m5+qG7qNYZj6w4dfVD3jCBGRy8GHkKuLcR8IdjjoIWdRqnWHA\\n8eo\\/b784RhcLQbG3P4wioap6uI8dUN1jI59O\\/wBPP464eKGY6xw7oQIzBHE83bzQ8k3HuMOK\\nFxb2Q0Wnn9fw8fbCcOOMIEZEjoh9BuLcR8ISg3FuI+EWqGYI9XbDcjMEGHMIrGRz5j4ML3Qu\\nGpHEHsMMVp1VEdB3dnNHIrG\\/Pp8d0NH08FDsPw8ZQ+DcA8xCkGx8dPXDeCCCH0m4Hdp7IFCx\\nPtENn05EK6dx7Rw9nuhqsbs+j4+BHIOJ1kEc43jtEMSMwR0+M\\/RD6DceHwhaDceHwhCLVjMd\\nm\\/vi6A7wR0w4DYg8jC4aLTrII4nLMdZHf8YYkZgjp8Z+iORO4kdEMVjVUodfsO8fCHwdxHiI\\nIawRcoZKPXv8emLYcXqAfb67QQgRkSOiEFfWPjjvhysb8+ke0fZCCxwPo8e2HmzqDzHv60h8\\nG4B5iGqxkrt3w3WMldu\\/4e8GHSxwPo8e2G6xuB68vX+iMhBsfHSPYbL3Ht9\\/V6BCC9xB8bv0\\nw5WNwPR8f0Q3WPN7Dn8PjD0KSbKHfp18YbLHA+jx7YQXwB6\\/HuhyoZpPr9UIK4Hs92+HUbvA\\n\\/f8AbD0IePHqgggjIRu9fX2wRMS5PzFsY06KGFtfmpszFetuk\\/qeXQVOl+YFXsrZ0liYnHFE\\nlU5V6Cii12YKt5VVufm3j4Y1wV6yqLNLXtJqXlxTJ3M5q8op5EvtF7\\/2SYl0szK8uZ7gMwIh\\n+cijiz5NceLmBs\\/MoSzWKdI4m220tezSJ6jvStuXS00FnVmJmdkqhbMyhlv6VEvRZx\\/JbaFq\\nYlS6P9X2UxXLfccGT6G6tKJz1fpGlIlZ0AEkKWtDkmrdkcmVK89P1IvsGnjgPbtU6BYs0nGU\\nvNSraSshgPrT9M0pQTf6zTyJylM3T9aaUM2oJ7Nl5\\/8ADDZRQ6upXaz9Hbal5skXcLkkr6Om\\nlLNrXfaDE+uxtlINgfRHnxcoRgP\\/AGKfKA6QWE8tT26Va36oFQuKypWXBEkxYOJLbN7WfJSj\\nikoDjNDkK5J0GYISUsz1InJdSithaox4IzBHSMokd\\/KesAVyFz6OGlJSJVexrNLrWB94zjUs\\nltiWqFDfnL6w\\/U9NIIL89VZOq4gNAPpQ4iUtyXSy482NSXjcU2cE\\/ISk4CM5hltawMtzoBS6\\nncAPMdStO4ZbovLH1L+ja7NJQkBpbqlIt9UNu2mGQLb8qXFNk77tWJ3W5Ur0n5nUJhoCyQ4o\\notuDawHGhcaGyFhOgGqToDoFeMNiMwQecEQ6UMie32c0N1DJR7c\\/XviEX3dxv17I1KDqR6+u\\nuETm+QAx8OK2g5LYcVSeVNXJo+3vXLEW2\\/rKmfuQrzpvO0JpThUsLlWTV69btPRk0tiWtpLG\\ny2TTLr28yIR3ydvHQ4faYd34MT8+4xRsfMOZ9qmyIdKWJu+8NVTF3UVxxouJaUpmznMRGkKC\\nVzAdfbQ1k0p6JuMdzbLax9M4KpDi1Zn5BtVKmLkqIVI5W2MxOpUqSMqtROpUo3vvNoYdmfOa\\nVL3N1sZpZd+HZWLf+ZU38bWtBBBBFhRvIIIIIIIIIIIIIIIIIIII84TTTxpVpC6VuPeMTc2u\\nepl4Yj11dtzK3g8pdl0N1FtWO2XddxCgxZ9FobADayyA0Nhk0GonRcoljIMBtCrSLxFl5nyS\\nrS2HdUte3H0LCXmbpv8AdlrEt2blkKIU49TqrccrVVNpCvoJF51YDTLxT54A3kDpjlryjq1f\\n8HcPIVu85rM0i4vfWSkVEbxYfSI10NwUk2Nq9xvN3XJSQP1UrmnBfeVHsmSbcgl8c\\/S4D6y6\\neA7PfvhdIySB1QjxhwBwA7BHLDnD19e+IDCyRkkev1xM35KLCJGE+hfhxMTMoqVruKT1SxYr\\nWuhKXHWrpUwxa7qVfWMu9Y9LtiabJ80uTDy0ZbTfEEwvsOq4o4j2DhtRc\\/nW\\/Lxtuz5FYSFp\\nYmLgq0rS0TLusUoDEmJrymYddW20zLtOOvutNIUsT5KXTKTZ9rUyg0NhuTo1sUKQo1GkkHWR\\nK06kSLNPpsqkk5lDMuxLsJz5kjn3RGa\\/U0yLbLVkrU7ncWnOApLTQ32sojMo+icpB7NQ4ERd\\n2xWimcqVUqqkm0ow1Iy5KbpMxOrK3Ck6DM20wlKtdEzGoINx8Pc75nq1OupUChpYlmugIlwU\\nKI47lO660nPcFbsyI8\\/\\/AE8sZTj1pdY64isTonqNNXxP25aj7S9aXdtGykNWhbUzKpPmtN1K\\nlUaWqzqUgFUzPTLjgLri1Lmi6b+MLmAWihjtiqxNqlavQ7EqlOtuZQ6WH2rwuxTNp2nMNOBS\\nHFKk7irlOnXEtkPGXl3dRSFfSIgDyEm7PzspIsjN2cmmJVvcSNd91DSSR0ArBPVBsZpZcncS\\n4qmkFC3l+YsrWbhIcWJ6eANzZKAJIJA1CLgm1on+3erpaYw7hplYyMtrqkynUaIQZGSUeF9K\\nhmzX3hQte5yfwupXzda0vMKSA7VHnJ9RIGYaVkzLJz50lllLyRwG2PPrR2awN6j0AD1n7I4+\\nTlmpKUlpRgarMrLsy7KTlmGmW0ttg5ADMISkbhlu3RyjIyRn0kn4fCN3OTBmpqYmTf8ALOrW\\nAd6UknIn\\/uoyp9UcmurLji1n85RI7hfQeoWHqhwgb8+j9EKxYgbien4fpi+MBZ9I92nXrhEX\\nIGauzfDhA1lJHSd\\/YN59kIoHE+jx7IdsDeo9Ay9f6PbCFGwJ65ffHijYEw5gggjHJsCeUMjU\\ngcyIIfITqpA6Bv7TvPtho2M1pHXn6t\\/wh8BmQOkwxC18B+ru+2FUDIDr3+PRC6Buz5zw7B9v\\nwhLjC4GQA6IxybknnDcVhRA4n0d\\/whOFwMgB0QhZ0tzhCzpbn+uL0DM58w8CHCBmc+jxlCaB\\nkM+c+BDhAyGfOfAhhRsCePCPQLADnYm\\/qv8AL2eMXQAZnIcTuEELMpzUVH8Hh2nuEMwhZubc\\nuvu9UOEJ1UgdA39vPC6Rqjfz7z1Do9EJpGZy9cLw2s8Pb9kI3Rmno66ZOIeD1Yp8vVbhuGbo\\nTQYlZWrSNSm27mt2WaSllpElOpfQ9UaO2y2hp2izji20SrTLUgplpkyM3vgwI05bMxtk63gx\\npHUezsUbIvdTtOo9RuC36BVrXvKhzbjRlrbuy26nTl27U1LW0kyYn5FtM++BJz6E1ViWM9FN\\nAzOQ547owkv922KqzSJ6ZcTRajMNpbcKj\\/uZUVrTsZttW8NsvOajU1kQlB2U0dXZOB3RytQx\\nZs+m5nEmzatTtDmVZn6ph5lXnGHK0kKSp1+ZoL3aU9U+UJKFTLTDc06hbnZvNzKw6q\\/tmG0u\\nVmHpTBu0AJqNEmi3JUquTSgahQHlnJLsrn1WecpK1lLamn3Fok7oVcSjam0bI9OD5P8A0aZl\\nK7j7yVF2pwqvZKnarcWjLV6y\\/M4S3261LocelLPfuOYmTYtxTTjTyWKJcT0zarrs6iWolSw\\/\\nkJJpL8fLDbHadqF5VzBjGO0anhFjtZ9WnrbuSxLikpukvqrtJW4zU5BiTqaWp+nVWUdZdL9C\\nniuaQ3k9IzU+1tVNTGdAjSorGJVpT9OqVTJxEw5nG6PXlPKB+6e3XXH00KszLPmB915Eu7Ta\\nupGu6J+UFRU6yuqy6G+jeWe5LW2OUUwRm9IvAqitUHTRwVoKqlRV0RjyapYtUKhN\\/OT2GtYm\\nZNLc7N3Ew00\\/O4UV87WYlq0DbEw5K06tzM\\/QegMFY2wZ5QbM7h+t0yUwhtXpko5MFuQv5nW2\\nGG0rM9SC4Q9MsobKHpijTa3ZmXlVF2TmVoS++1JtpmyFunh2dk0FbAUQl9CEpdZURdCHkoyp\\nUkgWTYJQvVLaJd0pS5HwAAHvPTCqE85HZ3936I730AdAnT30qsMqZWLywQuPCR6mzLNHevDH\\nGm1bDKTuqUMtLzEhdFMoVVpS7uqknNyj\\/wCvanRbYnaS9PMPuSUzlNMSTe7bDvkOLWprTFQx\\nsx7n5hkFHlNIw9odPt9lsJGaw3dV2O1kvhQKfrWpJqbBJOtwbjzGx7H78xNt\\/Q3m8pJuuIdq\\nk\\/NS1PppbbKgJlp+cdZW9LrCbpcZacKQU9olGtuepbB+Ipx8tMU51QzlAeWUMsrsbZ2lOqQX\\nUG+nZJWrhlCgUiOuASchCqUhPWemJc9o8nzyeOGzTO0w\\/ZvqqMDI1G7rium7HJkpGattTpOd\\nlbSPHLNujNBagOYDV7\\/oFv6L1iBtFj4BYd0JTCm1NzNGw1sajOLcZEvs5lc5LySZ1+ZT5M0p\\nc5Mhcy48w06t5xQDka2cwzgGikt4o217Oqa6gkPStHn14mm2VWuEOy0gWnkq3ZkqSmxIAz3S\\nTOafsTxjOpSpbAZCgCLS8yoWNr3W+3KtEi9jkcWn+NyhYU1t4omFhtamkpaLrgSSlClFaG0q\\nVlkku6yigHLWS3mnPfErjR3rqrkwFwerLq9pMTmHFnJnHNcObSelaHJSU+vW1lHNc1LPEpUr\\natb0nzkqEZkVfE63qpRZq2ZqwaRU7bnpNchOUOqqkZmizck4FJfkZujrpT8jMybiFBLjDmsy\\noLIWzkIx3tW07csehSdq2jTzR7YpLk6mh0gzLs4mk06aqE5Oy9KZmnht35anCZMpKOzGvMKl\\n5dgTD8w+XXlc3baXtnWSlrwPtBl8azPnDqKiynDVdoJk0hoBLzT1TaMrONOFCUK7KYDiFZVJ\\nbcbUS31jswoVWwthVjDVVacUJGbmZmUmyqWCFNTrqnnJfsGpiYcZLbyluBa1FLnaLJDakhKu\\n5cNK4aRdUk2pzKWqoNNmAVZpJmFASqhrKy82b2IGZHmKd\\/GyVB85RTRPxA0P+WKxHXhlhpet\\nVwb0jJum4jUn7kbPqtWotOlcYpyYNw08fMNKdpVIYt\\/GGkXGafT2ksvU+1W6ekIS1MBbs0Nt\\n1TLjTrK1IcaWlxtxJGshbatZKk5jIaqwlQ3ZcB2dzDGyuebnSKTzA5qmxn079urLPfnlnmOI\\ni0fJ\\/wBt+BcPbPMUbPNpdTnpGnzFRXN0F+Vps3VChiqyimqpLtplkOCXErNS7E+znCQuanHH\\nG8ykrMajaRgCaxYppUihsFcutiaWpTaSMos2oJW43mUsOEAhV0mXbvYWCoWlTwixVoZdFcwz\\nxAoxYLQf+dbOuOnFkvJbLKXRN05nZl5LiC1r5BwON6gj4Us5KIVmlSDkRlkQecEHrz5sjzcS\\nInHtY3zyctrQJVzgfMqDzauIz89cu6nLn3JOrnnvO8\\/OXRUMEsUZZUniphHat2MPJSHBc9r2\\n3d7SVISAhxDlVkTMNqZASGH5dvyhnVQpvZFOcShiZ2AVhxLNI22NyEyq6UN4jwhXKdKrWbJb\\n7SpOty8pKovo4txS8oOcpASRFAzvk+YmYQpbL5dCRdKOxlnPVdifcdJtppLrueOtjCTDKOs9\\np7soyJ0W7DViFj3hNahYU\\/Kv3ZT63VmMxqKo9u61x1dBWSUoRMUmkvMJzO9TwQMnlBKpCOJ\\/\\nJU6H2MbE1O4U1OsYQXO6lbjaLbqExWaAZheSi7P2XdMw7OiWbGaUS9ArNvyyVfsZWFZHCfQI\\n0ZrjwsxQxpr9\\/wAjLsVrDyvVXCGlLYD7klNVKQnWpm5qxSHZluWcepzko1Q26RPGXSuakqnO\\ntuJlXEPMrh21jDU\\/gjDDVcRVKHiGhVdT8rSMQ4cqbNUpU3NhsBtgPslJQ+EO+cFpSbLQy6Wn\\nXOyWoTrYVgGoYexbW6pW0NNTFMo\\/m1PazLDi36i+lD0yhp1DT6BLMS5ZcK20A+fDJmIJTtdz\\nT+L\\/ACjHPWu\\/srjt53P9jrlKUdQHelM+wSAMwfPSSk5kpPPmBu+fjmrZTtbjt9AIzXW6SgFR\\n3DXnmEgngdwJPNlx5o5awjNOpxVhotJT2oxBRi1c\\/wBUFRlii2oG8i9yB3239LT6QZKbvu82\\nfvck6dkq\\/PhfXdzHERWuXQlZS3eWpwTeln5kv37oWW7Nz7cwQ42ibk70x8kkMSmyZbUzLeRW\\nVJzavK1zJVNKmyh5LTsuwxjFGSHL1VKRnuWz0Y5SUmEvPUbQ5pFMqjYSvOUnXbg0paw3LqKm\\n0JUpVMq1PmzslOI1ZpCQsuJWhGPikJVxG\\/pHGPox5RgQ3tAaKR+20OUWo77rE\\/U2yTx+q2ka\\n33G2mg+cuO0hOIHSkD0pdsm27N20wFfDdvB0NtAGUBGe4wottSN\\/EdI5u3v4QnFEA31BiGwi\\npOW8cPdCakhXUemHUJKTlvHDnHR9nu7ODqF7gTrwPXR+JDUgg5GElp5wO3v7\\/wBMOlJ1h1jh\\nCJHEH0xkpVcd43\\/OCGxAI9x6IQI4gw6UnLhw8boSWN2Y9PX1+iFQtCrGx3Hd49db4ZkEHIwi\\ntOW8cD74dqTmOse3q8fGECMxkeeFJNj3Hf8AOFqFx38IQixYzG7iPBHj0QoRkcjzRSHgbWIj\\nxB3jl18fjDVadZJHSN3bzQxIyJB4jcY5FQyOXqho8nJQUPwuPaO8RkDUA84XCMIrGRz6fGUL\\nRasZjPnHgwpBsfHT1w8k3AO87jz4X+cM1jInr3wiscD6O74w6WMxnzjwYQIzBHTD6TYg+3wh\\nB9Fd+B8fX8\\/ZCEWrGY7N\\/fF0HGH4dhqsZg9W\\/wAeiG606ySOkbu0bx7YdkZEjohuRkSOgw4g\\n7x64N0cdBF7gyWodefr3\\/GLIfQdSO68OL1SD1r0IIYrGqpQ6Du7DvHsh9DZ8b0npGXq\\/T7Iy\\nEHXxHX2x4g6+I6+2GSxkrt3xbCixwPo8e2E4dh2Eljfn0\\/ohm+N6T0gj1H7YfLG4Ho+P6Iav\\nDNGfQQfh8YeSbgd2ns+6CGCxwPo8e2E4WUM0n1+qEYeGqCOW74wRYsbuw+PhCC\\/qnq\\/R8Yck\\nZgjqhA7wR0wps6DuPyMOo3eBhqoZpPr9UN1DNJ7M\\/Vvh1xhuRxB7DGUDYg8jeF9dbobK4Hs9\\n2+G5GYI6RDnhDc7iR0RkQbvGG\\/GG\\/CHJGRI6DCCvrHxx3wtB1I7rxkb9eENjuJHQTFIuUPOP\\njiM4tjIRvPh18YIyd0LsWf1FNJ\\/Bu\\/X5tEhR5e75Og3NMPKylmbWu5Dtr3BNTKd6XGadTas\\/\\nU0JVmUzMlLuI1VpQtE4uwKqqgXdRKgpxIY8sTKzSiDl5LPBUo+pW4FSWkuh4c5U0nhkY89eJ\\nueiBikrG3RnwaxIdmfKalWrLpsjcL7ju1ddui2y7bFzvLJUpaDM16j1CbQHSp0MPp11rzCzW\\neOkTNIrmF8YU5CvPaRPyy0LSSn8vT5pFRkQog6pUtEyHAbgo0sQSI6X2BVVualMUYRml\\/kZl\\nkVJhs3PoPNinVEgHccpp+XKL3uTujtrlk8AxpC8nZpC0GTkkTly4eW6xjTaaljNyVqOFr5uS\\nuJlEbi9PVKxWLuoUqynN156sJQyhTykIPnp2NOh2RmJFSs1Sj20b37wzMAnIdOTqHCVHhtBr\\nZ7o9UChvSN5WZKpq0tLVORrlEdp1akptpEzKVBDzDlPq0pMsrGo\\/LzJEyy60tBS60soUDnHm\\nE46YRzmjVpVY14ETynlow5xMvSxJKafCg5UaJS61Ni2KyUK87VrVEbpdSYKwHAzUU6+rkUjs\\n\\/aE3L1ukUXEcie0lqjTmZhlwfnNOson5RWnolTku++NDrlAGYC8VvjunLlpkFaQl1tT0o+AA\\nMr0o4R4kkKcQDa+VsA20EcOv63aPs+EN18fR3w5c5vT8O+G6+APjxuikeuuUV0g2V46R3Toz\\nYyTuj1pF4KY3yKnycMsSLSuuflpcqS7UaDTavLm5aRmnztlW7eXUqS\\/q5qLE66E8BHp1SM5J\\n1KSk6jITTM5IT8rLTkhNy7iXmJqTmmkvy0yw4gqQ6y8wtDrLiDk404FA5KGXlQvjck8+\\/wBR\\nyP6I9E\\/kmsbBjzyf2jpdMxPJna9a1nfqWXOkqSZqXq+F829ZcqZ\\/UzSZyq29SqDcBXrKW8xW\\nGX3yiZdeaR0hsCrFn65Q1q0daYqssgmwCmViUmyOalpck9ALkNEm4GkzwhMZX5uTJuFtofRf\\n9JshCwOZUHEG2uiNNxMbIIIII6YidwQQQQQQQQQQQQQQQQQRHM+UTYxmg4JYIYHyE1qTeJF\\/\\n1a+602y6dsbfw4pCadKSM6yM0eR1GvXrJT7Jc1VOTdsnZKOweziOJ+sPHDfG5bl28Xf1RtOu\\nsWdKTYfpWClgWdYKEMuFct881SWmL\\/rj4PnAzaHLukqRO6mQQ5RW5dYDzDwjTUjiezx7o4D2\\nv1g1jH9dWledmnutUlgXuEJp7aWZhI9JQsZ7ztdha2exGbNFN4jmfOqxOLBulpzzdHcJdKW1\\nWNhoXAtQ3i6iQbGFkjNQ7c\\/VvhwkZqHbn6t8Io4ns+Ihwj63YPs+MVcs625Ro42mckLhi1fm\\nl9SLoqDTTlJwntG472dMygLlnKxOMt2jQpfNfmpnWpm43q3I55ZOUNbqPPZMSxK05nJhpCh9\\nO4N4VmC2jJZGQzy8\\/U4AcD2HRnyLmHkvRMIsUcT5xLbU\\/fN6yNsyKnikPKoVkUszG3l9c5oY\\nm6vdVTlH0tapddpCduF+TS5RupCRkDrA63nE7+J6hn45t+\\/mWvYs+ntpVUw\\/LMtPytFaEs7M\\ntzF3GVyrLa5lDjKUqAKajNLlzdbZFgpRJsg9sbHcP\\/ReCKXOuAoeqr8xVVoUnQh1wMShCuKV\\nSktLvJAFrrIFiSTHz5f3F77nsGcHcEpGaQidxFveo3rWmmHvpRbuH9PRJSUrOMpUNWUqdeuy\\nTnZZS28n5q2VhpYMo6DGSwspnl91MzCk6zVLln51WeeqXSkSzCSfxg4\\/tkDMZlk8QClWyTlr\\nMXf1S9OK6bbk5tE3R8G7StbDiSLJ\\/W\\/zl5K5d9yKyIH67lq1dEzRJ1Z87a0ZDWam2UKjB7Bu\\nmhmk1GprSAufnUS7ajx8nkUZhSeYBT0w8lQH1tknWy1Rl1bh+UTQMAyqAnI9PMGYX+kpdSXn\\nF72IUiTKEnj+TvHPm1Ws\\/SmKa9MJUFNy76aVLWsQESQEs4UKG9K3kTDyTc37S4JFjHc3CHyB\\nklI6hDNIzUkdY98PuMRmKi4e37PnCyRkkdmfr3xdBAN5A6Yx98ELJGSR6\\/XD1kZIz6ST8PhD\\nThD5IySkdAHry3\\/GG1nQDnv9X6+fCELOgHP7P1xdBBBDCzpbnCUb\\/AQuwN6j1AevefcIeIG\\/\\nPoHt8Zw3ZGSB1kn4e4Q6QN2fSfZ4zhhf1T1xhKjcmFUjMjq393tyhaE0c\\/o8e2FIZjyLkjMi\\nFwMyB0wkgcT6PHshdG89nv6\\/QYaWdbcv1w2rVYHK3zPu+EKgZkDpOUOOEJIG\\/PoHt8ZwrGOs\\n6gct\\/rtCybXPKCHradVIHPxPafVDVCdZYHEZ5nrA7\\/jD0DMgdPjP0QiGIVQMhn0+6L4BuAHR\\nHMUKg1u56xTretukVOv16rzTUhSaJRpCaqVVqU48rVZlJCnyTL01NTLvBpllpxxQG4ZiG0IW\\n84lDaFOOOLShttCVLWta1BKEISkFSlKUQlKQCpRIABJtHhBVZKbkkgAAXJJIAAA1vcjdrwji\\n0DifQPHjnjtLCfBjFTHG52bOwlsS4b7uBZaU7KUKQLzFPadWW2put1R4sUqg08upLXznWp2n\\nU9teaHJoEDLczopcjJXKxKSF\\/wClpXVWLbqUszyMMaDUJZNyzcsQl5CLvuVC3qdbbTgUEv0u\\njmo1hSFlp6oUGfQpobrbXmsIsCrZRY+BNg21alBlhkRS6a3TZF6YbBQZ2eeBFVuCoqG9ypVe\\nbcnHwSt2bmxvM5m8L4ewRTUYg2u4plcD015rt5OiaTeL6u2i9xJUdsPPSzZV6CpqaYW3LOW8\\n7aZbIcizcI7KcRYncbUZZ6UlbgqUpIS9ZWVXp57NS1xeweUXrC6JdwWvpi0ddBnS10UcTrMx\\nLu+37fqtm16UVauILVnXRL1qp2\\/I3GhpEk\\/WZB1mRXNM0y5WaFNVSaoJrcrKSrT00qYRT2n5\\ntvb7aV1zto1JU\\/KtomEOsOMTMmtZbbfQQS0SsJXqrYcAWhSUkhOu1uS6op+dr18TtbeL9Xq7\\n88oKUttlJzlmAcykMMNhMqjI5oKxks55OLXzdOX7jbhthfT\\/AJ4xFvqysPaR9IE1e\\/bvoNpU\\n1WzTruZTVbn5KUOzRmVkTB1Up1lDPhw3jbbHg1raTTsS7HlYgoM1SnGPojtpqWrtcmJ+XeeW\\nmYTT6XIzDMul1hzzd2mTDlUadY7Rt99cu6qWR3fIUeeTh+Xp2IXJecbl5JmSemXc0ulyXYaa\\naSubmZhxsOzKlJzrmm0SxU4oKQ2hQSo5T1bFa7qiFJYmmaUycwG6cwEOFJAGSph\\/bvJJyBza\\nUz5wHm5Zx8DNTs9POF2dm5qcd5nZt9yYcHPmHHluL49fDo59QOKXLV8nvhkJtia0iqHeFUl8\\nwil4X25c9\\/eVFJUMpSv0ekzVobiAQXrkYStKklKlJJUdfWIvylTR3pi3mcNMEMa76W2ghL92\\nVK0MPKe+8FkDYGnVW\\/J1UrstRYcmKbKP7RSm1yaUpS65tJ5nymtrzqZibwTtcxSh1wOS7uJ0\\nP4eopzFCguSTiOaptMZYUQFDzWXaYSr6uosNQazgDDwKBW8PSqkiy009QqExcG2V009qZeU4\\nNbhalLFtd8SeFuIbTrLWlKQM9ZSsk5dJUdwHWY4h24aCxufrtHaPnDVcqUmlXm8dxfSrMcMs\\nszv480KzED5Rzjjcjzv3IaPmHVtya1EtSdyXjdN3pSgkea+5SZSxTNKy3aziEp1h5qE\\/VjGC\\nv8u1pwVlevTZXBS0k67a9lb9gVaZQA2yttbQN1XdcrmzdcUJhwlZcS6hAadaaK21Sal+Sl5Q\\nlRQhU1hfC9AWoXLdUxfJzZbvlulxVFlqinPuvkU4gG4Di9DGrf2q4EYJyz1UncpsPNKWtvMO\\nafPXpXTT88JVusN9p8q7ztVA1zXaaebJMwlaun6reur0gHo54YP4jWNKnUmbroku4RmEzE42\\nwoj8bUdKVaoG\\/PIjrjz45rlouUFmlzBRitbkq2+t1SWZTDDD1KJdtxeaWWHXbffmghsHUQt2\\nYdmNVObr6nNZavm1crtp1rcLjuKFBeWpWspTmHNhKKzmPrrNACzmOKgQroVxiSseRptuJzTN\\nS2bITlFktVjEK13ISdVqw6lItfWyVAnQEaE4X448EbvNMUb9\\/mVLsRccPpW+6+\\/l32j0TZW9\\nLPniEyd2W5MrWQA3L1ymvuHNOtlqImVLSrVB80pz83pzj6ZC0OIStC0rQpOslaVBSVJ6QreC\\nOkx551vctPpgUd1JqtOwhutrXVtUVmzavIubJSmiUtPW7dNEQ062htaWHHWZhKVPOLmGphKU\\nJRkxhly6VyyFRlHb9w+ue3l7YeUV3C69XkJbYW4nXSxadVbpjSwhAKnUPXQtM5vQ8EfXXqql\\n5KO2qmJW4KLR6u22FFRo1blXXSALnJLz4p77lrAFLaFukkZW1\\/m7KT2oYEnFJQqpz1OUrQfS\\nFNdCMxIACnJJU2hAN9VLIQmxKlgWMTnII0FaNfLG2DiW1KytLvOmYhzhRrTNo1uUVaOIskyh\\nKg5sW3GJeSqjcslBfmZuUl62hQKUuVJCleZuWwmxqsHGiirq9m1MuTErs01ahTyEylcorrxy\\nQifk0rczYdCDsZ+VemqfMqSpDUzt2H2Jejq5hrEWGpl2Tr9GqFJmWFBDrE\\/KTEq6gk2SpTT7\\nbbiW3LHsnSns3RYtrVcXnEu9LTssicp83K1CTc+pNST7cwzfS6VLQTkWm4C0LCVoPoqAIIjt\\nxJKShxClNuIUFJWM0rSpJJSpKgAUKTkFIWCdTPMAnIhMNpD0y\\/qZvzb7k3NvEZuzU28Uh6am\\nHckremXNVO0dWpa3EpB1jmSV4I0om3wwqVDzolnHUPOS4dWGHHmkONtPLZv2anWm3XUNuKSV\\nIQ66lJCXFAqypzZsozZSnNYZspIJTfflJAJF7EgHeBBHHz1xPWhLKuaXYamHqItiel2Jjew5\\nMMzLQbQ5kFlKQspSCnJQyKkKSsBwchHUGNVwN29ZC3nG1Oio1Sn04NpWlClFReqCsipJGYRI\\nFRHma2\\/NXMWFT87Tx59TnXJeoSf7KkJhlWR5idlyHZV5pdxlcamEtrQq\\/oqAPA3daZRMOIYc\\nSFtPKDbiCLhbazlcSRxCkFQPcYiKcpVivN438tzM12YbbkfuHwvtW3E05C0zKZJg4PVKtmVS\\n6lKVDazF7qqBMyCsmaWEhLS2EN\\/ZRhR90oxY5UfSuvtLq5iUo1WveiS0wt3aoW3alWtrDams\\nocCwHGPm2jO+TLRry3k8ujZHVU05GbZRn9Xj0d0fQnGU9WJ9jAzuJZx2oYiOzrCLuIJ6YS2h\\n6Zrc7JLqdTeWhhtppouTc86sNtNttNpKUNoQgJQn5t7TXZdWM6yJJAalG5ubblmgSoNywnpt\\nUugEklWVlaBdRKjrck3hOG7jX4SB2pHvA+HqhxBEIsUG41HW\\/wCfztEESrNpuPxjj4IcOt8V\\nj0j4ju9UN4cBuL9CF9dc4RUnLeOB9kJLTnvHEe6HZHEH0wgRkcvBh9Cj6x7x1v8A1wQ1IzHu\\n6j0wiRkcjzQ5UMj1Hf8AZCKxwPo8eOeMkG4B5wQ1UMj1cRDdQyPUd47vRDxYzHZv74brGY6x\\n493uj2Hkm48NDDVY4H0Hx45oThcjMEdMIHcSOiHkG48NPl13QlXoqCufR9sWLGYz6Pd4+MN3\\nE6ySOfiO0euHZ3gjphuRkSOjxn6YfQdLcvh+uHI4+DjF606qyOAzzHUD3fCLIXDiDqRw3\\/CG\\n5G8jjxEIEZEjoh0sb8+ke3xlDde49vv6vQIfGoB5gR6saX4jr5cBDZQyJi2FFjgfR49sJxkJ\\nNwPf4wpJuB7\\/ABhJe49vv6vQIbrG\\/PpHt8ZQ6WN2fQfZ4yhusbs+g+zxlC0mxHfpHsMXxvSe\\noj1bx7zCEO3hmg9RB+HuMNIfTvHjDgupBHqHqsfughJ4Zoz6CD8PjCsWqGaVDpB9eW74RkDQ\\njxEIGhHiI49QzSfX6oRhxxhudxI6Ifh+LVDNJ7M\\/VvhusZpUOow6hvwhxB0I9fXXGAaERx\\/G\\nG8OljJSh1n3w2UMlHtz9e+MhB1I9fXXCCKQgdxI6CYXhFf1j6PdAjQkdaH74WjeR3dfGGyvr\\nHt9++G6hko9ufr3w5WPO7Rn8PhCC\\/rdo+z4Rlp3DwHwh2Gqhko9ufr3wgr6x8cd8OV8R2fEw\\n3XxHZ498ZCdw8B8IPl4cvb0YbL+sev8AR8IQWN+fSPb4yhyviD48b4br4A+PG6FoNlDv0h5J\\n9EeFvshu4N4PSPd+mE4VXwB6\\/HuhKMhB9Id+nXrhUESUuRHxRVXcKMVcH5yYQqZsK7qfdtHb\\neeVtjRL4kXZSalZZkq3ytOrNtTM2+poZNzFwp2xHlEvEa2Nm\\/JHYo\\/qe6Ydt2\\/NTOwpWK9tX\\nJYE2XSQwmoCVTdVBWoZ5+UTNXttijyakBSi7WC2Slh51SNJimRE\\/Q55vLmWygTTdt4VLnOu3\\neWe1QLa+lpFgbLqwaLjmhPqVlZnJg0uYBNkqRUUmWazngluaXLvEkgDstSBeJt+C1TLtFqVJ\\ncUC5Tp5My0Dw8nnkHzE5gDJExLPOKCfqqfOt9ZIXCw+Ud4KuYY6dtu4x02XWimY94YW1cU1N\\nlrZNrvfDhQsOtSrKkp1HUy9rUrD+dW7rF3b1N5t1oBtpx+YjhNUfILsbllLGyqkpMSZz3I2z\\naROMK3lI1spdbSBmBm9q8FGNOvylXBBd9aG2H2M8hKl6p4D4sSCKlMJRrNydlYpSSLYrDilJ\\nCtVT15yOHEuknZtOFzeC7sc772Y1AYk2NSss4Q5NYaemKe5mOobkXEzMvpvCUUicaZBub9mo\\n20IFs7VqWEzM+4hNw6GKm2AL6n8jMm1rXuJhw+Ott8Q8W3UzEuzMNnNt9pp5BBBBQ62HEHMb\\nt6VDtixYzHYc\\/h8Y+fs6c8roDCSrNcmtyVX2IIcaB6gw6hI3ZeaM8\\/Oj6FX1T44b4rp9osvO\\ntG90LUgd4BIB8FCxHMGOcSnI4Ungq3v0PrGsNHvqdhHxES2Pk0uNJnbM0j9Hmemxnb1xWzjB\\nbEovJTjjFz09VoXkpoqObctIv2xZZLSVBG3q7royW67rRKXd6FdnuIMbduQvxjGEvKH4ZUub\\nnPI6LjJb13YRVck5tOPVqmpuW12FIO5Ts3etp23INH6zap3P6uvrz3ZdVfojGtDeUrK1NTX0\\na9c2CkVFBlUBX8VEw4w6SbWLYJ0uRtaNMea1aTcvZK3Usr5ZXwWddRokqC7nQZb2NrGfrBBB\\nHc0WxBBBBBBBBBBBBBDOZmWJJiYm5uYZlpSWZcmJmZmHEMsS7DKFuvPvvOqDTbDTaVOOuuKS\\n202kklITDyMJOUYxTODWg\\/pM32y+iVnW8La5a1HmCUpLFcxCVL4f0SYa1lJ135OrXPKzTTYK\\n83GQrYugbNWHUJ1qnSE9UHzZmQk5mcd1A\\/JSrK33N5A+qg6k2HMQzMPCXl331fVZZcdV3htB\\nWR\\/5YgQ6QmJ7+NePGMeLkw444cR8TL1vGW2iVoMvTq7cE9P0mSS259I21I012UkWGnPpGmJd\\nppeernHUiOf0ePbCCB5vac\\/h8IcI4Ht+Aj5lzcy7OzUzOPnM\\/NvvTLytTmefcU66r0iT6S1K\\nOpJ11JOsUQtSlrWpRzKUSpSjpcqNybd6ib+JMLt8\\/o+MOEc\\/o8eyEEcD2\\/AR2rgnYi8TsXMM\\n8PUocU3ed9Wvb82pvMqYptSq8nL1WcOR1w3I01U1Nu6o1w0wvVOuI09QnJenSc7UJpfZyshK\\nvzky4fzGJZlTzy94+q2hSvVDkrLOzk1LScunO\\/NPsyzKN2Z59xLTafWtYTEsHQ3w\\/Rhjox4K\\n2nsgxN\\/cRS7gqrWz2bia1d4cuqrNP+aFrelZ6suyWa\\/wJdsbkpSkZkVKp061bcqNcrT7UhR7\\ndo87V6tOuFOxlKdSpJyeqM24QctmzLsPzCiPwQehIHzNJlW1TclKstNtttqbQhlpCW20MS+\\/\\nZoQjVS2hDTeolKSEgEZDLdGIvKlYqfqP6COkJXGphuXqd02iMMKM2op2s1M4mTsrZtSTKKI8\\n2Ykrbq1cq6HM0uMt0xx9hYmUNCOBvJipc1i7EWN8ZziXFTuJsRNU9DouopfqE45VqqkrKDmG\\neep6juSlKLqTYpt9I645LYUwzLSrZQJXD1CuhJ0zN02RS0wAnMDdYlylKc2ZSlZQoqNzBzxd\\nxDqWLeKuJWKdYBRVMRr7uy+J5pSgoS8xdNdnq0uUbAybSxKeWmWl2mwllphpDbKENoQiMi7P\\npvzVbtGkSnVcakW3Hk8NWYmQZmYB3A+a++5vPHLtjEm26cKvX6RTinWRNT8uh5JGY8mSsOTR\\ny59WXQ6rLgct2rGbCOJPjxuj6V4ucQyxISDQyIbR2mQXslCEoYYA1NwAHU91rR86azMLdcSX\\nFFbjrjkw6tRupa1quVE8SpSlkkjfDhoZuJ6sz7D8coep+sO33b4aMDziehPvIh4ged2DP4fG\\nIITYE93v4Ro4WiqRmodufq3xSLkDzuwZ\\/D4wx17YIXAzIHSQPWYfwza3uJ9PsBMPIaWdQO6\\/\\nt\\/VDSzqB3X9v6oIIIuSM1JHWPfDDnD19e6PUWsT1aHoGQA6AB6hC6Rkkdmfr3wjxhxGO5w9f\\nXvhuFkDJI698XRQbgB0ARWG4OuuvshZH1e39HwhdA3Z9J936YRAyAHQIcJ4Ds9++GCbknmYb\\nTqonx+ItCyBuz6fHfF8UTwHZ798VjHUbknrlHqzpbn+uF2BvUeoD17z7hDxG89nv6\\/QYbsjJ\\nA6yT8PhGSuFVf0F8F7aaxx04MZFsW4xVZ2Qs3Ryw2pteuHFbE+qUlEo\\/MGtvUqWYpdjWgsTL\\nTcvN1av0SYuMy9WYkatSDTmjP7Wi0ScxBPt02RyB5xKnFuOZyhlhuxddUhpDsw8UJPoy8oxM\\nTb6iGpaXeeUhCn5CRfqU01KS5aDjpPpvuoYaQkaqW444QlKUjU2upX1UJUohJ7I0SNBXG7S8\\nroNm0sW3h7T5zya5MUrklX2rXpSkFtczI0sJDb1z19tlaV\\/MdKcOwL0r87T1IlJlqbiSPghg\\nfovaCltzSMPKZKXhiC1TZhd24s3K7ImpltlhTlSS7XFgSVs2+yhlx1yjUBLcsmXlga5Pzc80\\nag5E50m\\/lN+JFaoCcL9C\\/AG0cCcMKRIv0W25i7ky9VqkjSEpCJByQsi1naZalEnJVJdW5KVK\\nrXvRHnnAtVPUUOKmNE+JmkXps6a1WdZxCxJxZxfZcnXJg281NzMnYFKmXil1brNqUNqk2Dbv\\nmpZG2TS6eClEu0XQNkiLOThDaFT5VbWAjh\\/Z3dvs5\\/arjuVlq9ihlpQsXcG4FbfNDocutOqK\\nhiqtmsKbdW1OUGScQEM3phyn4DwchM9UkP4pqzYCylpX0bSZdd\\/TQZ59JmfR1BVKyo7QgqRP\\nlpeQTpNJ7lstCzCmYnJe9dIag3xX5RtTkvY2C7T2I8ylwk68kKjbypmzKVPoIIcbuK66VOJB\\n+kX5wB0Z45fKVaxNKnJHR10d5WWBU+JK7MbLjfqLq2iFoYL9hWTMSLUq8nJt5ZTiJPt62bGq\\npIMwvSpYmgTftYLU1fdxUiz5QlKnKfTx90VaAAzU0ssOy9HYK8yhLzVRqAQc1qZWkBLmYNka\\nGWB9ppZen6JOXnUGgCZu6p1czLlzWK1EUiRTI0lTeY1EtzUpOKS0Ehbq1LWtdNubEtgMjVH6\\n9tGxFjfbxi2YdExOz2I65OTFPcmhuWzK092lU8yqbZUSszO1dptFkISW0NoTtKxt6qzTXmlG\\nVIUSUQChEtQZForCDrZc7N9r6ZP1nZZTJJG70jm6LxM5V7lJNImdVSpbG+\\/KBLuqc8mtjAmk\\npsF1kTJ1VMt1GyJNi9Z5tZAaQip3DUNUApaIW66V46yujBpO4p1V+4LpplXNQqCkKm7ixIuU\\nqqkypRKtec8vm6ncTqk6xWtT0kvziQc1ZoG56jUOi0CVTIUGj0uiSLfnJkqRT5SmyiTlqjVl\\n5JpllJCQAMkDIDVyyjmkjMgevx7In9Nx\\/QsHy6pLZzs7wfgyUCSj9gUuUYccTcHO4mmy9NQt\\n1SrrUp9UyVOErWpaiSagq+0KuVdztJqYmZxYJIdqc7Mz7gJAF0do4A36ICQkZgEgAaAAauba\\n5OurOBl28cSKdJqySZiStqizNSBJy1kM1OqzFKKAN+Ti6Ss5fWb5o72oGgNglTEINXmLxuV7\\nMlwT1aYkJY7wAG2aNIU99tGQ4LnHlkqUdoE5BGbAGZA69\\/jshcbgB0RoqjtQxzPk56\\/My6VG\\n4bkG5eRCRyC5Zpt8jvU6pWls0Rl6u1V4m82tAO5LIQ0B4FCQr1lRPfGPtH0VtH2ipSJTC+gP\\n6oIBrDtTryj+yZlRrk\\/UNb9lVq57gA0EhOxZ1OxqZhFhVTdVNOw0sGQS24l4GTs+3pdW2QEh\\nDuuzT0qLydRJDxUXPNSc898fecYeoTqpA5+J7YiM3iCuzd1Tdaq0ypW8zFRnHid2\\/tHlX3fC\\nMBc3NuH8pMzDl+K3nF7ueZR9UfN\\/cTZn\\/kjbH\\/oClf8AVIRmMPrCnEBqbsi0JptKg4luZtqi\\nvthwJKQsIcklDXCVqSFAZgKUOClR9bCiBl53Pzd\\/j4xgpnp1AChOTQVoRaYdBFrbiF31Fr24\\ncNIxVPu30cWLcQtXz69cdH1nRlwCr7S2qhhNZjKXUKSo0Slotp0JUgJJbetxVKeaUEgEONrS\\npKtZaVaxKjjvevJ44V1pp12ya7cdlz5SvYtTDyLlooWQCgLlp5UvVvrbioVpZSlWexKgCc\\/k\\np1j1DjCwGeQA6gBG8p2OMXUlaVyOIqq2Em4aem3JqW05ys2X5Y8jdo6aRlMVWpS5BanZgW3J\\nU4pxvTm24VoPrTEf7FfRfxlwKeFxvyq6pQqdMImZW97PmJpxmmOMONqlpqeDaJeqUB9t1bQb\\nmZhpEqmYKWpWoOup3bT+Tt5RXEqUuijWzW6y27iVbjflltXLOFed7UGQbbcq9tXIy060KjPe\\nRMOTMxMfXqdNamZ19TFVpiahNZcKlWnW1tTDaHm3kKbdZcQlbTjawUrbcQsFLiFoJStCgUrS\\nVJKVCNaeK+jB+pvjhhJi1hKwmk0Cp4q2RSLnoku2ryO25m4bkp1I+cZNlvVW1b1XE65Tp+RQ\\n4jyGanW25Etys621TbEdxJRtsNHewbjSlyH4QuS74wzWm20NNuVQt3Ykng4omX8\\/WlLDzaV+\\naTefIGpd9Eqo2\\/sz2nTtAr0kX3SyxMPssT7aFKErPyqlZXEPM3UEzLaFLclXUg2eAQEhK1NO\\nz3sKMRaPi5h3amItAzRT7ppLU6Zda0rdp0+2tcnVqS+sJ1Vv0mqS05T3HkICHXJQrSChSY7I\\njofAfRlvXRPtKpYW3ddFFvKSVcc9cdp12jNz0kFUaqSVNYmpCfpc7rqpk5L1eRqE1s5eenZV\\n5meQ\\/wCUF4vNt945npPrMfNbGuG6hgvFddwvVZR2RnqNPLlnpV5bbjjIWlD7KVLaW404TLut\\nKDjbi0OApWlRSoGO85eZlpxluak3kvyryc7LqQoBaCSL2UEqBBBSoKSFBQIIBFoXjAPTkxfp\\nGGVvSszVmnX6fblt3XiBW0MuttLZp9Dp7jrK83vo8nWZSseespQjZDcrJWrnrmek+sxF35bP\\nSMlaZYONtFknXUzlXfo2CVDfTMI1Vlx5Tl4y6kDJeqJKVvKX1ElSST56wFKTGXs+ws7jfF9B\\nw02y44iqVSnycwUKKS0xMzjDDzxUCFBLDbi31kXIbaWrcCIbqFRTR6XVauogfRlNnJxFwCFP\\nNMr7BsAggqcdKUJBFiogGwN40t8nrKT1w1DGvE2sqW\\/UrjrtMlXZoJIbdqE2\\/WbgrygpanFK\\nW4\\/UqY4Ua\\/0ScgsrWsFGy1ScuzmPfGKeg9ZyrX0eLYmXWg1N3dUa1d00gDIqTOzSabTnFE5a\\nxeo9IprySN2ottOeSdYZZEZZgjqIMdzbRqg3UsbYhdZyhiWnRTWEIt2aGqUy1TUhsAABsmVK\\nk5bghVwTe8fLeuzBmavPOlRV+XLeYm9+xSlom\\/HMUFV+JJOpN4aqTrdvN48b4R7YdKTqnqPC\\nEVjPzufn7\\/HwiGIV+adx3evh4GNTCcNHUapzH1Tw6ukfGHcDUs7NONSzDLjzzzjbLDLLZdde\\necUG2WmWmwXHXnXDqNtI85RPNzrQhRXlSCSqwSkAkqJNgABxvpu494h0KuB36eu45kb7+rjH\\nHxYsZjPo93j4x2s3gjjI5QaldRwpxFZtKi0+Yq1auyasy4ZK1aLSpdpT0xVK1cs3T2KJSqZL\\ntfSPVGoz8tKMtnWceSCBHVSVBSQpO9JAI60kbjvyO\\/rjNmJKckuyVNSszLB0EtGYYdYDoTYK\\nLfaoTnAJAJTe1xe1xd5TTyEIccZdbQ5mDa1oUlLmUJK8ilABeXOnNlJy5k3tcQ3UMx2b4RO8\\nEdMOSMiR0Q3UMiR6vHsj1s304b\\/hCIbEcQewwgoZEiHSxkc+nx9vphusbwend6vHshyFoOvi\\nOvthqRkSOiEFDJR69\\/j0w5WN4PT8IQWNwPo8eOeFoOviOvthSxp4QnCS9x7ff1egQr48e2LF\\njdn0fHwIfQbKHfp1649Sbgd2ns+6GL43hXTmD6OEIQ7eGaM+gg\\/D4w0h6Fp3jxixY3Z9Hjuh\\nusbs+g+\\/Puh0rgez3b4bq4Hs92+HUbvAw8RcEc+fXXLm2X9U9X6PjCMLkZgjpEIRkI3Hx6+E\\nJRuI77\\/D5RRQzB7PbzQ2UM0nsz9W+HUNzuJHRCwbEHkbwuGyhmCOkEesQwjkOEMFDJSh0Ej1\\nGMjwhxB3j19e6KQQQQ+DcA8xeG90MCMiR0Ej1GG6hko9ufr3w7d3OK9HtAMNVjzu0Z\\/D4RkD\\nWx7vjb5Q+NQPARbCCvrHt9++F4RWPO7Rn8PhDiN58PtEewxdGTiuvI+wfHOGy\\/rdo+z4Q7f+\\nsP8AFHvMNXOIPTn49sZCPreI+\\/7IIThJfEHq8e+FYTc5vT8I9GiyOfyvCkH0vEW+37Ibr4g+\\nPG+G7nN6fHthyvgD1+PdDdfAdvj3RlIPoju069UPQ2c5vT8Ibuc3p+EOV8B2\\/Aw3XwHb8DD6\\nD6Pgbfb9sEN18Aeg+PdDdfAdvwMOFjzew5\\/D4wgvcD454cTvHiPjDqDp6\\/dpf2Xhuv6p6v0f\\nGEYWV9U+OeEYyE7x4j4wuCPscNb5qWGOIth4j0gk1Sw7ytm8ZBKciHZi3KzJ1ZDC0uDZuMzJ\\nlQy807rNPNOLbeStpawfjosc+orsMPKSlaVIWApC0lKkncpKhZQ9YuDDjLjjLzTzS1NutOIc\\nbWk2UhxCgpC0ngpKgCDwIj0IbRuKUmxbV20aYTOUucRSK\\/TZtlQLU7TZxqXnpZ5vMjWRNSjq\\nFJO7XQ5mQY+008MF06RehhpKYPS0oupVK9MILsFrSrKNoqYvSiSCrnsQpQUqLupd9HojmqhO\\n1WEZNKCiFRrw5N7EZWKGhdgbWXpoTNSty2nMPaqNxdl37AqM3atObml6y9Z+YoNMpFQLmsVu\\ntTzLzp26lIRuYsmfVUbWo0xrBTiJRMq7mQV7SSUuVzXvGRcDAWd3nbTW4ExKPJ7nPNKji\\/Ck\\nwVKbfZROspV6P9COrkJxQ0GYvNzcmTbUpbSrUC8dh4uLNew\\/Qq0kJ7KpSDaXMtjZFQk25hCD\\nqbdmQ8kg7lEpUbi0eVRh9OFL9RkFHc6wiabSeGsyrZOAEZZlQdbJBzOSM05AKjss7wR0gx99\\npk4U\\/wBjtp06Q+ErUt5DSrSxpvSQt6W1Q2G7NuCrTFassqTvCQq1q1RXyAopzP4u8\\/BQ7X5R\\nUpUnG1aKJKV8LONLLKxbgRkB46mOS5xpTMwtChZSVFKu5aFFCh6imGyhmlQ\\/cn3GPs8JsQqt\\nhHilhtipQStNcw1vy0r7pWovUUqoWlXpCvSjeZ4Bb8gltesNVSVqQrzePxhGYI6RDCNbKvLl\\n3G3mlFLrLqHW1DehbakrQobxcKSDu4cIZUopKSDYggggkEEEG9x3gEWsbjfz9Vm3K9S7rt6h\\n3TQ5lE5Rblo1Mr1InEhOpN0qsSbFQp0yjzlDVflZht4DPgrLzc9\\/PxrZ5JDFxeMvJ46MtwzM\\n23MVW2LHVhbV0gFT0tMYU1SesGnCaISCubnLcoNEqi3dZa301Bt91xTzr2WyaPofS55FTptP\\nqLduzn5KVnEWNwEzLDbwHqz29WusXJLPCYlmHxueZad8O0QlRFuBBNiN4IsYIIIIz4fggggg\\nggjQD8oXxPFsaKeG+GUq8Gp7FHF2VnZpvaAGYtqwaFUKnUGw1xWlFxVi0Xg4DqNBreCXG8t\\/\\n0Q7\\/AJRJif8AdHpMYPYVy82ZiTwzwmer83LpeJbkbixHuOb+cJcsnc1MuUCzrTm3XAM3mJmV\\nB3MjKstsFU+i9n1eWlWV6ebYpbIvbP59MtNTCdx\\/6n5ySLXIFhYm8aDE8wJejTWtlPFphP8A\\n33ElY3je0lzdfwMR9UfVHp95hwj6o9PvMIJ4DsHuhdH1R6feY4Einibknmbw4R9Uen3mNlXJ\\nVWKbs0rKTX1sh2Vw6s+6ruUXG9dnyydlWbNkUb0LRt0uXSudlUkBTapJcy0deXEa1UfVHp95\\njfhyNlkCXtfGjEp6XzXVK9btj0ybIUFNCgyEzXq3Ltq3AomTcVuuPoBUSZSX+pkSuk\\/KDrxw\\n9shxvMpWUvT9OTQmUg2U4a5Ms0t9Kd3pIkpmaeNtcjSynUCLM2P0n6Z2j4XYUm7UpPfSrpIu\\nlIpLLk+0VC25czLsNi+hU4kHQxvgthguTjz2rrIZYyPU46ckdPFCXfZz5CNBfyh3FFVLwr0f\\n8Gpd8By8L6uPESqy6Mi6iUsSiN2\\/S9sriJacmr8qDjTZBS8\\/SwvcqWTnILtJlYkZiYUk5vTG\\nqlQB85tlCdXgk7g4t4E7+Bz4ZxDb5dvE5d6accxZbTn6zwewxsizywkkt\\/OtfYm8RJ6aPnH9\\ncOyN4UiTdy1EhunMI2aVhxbmj8kPC4kMIYUdcQQ7NNVPEsyMtkqM4+tmRXqkE2kzTlAnin0V\\nFOUR0\\/tsqvm2Hak2lWVc7MSVLbsdQAoTL6RqdFNSz6Df81Z3EiNXeEFP8qud6dUnNumU59xC\\nsvqzE0pMq2M+lTDk30\\/VHCMn0c\\/o8e2Ol8F5DZ0WqVJSdVU9UESyCfwmZFgKCknnSXpp5HUp\\ntWfNl3Sjge34COksSvl+qTIvcMBpgG9\\/qJSpY05OLWD4X4xwzUF55pzkgJQPULn2KKodsfh\\/\\n8X\\/2odo4k9Xj3Q1Y4K7R7odt8\\/o+MRtf1T6viIwiLewH2i8KRejiez4iLIUb5\\/R8YZghyyPP\\n7Ek+4fGHcNmOKuwe+HMMr+sfV8BDK\\/rH1fAQQo1+yJ9PsBhOFWfrjsMY6\\/rHuj0GyFeNvbYQ\\n8T9Ydvu3wuN5A6YRR9Yen3GF08R2j3wwvePDr4QiF4qN5A6SIpFU\\/WHb7t8I3QboXhxCCeI7\\nR74cJ4jtHvjHhCNx8evjC8EEVG8gdJEY8eL4ev7IeoGSUjqEIz9Mp1WkXadVpCRqlPmUaszI\\n1GVl52TfQd+o9KzLbrLqCfwXEKHGHEOOEJKlIUhSFKSpKgpKkkpUlSSCFJUNUkHUEag6w2CQ\\nQQSCDcEaEEbiDwIjHprRVwHZuBVxCwpFbyhrCluzdRct9D2tmX00Nc0qn7wNn5MpldPCTrCT\\nS6SuO\\/6dTqfSZNiQpcjJ02Rl0hMvJU+VZk5RhHMhmWl0NstJAy81CEiFoXAyAHQMofqNXqtT\\nSyio1Kfn0spCGUzk2\\/MJaSkWCW0urWE6crE8bwtczMTBHbvvOhAskOurcCdw9EKJtoOHthZH\\nDtP2fCHKB5oPST7PAhukZJHZn698OU8B2RqoZWdAOZ+HQhZHA9vj3wugbyfR48c8JJ4Ds9++\\nF0fV7f0fCELOluf64ahVA3k9Ay9f6IVixHDtP2fCL4xFfWMEKNJzWDzDefh7YeQgwNyj0kD1\\nD7YXhk6rA4C3zMJJIBPs7tw++KpGZAhcDgB2CE0DifR49kLoG\\/Po+Pgx4s625QzCgAAAHp6z\\n0w7aRqjWPE8OofbCLSdZQ6BvPw9sPIYWeHt664QQRlRoSYN07HbSjwhsKvUWWr1rpuiXu266\\ndPywmabMUGyEOXVMM1FCgU+TT0zSZKnNlZAVNTkq02pK1hUYrxIq5IPAMYfYd3vpPXlICUmb\\nyknrcsZb7RE01ZVFmzMV+qMJUhKks3JcMnJyUnkUuvItsPNhbE\\/LOOWFsroSK5jSluTTiJek\\nUFf4S12dfKUS0lSaIpM9MOzTqiEtMurablVLUbJ7fObBClJkeEqS9WsQ02TabU4kTDcw8Egq\\nPZMOIUU2Gt3l5JdFgbuOoHONiWM9RE5d6ZVCwpNMpkrLKCRmEvOqdnFnW46xamJcKST5oTuH\\nnZnqOH1WqczWapP1SaIL89NvTTqQrWCFOuKUGwQEgpaTk2jMbglBIBzI4\\/z\\/ANz7Y4D2qY1T\\ntA2j40xk2l0S2IMRVKfkEu5u0bpipgs0xpwKNw41T2pZC02ASUEBKQAkfTakSBptKp8gogrl\\nZVpp0i2UvZUl5QtwU4pSteHPefhcTr7kcM8PLzv2paipW1LfqdYSy4pSUzs5Ly6k02nJUgkh\\n2p1EytOa+qA7NJ1lITmoQGOUixQq+M2K+GmENHLk3WFz66zV0KUt5ybvC\\/qkxI0xqYKUArdl\\n5Rtc7m2yBsq6tSyVea3PYxGwWoGPMtRLIv65Zq2sLWKuxcV9NUpx1NeutqkEuUOzqeWG5hcl\\nJT1WcarNYqwlnHZNmhMS0qWJupNz8h93Y2j1oEYN3XL33hjooYVSmIUpNys\\/KYkzGHlt1PEC\\nWnqe2hiRm5XEK52qxe8vNyrDTKGZhqptutJZYCVKLSNj075LUts+wag7ScfY9wjhlxXn7VCp\\nk9Ukz+ICtLa6Y3UF4cp\\/b1FEilT1RDapluXcmnEMuS6VMjtxD9oaKvWKK9hqhyc27MTr0sqf\\nmywoSbUqwrzhDAfUpttcwqYRLuKbS4UBkKS4tK1gRF4wk0VMcK5blt2zhlgvifctFoVIpVvU\\n+fplk11yktS1KkGJGWM5WhIN0iUVsZdBWuYm2WiSekRmpZfJOaZl47Byp2ba+H8u+6EImb3v\\nOjJyZJzMy9I2mbtqrDSCcih6QbmiQS3KLbLK1yNZ\\/HetvApp1GpsmSDqrmnX59SUjhkWxIoB\\nzAOsptSCR9UjIR8ZPYp3zPkg1pcq2eCJKXlZcJ\\/GIdSyZhRIOSc3lAb9wOYiaVDaz5LtDddc\\nVXNpe0KbcWpwuUWiSlCp7ziyFKW99PLp8+i6itRWjMbrT+SUAVCgKb5Nk86Qup1ApVfMsKmG\\nWc6idSUS7M+TcncmYTvPp8I1XWbyH10vJafxGx7t2kJQAuakbMs+pV8LSMiUM1evVa2Ey6Ql\\nWsp96ivgapTsN+0RkhbXJG6GtoBp69b8v28ZxBZ28nU7xoNCp7pbBLqGafbtFk6y23Mf3wLr\\nUypDeyDbrbhK3MkZysVaof8AyQqlRnQd367nZqaz4KH7M6s5BQzy58uaOO8\\/9z7YiM35WWz2\\nmehhDYLSlrQbonsY4mnq6FrICCXaUJVLASUEKyongjMSoIQoZjYFO8nnC0plVNOJfVpmBadd\\nKrZdSqZmXGr87SyRa9wd0I25opcn1YAaTRcD7Mrzstkda46XXb92y9ptFLd+7ycq0s+FKBVq\\n5LYSj6BtKWPogYp6UWDGjdb6mMOMKrYpl2VKXLdCt+k0W3rVlksGYXtahVWrelNqzSmFF1SW\\n0bNyoTqVysspnOdnpToDGfHyhYaSk1Tqc9KVS7EMqWuVccBp9Ca1dp5bW30rQG1JZ+lbkEuo\\nfW0W5iYVKSrjTz0SfTB078QNKXECqaP2jHctRnBVJlacV8dJWaeQymioWyxPyNpz8u4y7KUG\\nW2hkJmpSSpVytKDNDtlLdIfXOVGS4A8oHb1tJqj0jg+m4C2eUOTY7asVuh4SlpWQodKAypmp\\nqbqjlXstCUrEjLstpmJ15JblWglLjjEnqWDdmWzmkGv12VCWUJUqRpyVsSs1VX20pUW2USbM\\nspqVSSjzmZWChtCkputxxpLuUml3yguKenjipP4VSN5vVbBbDqrpnMTpyhrdp1l1y5pN3Wpe\\nG1oybEy5L1Giy0ywZm8q1PKqkzW5WVRQ\\/nN2kTrjlX6qj4rDjDe3MKbLo9l2vL7Kn0ts7eZW\\nlPldVqLwCp6qz60\\/sk3OPJ1lknVYaSzKMBMtLsNo+1jbVuopn5tRbnalU22ipJqtZmHJqr1d\\n85RMVWpPOKURMzakJ7OXQQzISTcnTpcBiTbJ4lxvi6cxnW3am+0xKSrSfNaZTZRsMydOkUKU\\npuXlmRogFSlOOrN3XnVqdeW46pa1JL4g9Xj3wgscD6PHthyvh2H7PjCC\\/qnq\\/R8Y1zR3dxt1\\n6jEQhssbgeg+PhCCx5pPQR498OFDNJ7M\\/VvhBXA9hjJj1O8eI+MNV8Ow\\/Z8YQV9U+OG+HKuB\\n7DDcjMEdIyj1O8eI+MPnUEc4Qi1QzSezP1b4ug4xkDQg8iIQjcR39fCGqxmlQ6jDGOQhgdxI\\n6CYfhcUhvDiEFcT2n3w4g7x6+vdGRv8ACG0IHcSOgmHCuJ7T74bq+se3374fRvPh18YaRvPh\\n18YpCCvrHt9++F4RX9Y+j3CHYdhsr6x7ffvhk7ucV6PaAYfL+sfR7hDJ7657BD6dw8B8IWje\\nfD7RCUEEEZCdw8B8I8V9Yw0e+v2gfEQ1XxHZ8TDx\\/insPvho5zen4Q+k3SPC3s0hxJukeFvZ\\npCcJL4g9Xj3wrCbnN6fhDiPrDvvCoZv\\/AIP\\/ABvh3wzc5vT49kPX+Ce0+6GbnD098Pp+sPH4\\n6QQlFi+A7fgYvi1f1T1fo+MKP1\\/WPeBHqd48YbL4Dt+BhBf1T1fo+MOF\\/VPo94huv6p9HvEZ\\nSNx8fsEPw3X9U9X6PjDdf1T6PeIcL+qfR7xDdf1T6PeIyEbj4\\/YIALkDmbQ3X9U+j3iEFcD2\\nH3Q4VwPYfdDdXA9h90OJ3jxHxh1G4+P2CG6uB7D7oQhdXA9h90IRkJ3jxHxhcEWqGaVDpSR7\\nIuiiuB7D7ofgiSTyFOIxqOHGN+E8w+kuWteNBv2msuOZvKlryoy6FUwwlWZ8mk5qy6c46lHm\\nNP1QK1daaWpUmLCWdK6XUqepR1pSdRMtpO47Kba1NUJzyKEuSy1b8slLA3FaTEKrkY8RFWfp\\niy9qOupEninh7d1p7FxZQ1850duUvmQmUjMBcy3LWrUZFgKz8yov6iddaAZlGGM4qWr70soK\\nSmeknkI6C8wpt5JI6mkTI9PSTknBs19C7TqRMXIZqZ8zdAsAoT8uqWbSNB\\/15DDljckjv06q\\nwNNCs7LkMKVneo78xKkm9wJaYTOIFt9kyU0lpNvzUi2txEMf5SFhL9wWnnQcTpJCkymNuDtn\\n3DOzmzSgKuyx5upYf1CXQUZl7yW2bfsmYU+7qrCpwsamzYaWvUFJzCZuUlJpGWrMy7L6RzDa\\ntpcy38MtbIhW8ZZGJXfynjCZVf0e9HbGyXYDkxhtivcFgz620fTIpOKdsirCZecBGcrL1XDO\\nQlUawWWpmrJ2Ool97XiR2ZNeU0CWSVZrlXHpVXSAlZdQk84yZeaHZu6YtXHsqETy3wDZTqXB\\ncWNphtKlqOm7tm1gDcL87gUJiuV83qs0ANFOh4HmJhCXVHedzhWD3gkACPojuJHQTHHncT2m\\nOQVxPaffHHq4ntPviAN8fV9sRte5Ph8omNfJqcVzXMA9ITBeZc2j2HOKVBvynhxaddFKxPtp\\nVLVKsIORVLy1Tw3nZpwjPZTNW84jbtAyXYg9\\/J0cT\\/uP03btw9mXSmRxawYuinSjAXq7S5LN\\nrFDu6nPcVJWlm3ZG72y1qhecwl1LqUtuIenCR25smqBqGBqSFKzOSKpmnuG5Oku+tTA1J+rK\\nOy4tewtpYWAs\\/Db\\/AG1JYBN1MKcZUTv0V2iBuG5txA77XOpggggiyI30EEEEEEEefXyrOIxx\\nO5QTSbrYeDktQL8GHMo2lWbUunDGjUuwJthr8UqqtvVGZfQCR5U\\/MEcd0\\/uv1um23Q61cdXm\\nEytKoFJqVbqk1uPk9OpUo9PTjpyIJDUsw44QCM9TLPnjzIL2uqfvq87tvaqjVqd43PX7rqQC\\ntqBP3DVJqrzgDhSguATE459JqI1uOXMOcfKMqRao2HaSlVjOVOZn1pBUCUU6XSwM1hly5qle\\nyt6kApBKFFMHxs\\/ZiRlhr2jrr5Fx\\/UUpbSd4IJ7dWXvB4iPnk8B2D3Quj6o9PvMIJ4DsHuhw\\nngOwe6ORYreF0fVHp95iVdybNl\\/cXoiYbuOMlioXg\\/cV61BJH7L88VyclqQ\\/xzIdtynURY5t\\n5yiKqw248ptllC3nXVJbZZbQtbrji1aiG0NozW4tayEpSlOspXtms4TWebIw7w2w+ZS2k2pZ\\n9pWikoIKFO0WjSFJWo7PWCy47LKWpQ\\/ZFKK8zr5xxn5ZVUdThXCGGJYqL9exI7OhpH7Y+ikS\\nZlwzl3qSqZrUsqygAXENkXOkdLeTPSw9iPENZWm6KZRmpQKI0bdqc2lxKweCuxpz6Bb8xa77\\nxGVNBlthR6e2UqBVLtvKzSQQqYKnyCCNxG0A35EZHo1Y867TJxJTi9pXaRGI7U35ZIXRi9fc\\n1RH9dK9a2ZS4Jyl2ugLT5q0s29I0tkKA1SGgrLjHoB6R+IwwZ0d8bcUWnUy7+HWE9+XXTStW\\nyDlUoNr1Gco0s2ojc9OVRmSlGMwAp15BAz4ebZKy7tQnZaVSoqenZpiXSSNZRcmHUtJJH4R1\\n1jnzMdlbHsPtUGiNSaCAxR6TSaKyoJIHZSEohpduBGRlg31IFr7zGZttqfbOUiTvYrcn6i8k\\n6\\/WLbTCue8zIOljw3GMxrBkBTrPoTBGSnZITq8xkSufWud87LfrJS+lGqd6QlKVHcY+0RwPb\\n8BDZlpuXZaYaTqtstNstj8VDaQhA3ZcEpA8bnSPqj0+8xiTTxfdffVvfecdN+BcWV9\\/O0csO\\nKzuLX+mtSvaSYeMfUP8AjH3CHTfP6PjDVj6h\\/wAY+4Q7RwPb8BGEv6p9XxEIi+FG+f0fGE4U\\nb5\\/R8YZgh4x+H\\/xf\\/ahxDdj8P\\/i\\/+1DiGV\\/WPq+Ahlf1j6vgIIWY+uf8U+8QjCzH1z\\/in3iM\\ndf1j6vgIV\\/U+ucPUfW7B9nxhdH1h6fcYQRxPZ8RC6PrD0+4xjr+se6G4Wi5H1h6fcYti5H1h\\n6fcYQrcfA\\/CEncr1\\/AQun6w7fdv9whyj6w9PuMN0fWHp9xhwj6w9PuMMR4jcfH7BC0XI+un\\/\\nABk+8RbFyPrp\\/wAZPvEY8JWdQO6\\/t\\/VD6HEIJ4jtHvheG3OHr+yEQQ4hBPEdo98LxjucPX9k\\nNoGhPfb2frhxwhxDeHENwOcPX9kLgZADoGUOE8B2D3QhC6eA7B7obc4ev7IbhdP1R4474uii\\neA7B7o+itu1rnvGqsUG0bbr11VyaB8mo1t0ifrdVmQNUEtU2ly01NvD6RAOzaI3gccjDDTTs\\nw4lpltbrrigENtIU44tR\\/NQhAUtR5AAwAKUQlIzKUQEpFySomwAABJJ4Aak8I4poZNp68z7T\\n8MoUjY7hNyUumJiamVnKnZVKwroz+yc+ccS60zSpsNFX0oTbFIZrd0y8y22PMZqdGpjbrn0Z\\nmG83HWtkWHPIuYOWi1LVTHTGevXS42Q69R7bl6bYVBWsKOtJzFQqTtfrNRYz1EockXqFNLcI\\n1Ajcg2HS9kWOqgwuoTFJFBpbaC5MVTE0wzQpOWZBF3nhPLbmgyB6XaIlVpKBcE3TeR07B2Ja\\nuUIlqXMIDhGVUwnzcKB3FKHLPOA8OyacJGu43iOMj6vb+j4RkLhhotaROMIZcw4wdvy5JGY2\\nZZrSKHMUy3DtgC1\\/3zVoU6329cZqSXKmPM+kG7fEo+xcGNCvAksrw3wbtKZrEmGxL12Yoi7q\\nr7LqE73GrpvN6o1OW2hJLyqZNhondsihlsN9oVXHitvgt0elSFPRmQHZtbtQmNQZaigEqlWG\\n1c6klt5HHPhmY5V6rsAwSVpxltkkq9PtqKV0PZtIO4idUtBsttFdCHaO04hd0FE15uRYj610\\notiheT1iio5Fz5VKtqsVAN+bix1BDk72b5Ft2WQc334a6McMuRi0h7jSxM4j3lYOGMk+EF6T\\nYfmr4uSUIILm0kKSafbrpRrbthdrgcczyOzIcOclmckhomYfJbmMU78u\\/EGot5JmJKdrslZ1\\nFd1cwosUe3wLlQCcgr\\/vmmCAUZJBzW5k\\/VL8u+s63l9fqCkKzzl5Z0SUuQr8FTEmGWlhI3ee\\nlRGWeeeZHye0WSeBJ6h7N0VlU\\/Kw2SUEqbwDsWerkwLhus7R6z5xcp0SX8OU7zuQcCio37Ko\\nS5ASglKl\\/VuKi+TlQJPIuovImHE2zAh2azbiRmeLMtvG8yB1Kh9XQ\\/dWfh1oeYPBpWG+CVnI\\nn5cJSxWEWlJ1OtNhsgoBue7BN3EElYSoKE24VrCXHElTaDH0V74pzt3SHzTL09NLkPKEuvDy\\nszTs4Gcyyl3JllCEJcCHy0hKvpmmQV5N+f1HtF\\/jGDaL\\/GMU7jjyt9ruOKJUsLrnqHhbC9Xl\\n3JOo0DB+HpCkyczJvAJdlFTT5n6shh1F2322qi2mYaWtl4LZWps21RNnmGKAtl2QkEh6XUlb\\nLi1BIQ4j6qwxLtsS2ZJuUEskoNikgi5ewQy2i\\/xjHx1+3aLNtifr5bbmH5dUszJyrqlNJmZm\\nZmG2ktlTadYBLanJhfDNthQz5jzkiYC1JQlKypRASLjiQOfDT2cLXibIZW4tKE2KlqCUi+9S\\niALk7hrv4R99BGH9I0rKXUXZqXFClZxyQfVL1AUm45abdk5htxxpxialPIAuWfQ6y62pqYfS\\npK21pKUrQsJ+3k9I2zX9UTUjcEkvPetUnIzDQ+r+GzPl45En+8cBxz80ZbjU00crks+lQtdN\\nk3AICkm2cGxSQRpqLEaWjJ+jpsjMlrOnWym1ocBsbGxQpW43B5EEHWMiYI6fk8bcOZzVSLiE\\ns4rL6Ocp1TY1c9VOSnVSapVPnK3\\/AE\\/MpROyBUWty43WXQZJL8lUW7hnHklUrIUpwLyIRmFT\\nk0pCm5JvNQC9dLsyCfo5N3UdyZCnCrKGXweF0EX3bidNBztuHiGxJTRUE9g6FKNhdtYHrJSA\\nBzJIA4mO3ZqclpGWenJ6Zl5OUlm1uzE1Nuty8uwygZrW664UNNtpyGanCEjfmejX\\/pNab1hY\\nS2fW6\\/MXbTLMtCkp2FUvysuLly666lxLVOten6q56dqc3s1IkUS8rM1SdWFt0ynFxKJqNXWn\\nrywGGmEy6laMjPyuKuJEoX25bDq06i2LStOooS600\\/fVwMKmWmp2UeC9tR5cVC4krUWVy9Cl\\nppE2mP8A\\/c9pK8oHeTGJmOFyz1Bw6YfedoMtLSvzdRZKQmFI2tKw6tda1MMtusssszd01MTT\\ns0G2pidnbgm2Fyw6j2VeTfWcSSjOLsfzTuCcCpyOpnZ9ARV602QFJYoVLdQXn1TCE3bnZhrz\\nUpPbyjFSQ242KvxztXwxgRh9pp6WrddaukSzbmelyDw3CdfbJVNPtqB\\/YEpdzMlaH3Jc5Vx3\\nTpDaZON2n9dVTwdwJp9VsfBNU0TdteqC3Waxc8g++sLqV+1WVW6mnUqd1XFSFk06ampirvB5\\n+rTdUShEvRcjsG8F7NwStVFuWrLFyZmNjMV6vzaEGq1+oNNlHlM2tOeylmtZwSNOZPk0k244\\nEByYempqY+usTD60cMrZlLUsujS1GpEmAooZBXMzsyUoS7P1KcWVPz09MagLsy+taiEoabDb\\nLbbafrY6SqFWpMrR2cJYMpScOYOkHC43IoVnnqxNAICqrX5vMpc9POlCVpSta2pYBtpsqQy1\\nk4OxrjyuY4qjtQqs48+FqAQhZSlKW0qu22hluzTDLdyW5dpIbSVKWouOqW4U3Rm2rqyPtHwz\\nhnD1z6iuyGURlG4+P2CIdFqvqnxzwgrgew+6HCuB7D7obq4HsPujIbNhfkq\\/wghud4I6QYQh\\nxDeMuCG53gjp+3vhvDiG8EZEN4Iqrie0++KRkQ0g6kd1\\/Z+uG8MV\\/XV\\/jK95h+rie0++GC\\/r\\nq\\/xle8w+DcA8xeHYthFf1j6PcIWhFf1j6PcIcRvPh9oh4fm\\/2p\\/\\/AFhsrie0++EF\\/WPo9whw\\nv6x9HuEN1\\/WPo9wjIRvPh9ohKfrq9fxEWwkviOz4mFYSXxHZ8TDsOQ2WPO7Rn8PhDN\\/64\\/xR\\n7zD1fEdnxMMn\\/rj\\/ABR7zD6dw8B8IWjefD7RCMEEEPp+qOuMeL+sfV8BDd\\/8H\\/jfDvhm5zen\\n4Q8f\\/A\\/43\\/swzc5vT8IyEfVHr+JhxH1R6\\/iYThNzm9PwhSE3Ob0\\/CHEfWHr+BhUNX\\/qD\\/GHu\\nMMl8B2\\/Aw9f+oP8AGHuMMl8B2\\/Aw+nePEfGCEotX9U+j3iLotX9U+j3iFH6\\/rT9kep3jxHxh\\nuv6p9HvEN1\\/VPo94hwv6p9HvEIK4HsPujKRuPj9gh+Gy\\/qn0e8Q3X9U+j3iHKuB7D7obq4Hs\\nPujIRuPj9gj0aWPf8LH7Ybq4HsPuhurgew+6HCuB7D7oQhYNiDyN4cRuPj9ghvDeHEN4yN0L\\nggggjIgju7RTxCXhTpKYGYg7cy8rbeKFnzNWcByP3PTVZlqdcbO0yIbMxQZyoy+1IUGi6Vaq\\n8wmJ99uTSpGu0mYAKQmeaQtR3lKJhSWXVZ5Dds3XOPPzbso85KJ\\/Ojzf7mKeBGDOJBfW\\/NXv\\nhjY9zTzqiS4mq1W3qdN1dl1RKgXpaqOTTDxzILrS9Va0ZE6SqLclZylVNq4ckZpt1JTe+dh5\\nqYZsdySFNqOhBN72NiR0JsSmw4xiSjOEZXm5WbbQeS0PSk0q178ZUcQNxtpf4PlnMKzi7ybG\\nk9SmZLyuqWZadNxXpLyW3nHad+phcVIvKvTzKGUqIBs+lXLIzK3W1sMyk7MPrUzszMS\\/nq4d\\nTesKnJqO8FmabGfHMLadOWWQyyYHXn0x6lV\\/WjS8WcLL1w\\/rStlRsS7AuSzqs5sw+W6beVvT\\ntFn1bBa20uakrUnSloupCiAjWTnmPLGoMlPWvfNQtyqNmWqVPnKvb9TYOsAxP0x95mZaIWEK\\nzRNSLjQK0pOtu1Unh0Fi0InpJuabKlpclUrSsg3yNlMw2bkn66VrsN5Gax1AEOx9KKbmZd0p\\nAU5LuMqAsLrlXQpRtYG9nwLm90gAWAsO1VcT2n3wwX9dX+Mr3mH6uJ7T74YL+ur\\/ABle8xVa\\nN58PtEVurcjw+wRm1yamJxwg0+dFO+FTS5KWRjHbNp1OcRnlLUTEdb2HNdfe1SFGWao11z65\\nlKNZwywdDbTqvol+k5HlIUuqT1Eq1OrNLmXJKp0ioydUps2yrJ2Vn6fMNzcpMtHmcYmGW3Ud\\nCkDmEepphpe8hiXhzYGI9LRs6Zf9lWre1OQXAstSF1UKn12TRtEKKXcmJ5rz0EpVq7uIMdS7\\nBZ\\/NIV+lkkdhNyc+2k7j52wuXdI13jzJm4sNFJIuN06wg9duclydxZeSP7dKkOEDcLZGx6xy\\nj7uCCCOgImcEEEEEEYR8o7iGrC\\/QV0prsbdRLzP6kFzWrJTKwSJepYgstYf015sJIV5SzPXP\\nLOS20zZ8pS1tkLaC0nzuxvAPTE2jl9b8ctPQNdtlqaLa8UMYcPrOflkvbNcxIUluu4iOqdZB\\n135WXn7IpindcFluackXCoPbHaQlk8B2D3Rxt5Q9Q84xZS5BKrop9FbWpOa+SYnJqYccBSNE\\nqLDUqon84FPBIis8Yu56m01wYlEAj+M4tbhPgUFv2d8OE8B2D3Quk5pHZl6t0IJ4DsHuhdH1\\nR6feYoCIXHfGjNaKL80gsF7UdZL8pVsSLQRUmRq+dSJKsytQrO5Z1SBS5ScPHgPqLz1Ime2o\\nwJq4KY2pJIQ8qZUcvwpZp19s\\/wAdoekADfkDFf5Lq1vui0s7YqqmNuzZFp3pdTwUjXQhL1LF\\npS7yh9UFqbuuXWypeRQ+EKQQ+WjEr\\/DdhL1YmphI1kS0i4nIg+Y8+80EZE9KEPjduyO\\/jv4d\\n23j8KPKI2UYUA7aXpiKVUJloArSC5V5mp1BpSL2AVTKPLKcNvqK10TeOzPJ8kvMcBYlq6k5X\\nKjVXZZtdrZmpOSlm2VBWtwmZnplIHBSTci5A1+ctliGqwuT1xWkmnSzP4kXBYOHdPcSrV1fL\\n7pkrkq7e4nW8qty163KLH4sxnwSUxCGw6kTP3pQmiAUMTSp5RO8J8gZcm21cM89qy2lPMFlJ\\n4ZqiUt8o+xCXIYWaM+Fbcw2UXRiBet\\/zcoF5uoXYduU63Ke+6ji224jEiqNMrc1Q8pt\\/YhRZ\\nf1Iy2CUoH7hqc8pAKZKllpJO8penJlrVUN3HZMTCePBREfQmjI8wwhNTA3vibWFag51lMmjS\\n\\/BSEgWA14Ximtrk\\/22JJxANxIU+UlE7rAutqm9Lb9ZwXJ1uLHcIydhVHA9vwEJQqjge34CIK\\nfqepP2RSEPWPqH\\/GPuEOm+f0fGGjHBXaPdDtvn9Hxhhf1T6viICLewH2i8KQo3z+j4wnCiOf\\n0fGGevbBDxj8P\\/i\\/+1DiGzHFXYPfDmGV\\/WPq+Ahlf1j6vgIIWY+uf8U+8QjCrP1+0H4GMdf1\\nj6vgI9v+TPcbe8H7YfI4ns+IhdH1h6fcYbo+sPT7jC6frDt9+73GMdY9LxF\\/s+yEQvFyPrD0\\n+4xbFyfrDxx3Qg7j4GPCNFd4Pwt9kOE\\/WEOEfWHp9xhsniO0e+HCeI7R74YhKNx8fsELxcj6\\n6f8AGT7xFsVTxHaPfGPHjnD19e+OQG4g9BELw3hxDbnD1\\/ZDcHCHEN4+ptW0rtvqtSlt2VbN\\nwXfcNQWEydCtmj1GvVicK3G2xsKZSmJqbe+ldbQC0yfPdyy35FCGHZhxDTLbjrq1ZW2mkKcc\\ncUqwCUISCpSidAACSYbbzE5UpKiogJSASSomwAABJJvoACTbQRw0OI2wYHcjjpTYnJk6liCL\\newQt59DLqjdb\\/wA+3cuXeBCXJa0KC85snm9TN2TuCuW3Nt6wOyG4xtaww5LHQowM8kqGJc5U\\n8YrolUpdW3edRLNETNBAbK5Ww7ZLCXZVeZ1ZO5pu5GNd4uF4lDWxn8vsvxC1T1VvE0xR8C4f\\nayqfrWNKnLUCUaQRmUS3NrTMpWEAqQl5llDhsA4kZlImFIwHieuuttylMeb7QXSX0OBxQ01T\\nLNocmlA6ZVBjIq4OYAgxGKw\\/wtxIxXq6KBhnYl2X3WFFAXIWnQKnXHmEL1iHpv5vlXkSMqlI\\nWp2anFsSrLTbrrzzbbZI2g4O8jNpPX4ZOdxIqVn4M0Z9pp51qrTqLxuxtt7LZ7O37amTSNqG\\ns1vMVG7KZNtO7NlxkPB7yaQNLYn2dYtIatnCqwqFbdBktcSUhTaVTrcocqdRLaFytAoTEvLI\\nSoNt5\\/TSjmqhvNOeWz+CrWJN510rRNVmYl5dw75SnASDASU7m1eThD8wgqOZEy68So55ZbOK\\nzxBtl8mbARcZNaxNterLOZBk8LypoOGA8CDkfrM+4zMvsgAJE7R11BteYqS0PSDV44c8nGfm\\nOzerUz2KDlUptxYYGU2zDsGC9MKIJ0Dj8kq29IJEYz4dclRoV4OoamsT6rXMWq8zquKYuqtu\\n0mkMvMEnOUtGznJGddaWQEuS1bqdelnlnUW3lk3GaFCvTCnC2mKt3B3DG3rVpOsj9Z2\\/QqPa\\nNIdW3rasw9J0eUbcnFnXczcm0szLilOrWsq1lOdIaxVkSMyfrKz49HZlwyAyEU10dfr\\/AKsU\\nriDy4MdJQ9J7McJYO2WyLiVoTN06ms17EpbWMpTMVqrsGUeNgFJWKOh5BAyu+ikC9aBsbwjQ\\nwkiV85dSAFKShMslVtPTU0VTa76g9rOOAgkEG5v2bWcXL2q5UhFRRSmVZgtUpkMKTnqgZTLi\\nn50L1RxbmEA8dTcMuu5mbmptwvzkw\\/NvqzKnZl5x91f+M46pSyczmNdeXXxzba6Ov1\\/1YNdH\\nX6\\/6scvYs2kY6x3M+dYyxhiLEroUVoTWKrOTsuwSRpKSjrqpWTQODcqy00DmKUC4iyZKlU+n\\nIySEhLSibAEsMIbUrvWtKQtw961KVzJisEU10dfr\\/qwa6Ov1\\/wBWIb2veerdeo89c6x5H2GK\\nwRTXR1+v+rBro6\\/X\\/Vg7XvPVuvUeepY8j7DFYIpro6\\/X\\/Vg10dfr\\/qwdr3nq3XqPPUseR9hi\\nsYcaY2JdGw7sCs3FcCyaDYlq3NiRcDaXEtuKkLbpM\\/MoS0pxaEbdyXlKo2wFnVU6pKe3MbXR\\n1+v+rEdnl2saGbJ0X74pEnM6lZxbvC3cLKZs33UvMUWnOuXFc0ywhGQXKzMjbUxSZwuZtatx\\nJRkVON5zvZjht3G20DCOE2+1tXa9Tae+pvRTMm9MNifmb6ECVkRMzKiDmCWVEAmwOFVaomg0\\nas1xdgaVTJuaZCx6K5vsi3JtG4I\\/KzK20C4IBIJFoia2DY+MGk9idf1zWvPM\\/dnUJmu3\\/ctb\\nnqtN0hDk\\/cNZXMzTTVSZbmHUz1Snqg+qVadLbS2WJhTswhDRCslZSwuUmw1Kha1+YxMyTQUC\\nm08bZp6QdSgTmQND+65l2Y1UrmHmA5SiG3JkbMonFltORnJ12Ibdwlrl8TDOpO3\\/AHAtEq4t\\nGqVUK2A\\/TZNSFKAUoKrD9e1iklopQzu1wonYBH1nx1tRdp2I6jh6Tw\\/harUKjqZpjEtV6UJ0\\nJXKMNNTLTdnm0NtszCXZdtsIUhKGk+iSSI+ac7jSsU6rTfmEwUdm7kU8HZhEwt6w7dSnmX2l\\nlRcUtNyVEnU3uQdT8npjcqdhrrNztw4qTUk1rF9dyYVUC7pJWzVNrUlVcn7Nqj6Mj5Q7lLVZ\\nlSpdqXUtS5RpgBld+nbygOkvT28GJSfn6ZMTu3TXWbBtdVj1yqSDynJZTVy15LrRo9EQUvS0\\nwGJihU+bOtL1Nc8tKGY22wRCEYwwMmYaqf4mdnbdblViYkqlLUeQluwnEizcy8y1T+0mVNqs\\ntGaaQ4haULbdbcQlY2v44caGTdkl1msrl3mVMqYXXKkqW7NWpQqXW8sdmrULQhaAtJUkqyqU\\nDrrwJ0DrZstcldOLT8ne10JUiZYt5oLdtSlPlKVgzgfQh25JxpeesqaaapSVqUnyKbWhqbOw\\nDZttNIaaQltttKG220JCEIQhICUISkBKEJSAkJSAEgJCd0OXlaysuZO7088Nlnfl6T2+PfEZ\\nr2Ja3iic8\\/rU87Nu+kGWtES0q2og9lKy6LNsosBfKM7hGZ1bi7qitZyemp93tZp1TitcqdyG\\nwfzW0D0UjnYXNrqJOsIr+qev9PwhGFHDwHp7vjCcacXCD3\\/A2EYqfrDx+GsJu\\/savR7SIZw6\\nfPmgdJ90NY9Ru8T932Q9ff3G3uB+2LVHJJ7MvXuhBXA9h90LLPm9py+PwhBf1T1\\/p+EZLXD+\\n2H2R7CJ3AnohvC6uB7PfuhurgewxlQAXIHM2hCG8Lq4HsMIcIBqQOcZEN4IIIyIbb4+r7Ybw\\nxX9dX+Mr3mH0MCcyT0mMiHIpCK\\/rH0e4QtCCuJ7T74WjefD7RDwGiT\\/Ft7bfKEFfWPjhuhuv\\n6x9HuELq4ntPvhuo5qPbl6t0ZCN58PtEJT9ZXr+IikJL4js+JhWEV\\/WPo9wh2HIQX9bsH2\\/G\\nGT\\/1x\\/ij3mHi\\/rH0e4Qye+v2AfEw+ncPAfCFo3nw+0QlBBBD6RZI8L+3WPF\\/WPq+Ahu\\/+B\\/x\\nv\\/Zhm5zen4Q7f4p7D74aL5vT8IyEfVHr+JhxH1R6\\/iYThNzm9PwhSE3Ob0\\/CHEfWHr+BhUNX\\n\\/qD\\/ABh7jDJfAdvwMPH+Ce0+6Ga+A7fgYfTvHiPjBCUWr+qfR7xF0Wr+qfR7xCj9f1p+yPU7\\nx4j4w3X9U+j3iG6\\/qn0e8Q4X9U+j3iG6\\/qn0e8RlI3Hx+wQ\\/Ddf1T6PeIbr+qfR7xDhf1T6P\\neIbr+qfR7xGQjcfH7BHqd48R8YQVwPYfdDc7gT0Aw4VwPYfdDdXA9h90ODUjxEOI3Hx+wQhD\\neFycgT0DOEIyBqR4iFwQQRQnIE9Ah+CGETKeSBvr7tdBjDiReddmJ\\/D+vXvYk8645rk+R3JO\\n3HSWxqnNpEpb1z0iTbbWQQ3LI1RqqSYhrRJk5Aq+VTmHWkJhq482lNu3rZ99SbKnvpHfuzod\\nQoNRdZlid6JcWFS0zDrOYSZiVbmCjWl9fCqLQck3NbFC2ljfcnPksLEcFk6m1geNotTZLPea\\nYyl2SdKjIT0mQdxKENzwueH9BGxFjrlv6RiTbac2XqDIBXnFkOMK3nMbJxYRvOtl9Ds889xO\\nW8DIR5t3KU2AvB3lG9Km2fJlyMunHe472k5Qy5lEy9GxLnGMSaWxLtbgmSTR7ulESCkgJekt\\ng6j6NYj0dLMmcpKaYIBDU0HRvyIDzaRq7hw12ScsyCd2XTBw+UY4efchygcteDLZEvizgjh9\\ndrzwJyNUoE5ceHczLrJSMnWabZtHeUEa7YanJfztcuIat6jzYqOGqWhbmZSJNpld0m5LLZlH\\nd+\\/MUZlG5143MTDaXIANLdCR+SqSidRYNTTS1buAzloW0JB3GwjVmrie0++GC\\/rq\\/wAZXvMV\\npswZunyU0TmZiUl3lHeTrOtJWrPMkkhRIV1kADotVxPaffEDCSha0neglJ8QSD7xFDL0sOI0\\nPiAIbq4ntPvj0V+SKxHVifycuivXHJlD03QbBfw5mkCYEw7KDCy5K3h3TpaYBzWwv5mtmnTL\\nMuvV1JOZlVtJMu6y4vzqFcT2n3xNq+ThYgi5NC3ESxJmYWuew3x5uNMqz9EUS9u3datpVmn6\\nuoovhTtfbupaw6wlBzGxmHvpmpa8Nhs72GKpmUUbJn6O+hI5vS70vMI17mkTHcb+oyjCruSo\\n9nfR6WcRa\\/5ySh0HvIShQHcTEhWCCCOs4sWCCCCCCIvfykS+A3R9FfDZl8qM9UsT74qjAdWN\\niKZK2fQaC8tko1HduatciG3NcLl\\/J3E6mUwMosSeA7B7o3v\\/AChW9vn\\/AEy7Fs+Xd1pawcCr\\naYmmjrfR1q5LrvGtzakjaqbDblGct3fs2ntdLhdLzRly1ofR9Uen3mOBdsM6Z7aFiFwKzIl3\\n5WRbFrBPmchKsOpB3n8uh1RJJN1bwLAU\\/iF3tq1PLv8AVdDI4gdi22yfe2SRzJhwj6o9PvMO\\nEfVHp95huj6o9PvMLo4Ht+AisY0BFyruJPvt9sbo+R0tfyi68bL0Ukf7kW3adrsOL1wpf3R1\\nSq1WaQydXZEM\\/cvJmYGuFpD7Hm+csokm4VSwTJ1abJP00xLSwI\\/BEs2p05ZcczNJ3jPMjqzj\\nRpyRNtCnYC31c7iVImLkxQnJRpWSgHabb9uUBEq4M16isqhU6u0dVoZbI6y1g6rO+\\/DWWS1a\\nsu4E75uanZhXDzih4yoIOW4ZSqeBPnDPPmHEuHkjE\\/lg4mnrhbeF6TNlkG5DQkqLTMOPBNtD\\nebqkyohW4uGxBAMd5bPJb6J2O4cZIsuoqem3SPzzOVGbnWSbjS0s2ynT9HXviB\\/KIb8RXtLn\\nDKxJaaD0tYGB9JmZxgPJWiTrt33ddE9NsllIzaedoVMtmZUt1ebrTrH0SUNoW9qYwNk9Sj1u\\noZHOaqLEpnu3iRltqMhxyBnyM+GeYG9Koya5Yi+Pu95RjSPnGXSuRt2tWpY0i2XS6mWNmWJb\\nNAqraFFpnVDtwSdZmy0EkMuzK29o\\/q+UOdH4Tynktk01RSErnHZ2cXuyJ15t1lsk85LMu0Qe\\nghPNH0JrX7DwrJy9yC8JNCkk63I86WNOCVt94BtqSbnkTHc553Wq4+CCl2qvtNkXspth5TTS\\ntdbFtlB4ancN0dkQqjgR1+PdCUKI5\\/R49sV4Tdv1Aew2iv4eMfh\\/8X\\/2oeI5\\/R49sMmPrKHV\\n7iO+HiOPo7oZV9U9cYIVi9HEjq8e+LIvR9btH2\\/CGT7d3x+zfBDtj65\\/xT7xDqGbRycT15j2\\nH45Q8hlf1j3\\/AKvshlf1j3\\/q+yCFGv2RPp\\/\\/ACTCcXIOSknrEMLGviOvshSfqq9fwEcgn6w8\\ncd0LjcQegiGwORB6DnDiGF7weutYbhxFU8R2j3xQbwD0wQ3BDgbiD0Q44Q34wuOA7BGPDaDv\\nHr+f2Q5g8ePXFAcwD1e3nisY+6Be4HrrSH4OYB6QD6xDhPAdnu3Q0aOaB1Zj1Q5Rw7D9vxhC\\nxpfkfd1aG4vjbXyTWNNYw+xPvmxqdU3Ke5edvylakEKDS5ebqFpzDxmKe4y6laXlTlLqs3OL\\n1kkIaoq1trbd1QrUpHb2A+IbmFWL+Hl\\/JeWzLW9c8g7Vlt6yVuUCeUqmXFLpKd+s\\/Qp6osJy\\nCgFO8FDdEVxhK1ibwxW28O1Ko0jEDUi7N0KpUmcmKfUZSryNpynOSs7KONTEutc2w0ytbSwV\\nNOOIOZK1JVKcBVqXw7jKgVWbbadkZepMtVBt9CXWlUyczSVQztuAtryycw6tIWCA4lB0IzCY\\nRWMVb0uJnVeqqpGWWgIclqSkyDSjkrXK3G1GaUFgJCm3JlTWrknUyzj4MuqJUVjMkgkqVrEk\\n\\/WUpW8FRzzO\\/n3Dmj41+5JambBLja5piaa8pbflnGl\\/RkjVKM1hDiFJO0bUHEgjIjdxSXftr\\nsuoYm5\\/yF1xG0Smal3wgpKinPaJQ5LpIIPF3MZjI7jl8467j7GmP5hmq4wxPX8U1Mt2D9bqM\\n3UnWQCAtuXTMrdEsyFJKgywG2kbggCwj6gS1Kk6e2W5CSl5Vg6hMsyhtKgbWUrIAVq1Hpquo\\n77mPtdqroV\\/FEG1V0K\\/iiOJk61SKiQKfUadOqKdYplZuXmV6u856jSytOWRBzGYIIOWRh\\/mO\\nge3viPqfWggKWUnkr0T+bzHj7fC7+X+L7vuhfaq6FfxRBtVdCv4ohDMdA9vfBmOge3vhHnJ\\/\\nrqeH5w7u7x9\\/IXMn8X\\/y\\/dC+1V0K\\/iiDaq6FfxRCGY6B7e+DMdA9vfB5yf66nh+cO7u8ffyF\\nzJ\\/F\\/wDL90L7VXQr+KINqroV\\/FEIZjoHt74Mx0D298HnJ\\/rqeH5w7u7x9\\/IXMn8X\\/wAv3Qvt\\nVdCv4og2quhX8UQhmOge3vgzHQPb3wecn+up4fnDu7vH38hcyfxf\\/L90L7VXQr+KINqroV\\/F\\nEIZjoHt74Mx0D298HnJ\\/rqeH5w7u7x9\\/IXMn8X\\/y\\/dCVTqCZCnTs6oHKVlpiYOY4ltpSkIz6\\nFKyb6MuoZRCX5fTFB+5seMGsDqTMOzybIsmbu2py7K9Zbl14lVoyMtIzLYSjaTstRbUpk7LK\\nIUlEvcikoUlbz6Img3u5nQ3ZYLU35a+y0dQZq1EK26yOHmnYhC+G5Yy3xAaxbr7elDyquJNy\\npd+dLbo2LdWakppGapN61cFZVu2Lbm2mwNVEjWnLUpD6kKQ35QurLdmUF594R2f5EVLZmNpV\\nfxvOJ7SS2eYNrNaSspugVGeaFLlGrkWC36e9WS36WbOyAkFRzJp7blWk0fAypUKyuVWeR2qL\\n2K5KmNKnnONyRNIk02sQc+pCsoOxfDKzmMPsPLLsmXCdW2bbpVJeWnLJ+dlpRsVCbOR1dacn\\njMTS9XJOu8rVATlH3MEEXlMPOzUzMTb6i5MTT7sw84d63X1qcdWe9S1KUfGPnEtanFrcWcy1\\nqUtR5qWSVHxJJ9sEJuL1E7uJ4fE+iKrWEDfvJ4Dp7hDRSio5n0DohCU31O74wmLeEIE5knpi\\n5as9w4c56fshFZyGXOfd4+MPgXIHOCE1HMk+rsikEUUQkEngB4HphauCR3fdfrlDiBvPqHXX\\nGGzys1ZcyR7Tx+EIxUnMk9JJ9cUhYFgByEOQms8B6fHthuvgB48b4VUcyT6uyEFHNR6t3q+2\\nMpsbu4X165mCEl8O0\\/b8IQX9U9f6fhCqzvy6B7T9kIL4gePG6H4UkXUPb7IRX9U9f6fhCCuB\\n7PfuhVZ4D0+PbCC+AHX498ep+sPH4aw6o2BMJRRXA9nv3RWLF8O0\\/b8IyE7x4j4wlG71\\/KEV\\nHIE9AJ9QhhDx05IPXkPXDOH4cGpA5kQQ34wuTkCeqG6uB7PfuhxA0J77ez9cPwhxhBXE9p98\\nLE5AnoGcIRkIG8+qG0DefVBCKvrGFobk5knpOcOQ5CCvrHt9273CGTv7Ir0e4Q8O8k9MMVnN\\nSj+6Pqz3Q+NAByAhaN58PtEWwQQRkJ3DwHwhKjcnxhq\\/9fsSPeTDRfEdnxMOXTm4rqyHsHxz\\nhsv63YPt+MZCdw8B8IeTuHgPhFkJLO8Dqz9f6IVhJfEdnxMOI3+Aj2Gj\\/wCB\\/wAb\\/wBmGi+A\\nHX498OXz5wH7nP1k90NXOb0\\/CH0\\/WEEJxYvgO34GL4Tc5vT49sK\\/qnXAQpP1hCC+A7fgYQX9\\nU+j3iF18AOvx74bucPT3xko3eJh6EF\\/VPo94huv6p9HvELr4en4GG6+A7fgYyEbj4\\/YIIQX9\\nU+j3iEFcD2H3Quv6p6\\/0\\/CG6\\/qn0e8Q4nePEfGHUbj4\\/YIQVwPYfdCELK+qfHHdCMZCd48R8\\nYXBFFbkqPUfdFYsWckK\\/xSPXuh+AakDnDFXA9h90bquQlvT5k0p8QLNfmCiUvbByrOyzA2Z8\\nqrlsXPbFQkwdYhRDVGm7kdGyJJJ3o1CXGtKizklR6jGfXJY3kiyNPPR+n3nAmUrder9mTKFu\\nNNpfVedn3DbdNQVvAnza1UabMoQ0UuvOsol0621CFqyZ23U6+mgpABAuqxsDfS1yL3sCOMSj\\nCU4JHFNAmCoJSmqSjayb+i3MPIl3FG1zo26vgeIsd0Tp7TmA3NTTZ3ByXSvIkDNTTgSMh0\\/S\\nKz9HSBEWn5T\\/AGIg\\/wBiNipLMqCv\\/ps4fVl9Rl8ilJsq47aZQAlMwpQJutbmst1gAtBtMusu\\nGalFURwM1BokjJxLiFdO9tR3n8Lz0p48M92\\/IRpF+UaWS3dWgRQ7paYKprDXHmwrgXMpGS2a\\nXW6HeFlzbK\\/MWlTD9RuOjLUNdol6Vl1bcJSWX5VhacCZVqUU4myXnWwg2SSFWdTYkkn8oskC\\n5JItvsY6F2gSnb0upKy\\/9XYmAbXsZd5tSvC7bRSo2GiuIuRDUsuZ8pt2R35qYL8urq2b6ygb\\n89+yUjj5vsRHNq4ntPvj4jDiY1qZPyxOewnQ7lvzCX2EJGW8ZDWYWR1lXbH20Ys8js56bRaw\\n7ZSx\\/wDyflPgoeq3ieYZkWdUNfrKPqNiLd2vj6rQgrie0++JR\\/yZK\\/jLXtpZYXOupPz1bOGV\\n\\/wBPYJZDjRteq3Xb9aebCil5xEwLwoTb2aHWmTLMZFhx7KYi3xvC+T0Xyq1OUKlaBtihOJmD\\nGJdnbLIlL7tNXb+IiPN2LoS40ixXVpc15chIdaL+q6qWmJ1symzJY3w+4CQHJtUmqxtmE7Lv\\nygBGoIzPJVY\\/nJTaxAI2lFc7GqSKr73ktX\\/uwLPv7S0TvoIII7ci1YIIIIIIgG8sTeP3Z8ox\\npGTKHFLk7fqlm2bJNnzth9y2Hdp0uptJJaaOqqusVWZAyXqB4NB55tIdOs9H1ez9PxjIvTFu\\n5N+6Wuk3eKFpXK3Bj5izUpHVUlSU0t2+a4mlNB0NtbVLNMRKMh7ZIU9s9qveoxjmjgR1+PdH\\nzcxbN+f4lxFO5lKE1XKpMIKt\\/Zuzrym08bBLZSlKQbJSAAABaKQnHe2nJt64PazL7hI3flHV\\nL07vSuO6HCOB7fgIXRwI8eN0N2+f0fGF0cSOrx74jUYCvrH1fARKg5Om3UW7ohYV\\/R7OZrib\\npuKbJSlO2cql3VwyTpyQFKPzQzTW9ZwrUQ1x1NRCNzVnywlrWoTZQATTJV47iDrzTYmllWZO\\n\\/WeOXSTkOAB1qaNtBFsaP+CVADRaep+FdhtzTaQvVNQetmnP1FeoSVaz0+7MOlA3BTnTGxHE\\nu6G8NMJr\\/vfNpDeH+HV1XUS4Apptu07an6sSsKASpCUyO8KzTkPXxv5MTCsQ7VttOKbpUXak\\n4w0pSbns69iGqzraAvcEpbpTScoNsqW+CRb6FzTaaPgjB1PX6CJKhyAdy3AvI0uVQ6sjS6ip\\nalkkAlRJOpjzbdKS+FYl6S+kJiHtErbvfGzFK6ZctrUthEpXL3rdRk2Zcqfmj5NLyr7LMoDM\\nzGow2hKXnEjXjvS0ZQSNs0CUyyUzR6cHBu3vKlW1vnd0vLWefj9ZXGMG2EOTs4y0VKW9NzLT\\nZWola1uvuJRrqKiCpRUvMknIn6xjYAyhLaUNoSEoQhKEJB3JQkAJA4k5AAbznlluyjvTGqwh\\niny6dE3fXbgA0lpCBr3LUBxFo4JrLqnlZ1m63nHnlniVqIUTbhcqV3crwvF6OPaIsi5P1h44\\n7or9IuhQ7z8BGgh2yclgdII+Pwh6n6w8cd0ceg5KSesQ+G4g9ENnUEc4LaX7yPZb5w4iqTko\\nduXr3RSCMeCHSDkpJ6xD6OP4w\\/BzAPSAfWIbXwPXWsNucPX174rBBBGO5w9f2QIOpHr664Q\\/\\nBzAPSAfXDgbwOwQ0aOaB1bvVDlB83sOXx+MMLGgPL7Yb3Q5T9UeOG6LoTQdxHXn6\\/wBEKQ1B\\nCyfqjxzwujh2H7fjDZB4j0+PZC6DvI6s\\/V+mGFCxI65w2LBZHPd67H7odo+r2fp+MXQkg7yO\\nnf6vHshWGFj0j369euFL1Se7r5w5YO5Q6CD68+6HSDvI6eHo8GGDRyWOg7vXw9uUPUnIgwhQ\\nuCIZheL0HI5dI+33ZxZANxB6IxyLgjnDatFA9ab\\/AHWjDbG1rSewer7OImjDijjJbFOqjqjc\\ntl4dXfdsrJSdRCS986M2rS5406oUmoai3J6SckJlmUqiWppLS0ToEn8\\/aHLHafuHk4xIXnd1\\nBxFFNSGRSMU8PqbLzrbIXrBqaqFqNWTccy5rlZExUqlNzQK1IU6ttLaE548Y4ytW7b1zynkV\\nx0GjV+TKVJVKVqmSVTl8lABWTE6w+2NYDzjkCc9wyJzljNZwTVJGXkMdbNMKYwLCOxRV52m0\\n\\/wCmks7kDz52RemVONN\\/kkutTMs6psJC3FKBWqwsP7RsSYfZZYk6pU2W2QEoMpUZmXGRKgpK\\nXGApTDwTYAJWkBVgVXOp+XtPl4p6dfk\\/1UdH+WDrTTbb9Yw+vR6WCSguOKclLduKlzKworcC\\nkIVdiCgJy1irJRzSsbls8Aa3Myq5XFDE3C5QlmWxTL7t2o1GQE1tHi4Ei3Xb3oiEaimwJibV\\nKoUkJ19VSNmnWtdGh3gLdO0dRaj9szbgIVNWtVJqmJ3g5FumvqnaK0UKUSktUtGZzSvXbSlI\\nxxujk8Uq13bJxGUnLX2chdNICtxzKNer0l1OXMlQFFOeZWnL6h1Mxsj8l3EgAFIruDHlJUnK\\nxNTUzK5178rM\\/wDhJJobBFgAzLIynRLZ1FrUjyisTSuRE1PsTiU2HZ1amNKGnAv00y76rk\\/t\\njjpUdLkDSJTFhcp9SLrm5KXtDEzBvE1E22yUyUtWKa3cS3FqUdiadSqrITknMlOr9BNUQrTm\\nDsDnGSdN5Qa1JeaRJXfYFfp5CEKcm7dqNPraSVHcoSdRFBU0gbyR5W+obsis8IIl06GmPlsh\\na2bWlLolW9bWmrWq8nPfV4alPnVU6sua4BKdlTV8AF6iyhCvi5TETSLwfmESiLqxXsNSFIQi\\nl1GeuSmSSyjMtg0iqFFOf1UhRazlFgIKwg6i1gRuc8iXZxiAKXhTGVLnSUEIlnEBmZSbiynX\\n6RPhIITfMhyj8cwTY2Fn0ryhZWZCUz1ElniR6T1KqSbg2G6UmG1FJJG9U2LDQgnU+i\\/aGmHo\\n+3lUZajSt8s0OtTjjbcvTLokZygKU695jLIqc0yqhKeeVk20wiruOuPKDKUlSkpVk1rjoPs7\\n4gG6DukDpGaReOtr4JTskcT6jddNrfkMxK0ilUus0r7nqHUK15dOTlPapdKXTlNSIkZqaqzb\\nSkvTEo85UdoHG5ubVovSuI1JwYta3sVaZP0677ZVUbefRUZiUm5iYplNnnUUJ4TkhNzkvNtt\\nUpcpJtTbTzofTJB9SlqJeXxL5QWw1nYtUZGnO16SmqhMsy80ulioS01MmQnFTjUvUZVAl5Gd\\n8zEzT5mUdEzJhxLqUFLjiVXN34UxRTsXUxdVpbc00w3NOSbrc20lp1uYabYdUkht15pQLcw0\\ntKm3ViyrKyqQpIyI1x0H2d8GuOg+zvhKCObsyeY6\\/X8eRiTQrrjoPs74NcdB9nfCUEGZPMdf\\nr+PIwQrrjoPs74NcdB9nfCUEGZPMdfr+PIwRjppU4jt4S4I4r4puPtMowywuv2+kJfSFIfnL\\nft2fqlPlQClYW5OTcgxKMM6iy6\\/MJaCFFWquDXycNsv1G4sT8SqiXJiZblafbctPTJU69Mzd\\nanHK3XXVOLBUXgadSVuua2s55XkSczryguXZxEVh7yfmJUo3NBibxTuvD7DClrQpxDuU1XWr\\nwq7CSnzVCbt2zK\\/LPJOadhMLBzjQtoN2mm19Hy3ZtxtLU3d9UrV0zQP11Ifm\\/mmQUs5AlLlK\\no8i+2kEgJez3KK0x9H\\/JVkBRNgO0HEygG5rHOOKdhWXUlIC3KbhqQaqK3EKG9px+oVOUXyUl\\nQJ1Rbjvyn6zaZpdHQu6ZWnIUU3PoP1KZW88nLbeZaQl7m5BS4lOlrHMkvIHDM9g78oSU8o7k\\njV6+J7h7e2G+skc\\/x90WlfQPXE5CEjv8Y47hQnnJ7Se+ElLz3D1+PHxtKiePq5oTKwOG8+z7\\nYUAToBBFVKAHXzDxzQiTnvMBOe8wceuHNEDmT17PjCkpue7ifs8YPHj2w2eXmdUcBx7ej0Qq\\n45qDIfWPDq6\\/shnxgSCTmPq+fy\\/VDthuA0H6\\/X484ItUch1ncPHjflF0IqOZ6hw74eSLnuGp\\n664x7FhOQJhCL1nM5dHHt+yEVnIZDiePZ43RloFhfifhBCZOZJ6TDdRzJMKrOQPXuhuo5An0\\nDthcOIHH1Qko5kn1ePbCKzmcugfb7soVO4E9EN+MOIG8+qPVnQDn90EJLO8DoGfr\\/RCsIE5k\\nnph9A1vyHv6vCgLADlDZ8\\/VT6fhwhvCjqtZZ6BuHo+3P7YTh2FoFz4axav6p6\\/0\\/CGy+Haft\\n+ELLO8Do3+vx7YbuHeB0cfT4B54eSLAd+vt+6HFaBXf9th98JK+qfHPCMKLPAenx7YTh9AsP\\nE3jxAsPE3ih3A9hhudwPYYWWfN7Tl8fhDdfDtP2\\/CHBvHiPjC4RJyBPQCfVDCHjpyQrr3euG\\ncPgXIHM2hxGgJ60\\/XBBBFFHIE9AJ9QjIHIeFh8Ibhks5qUf3R98NlHNR7cvVuhfhDeHwLW7h\\nb4fKHwLADkLQQir6x8cN0LQ3O8k9MOI3k93Xwj2GbpzWerIeqGy\\/rdg+34wus5qUesw3V9Y+\\nOG6MhG8+H2iDr2RbCSzvA6s\\/X+iFYRX9Y9X6fjHqTdaj3fIQtG8+H2iEV8QPHjdDdfADx43w\\nuv63YPt+MN18R2fExlp3Dw+OsOwg5zen4Q3XwA8eN8Lr4js+JhuviB1ePdD6RZI8L+3WCEV8\\nB2\\/Aw3Xw7T3wu5zen4Q3XwA8eN8LT9YePw1h1A9HxN\\/ePlf5Qiv6p6++EYVXwA6\\/HvhKMhO8\\neMLghN39jV6PaRCkIv8A1O1Q9xMPx6nePEfGGTn1FdnvMdr6PV3Kw\\/x7wSvoOqaFn4t4c3M6\\noa\\/7DRLvpFSmG1BOaltuMyziHWxmHWlrbUlSVap6mePmHrIHx+EN1koBWg6pGWqUnIg5jJST\\n0jqyh9kgEXFxmFwdxGmhh9t1bMwy82SFsuNuIPJbawtJ9RAPiI9J2WUlEww5lkEutZjdmQCN\\nbgOjLxwwC5X60Rf3JtaV1EaGu7T7EpN6JBTmUIw6va1r+fUkqcYyyl7aeSpW0P0Sl5MzCf1u\\n9mDhZdJvrDLDm91KCzeViWhdalhCU65uG36dWCvVEvJBGuZzMASkoE5nKXYH0KOC0mbWGIWj\\ndpBWC0kOuXxgfivaCGcwC4u5bCr1GS2AXGD55nUt5bZk+cc3U7lhTcyabNymZTOUzLZIUrKC\\nW3W75TmSLWO8XsNbbo7ErDSKjSZnJnKZumzIQQLqyvyxyG2vpWWLC+\\/TkY80DDh8pnKpLg\\/s\\nsm2+U9PkzpRn6PKecHjHaB3AnojpWx39lcDKP\\/rmXmmOrc0XxnuO7Ngc435b+Y90q4HsMSat\\nIyz5P9dbaX7B2f8A\\/wA45Gmx+XA\\/SCT7fR+CRCEbBOSbvZdg8o1ok11t0Mqn8UpeyVKUEkFv\\nEqh1nDp5nJQI1n2rpWwPNBzcBRksb9fSuB7D7o7V0ervdw9x\\/wADb+l3VMP2PjBhpeDDydoV\\ntO2zetFrLbqQ0lTpUhciFjZJUvMeagqOZyaBMGTrVInBqZWq0+YA3ay82y7v4Xy+qFS7nYvs\\nu3KeyebcuN4yLSq47xa8epZBBBH0Ai44I4atVSVoVHqtbnSsSVHps9VJsthJc8jp8s5NzBbS\\ntSEqWGmXNQKWhIUBwSSY5mMb9L6402jonaTt0F8S66Bo\\/wCMdWYdzlwozMlh7cUxKNtJmymW\\ndmX5pDLMsy7rIfmHWmQFbQA482+mWlZmZWQlEuw8+sncEtNqcUTv0ASb6GGnnOyZdd39m045\\nb+0SVfZHm71aqzddrFWrU+QqerNSnqrOLBdUlU3UZp2bfIU668+oF15f7I866R+yuuK3wzbO\\n8jpHu\\/TDVH1u39Pwhwk+cPHEZR8yHlqdU44slS1qK1KOpUonMok8So3J7zFGHX3e43hyj63a\\nPt+EclTZOYqVQkqbKpCpmozjEjLoIXkp+aeQwyMm0LcILjiRk22tfMlC844tP1h2+\\/dHcej9\\nRBceO+C9BUkKaq+KtgSEzm3tQiVmbrpSJtxbWu1tG25ZTrriNq3rISQFiNTU5xNOptQn12yS\\nMjNzir7sssw4+q\\/G1ka21tD0nKqnZ+TlEXzTc1LSybfpvvIZTrw1WLGJkFnUyXlZ21qHLI\\/W\\njE3RKRLoXqAiVZdlpNltWzDSM0tIAOqG07t3EA8nyll3osXQC0t67rtMqmcD74tRt1xSWwl6\\n\\/aaqxGC2tb0vqzO2uRsymq5tfKQyWWX3iJdfJYcteU3tbjShrZT5eHDcZWXemQcsjwLQO7fx\\nyI4xi9y6N1N2xya+Ncgheymbzr+FVpSy9daSkqxLti45xtsJacSsv0y3J9hxLymUllx5aXNu\\nllDnN3kNUpTmGsX1dWVap7FslIuKI9NX0dTWJty6tSdKspQ1GUqVvuY762rzKZOQfQghvzeh\\nT62soIShTqHGmQBqLZ2UgctOEQO7MlxN3bbjOYIVWae4sZje2xMofcTxB3obUNxB3+b50Zyp\\n+sO337ow0wol9vfNIORKZZE\\/MKAz3alPmW0EkEFIS643mDmCoEKSM4zK4x2BjVd6hKtXuESg\\nX63HXAR7G0kdxEcE1M\\/lkJvezYN\\/7Ykf\\/r36WhxBwgG8A9MEQlB3j1\\/YfsjSw4G4g9EPwcwD\\n0gH1xx6eA7Pduh60c0DqzHqMN7oOuvdDtPAdnu3RWLEcOw\\/b8YvhgixI7\\/dwghZJzSOzL1bo\\nfNHNA6sx6o49B3Edefr\\/AEQ8YP1k9hHuPwhtY9Hw\\/VCFjS\\/L9UOIIIIYWPRPdr16oQk2I79I\\ncsHcodBB9efdDpB3kdWfq\\/TDBo5LHQd3r4e3KHqfrDt9+6GFC4IgWNfGHKD5wHSD490LQ34Q\\n4G8A9MMQmLkHJQ693j0wun6w7ffuhsOIy480Lg5gHphtY3H1HrrdDaxYhXfr6t0OhuIPQePV\\nzwvDVJzTnxI3ekdfXDhJzA6t3q+yMdY3Hlv663w4NQDzi6HyTrJB6Rv9x9sMYcMK4pPaPj4z\\nhuGCLEjlD5BzA6t3j0RdCSDkcunx9nphWGVCxPtEIULg+0Qqg7suj3fp98LIORy5j7\\/HwhqD\\nkQfX2QuDwI7RDCxY34H49fbHiDcW4j4dafrh0g5HLp8ZwuDkQfX2Q1Scx44+MoWQcxlzj3Qi\\nPFp4+35w7B4Edoi2YlZWfl3JWdlpeclnk6j0vNMtzDDqTuKXGnUrbWkg7wpJHHmixCuY+ju8\\nc\\/bHYWGFh1TE+\\/7TsKjhQnbmrEvT1PlpbqJCSJLtSqbrafPWxS6czNVB9OX7FLK3RjTk0xIS\\nszUJp9MtLSLD05MTC1FKWGJZtTzrylDUJbbQpZI1ATcboclJWYnpuWkpNpb83OTDMrKst6uP\\nTEw4lphpAuLrcdWlCdR6RGsbN+TF0TcPsOKfXtImSsC2bcvXECUmbTt6p0uiyNLnU2RLVGWf\\nqrurKsMIAuGv0yWLqlM7VyVt6SfbdMvPLDm4MAAZAZCPjLKt6m2vQaRbtFlkSNEt2mSVFpMm\\nkDVZk6fLty7CdYpzUsMoTtHDk446dqreTH2O0R+MI+WeO8aVDHWLqziipzT77s8+WZFE286+\\n5J0mVsxTpIKW4oJDEuhsOJbIbW+XXQlKnVE\\/VLA+F2MIYVo+H2ldouRlG\\/PH7lXnVQe\\/LT0w\\nVKGcoXMrc7EKuW5cMtA5W0AXwRZtEfjCDaI\\/GERLtx\\/XEezw7+r+ESzInv8Ab10T3WvgizaI\\n\\/GEG0R+MIO3H9cR7PDv6v4QZE9\\/t66J7rXwRZtEfjCKjNatm2CpavNSnhv8A+N5uW8ZHLh0i\\nPQ8pRCUFK1KKQlCUkrWVFICUJBupSiQAkakq04R4UpAudAN5JsPWet57rRbflLOIbibW0VsI\\nJOZW8uuXJiHiHVKa2laloXQKdbtsWzMrQE6jqppV1XTLywb13E+SzKXA3tmtr0tYVut2dY1n\\n2m2EoTbdsUKhqCVBQLlMpstJurKwSFqcdZU4tzM7RaivM55n5zltqmrEjlRMBsLdZx2QsTDz\\nDKQq0kFqcQiZqt53VfFedSlSUsIW\\/asxRAss+UDKVSpxxagJRjsiPrRgSlqw35PuxLDrja2J\\nmbpFdxfUEOoLbrrmI63NTcg46ghJSpuSc7BBUkktpQCbgx85tv8AVPpHHlTShYWhiYLACVFS\\nQJKXlZBNt\\/8AVJd8qtoVrVl00hbWT0++LS4OYeuE4IdyoG839fPjpFGWJ4H2RcVE9nVFsEUJ\\nAGZIA64MwGiR18TCwjn7Pv68YrCbjgRu4q6OgdcJre5kelXd3n1Q3gCSTdXs5+PyhdraDQdf\\nHjFSSTmd5MUgixSstw4+6HQCTYR7FFq\\/BHHn7Pt8c8IqVkOs8O+Kk5Ak9\\/jOEScznGQhHs4n\\nn17viRQniT2mECcyT4Ai5auYenu8c\\/ZCKzkMuc+6H49AuQOcWLOZy6PGcILOZy5h7\\/HxhRRy\\nHjj4zhAniT2mCHgLADlFizuy6fd+n3QlFScznFIfAsAPb4wgeku\\/AdD36xas5A9e7x6IbrVq\\npKuge3gPbCizmcuYeDDV9XBI7T8PGcPoFh46w5DeCCLVHIHr3ev7IWBcgc4cQABfvt8PthI7\\nyT0nj1c0N1HMkwqo5A+oRmlo76IzWlLh7crmGF4SdMxrsqoJE7YV3TMrIW\\/edEqqC5Q5mgXG\\nUy6beqypiWn6Q5K1xuboUzOokHZ+4bbROMIe8fmpWU83M3MNSrcxNS0i0\\/MLSzLianHAxKNP\\nTDhSywZqZU3KsKfcbQ7NPS8shRefaQrZU2k1CtTJkaWwqbnBLvzKJRspMxMNyqC8+mXaNlTD\\nrbCHZgsNBTimmXVIQopCThCo5qPVu9X2xbH2l+4fXzhbdVWsfEW1a5Zl3UN8MVSg3BIP06oy\\nyss2ndk8lO3lJpvJ+TnpZb0lOyrjM3KPPMusun4uNo6y7LOLYfacZeZUW3WnUKadbcQbKQ42\\nsJWhaSCFJUAQQQRGCUqQooWlSVIJQpKgUqSpNgUqB1SoG4IIuCNbQks7wOjj6fAhus7wOrP1\\n\\/ohZRzJMN1fWPb7t0eI3+Aghu+dyR0kn1fphtCjpzWegbvVx9ucJw+kXI7tYc3I8ft+75wQk\\n8ckHrIHx9whWGz53pHUT69w9xh9IuR439kISLkeN\\/ZDZX1T447oRhRZ3Adefq\\/TCcP8AXXQh\\n+KKOQPZ7eaG5OQJ6AT6hCyzuy6T7PGUNXjkg9ZA+PuEOo3evr7YIacOqG8Lq4Hs9+6EIfRoC\\netP1wQQgrie0wsTkCegZwgdwJ6IGxvPHdDiBvPqhBRzUe3L1boQV9Y+OG6FobneSemMsCwA5\\nC0OQir6xhus+cerIezP4wsd5J7fbCB3knpJjIGgHgIIRX9bsH2\\/GG7h3gdA95hZX1j2+7dCC\\nvrHxw3Q4jf4CHxuHgPhCK+IHjxuhOLl\\/WPV+n4xbGQjf4CPYIbv8Ejt9mXfDiGr\\/ANfsSPeT\\nDsKSLqHdr167QyfO5I68\\/UPthos+bl0kd8OX\\/rJHV7ye6Gi+AHjxvh9ofV7zf2fcIVa7nv8A\\nd84nwcndc6Lw0HdFyrkpWZTCG17W10aoA+4eWVZWr5qGhrNfc+G1nLMrQrWW859KrMkrQFKT\\nrAEE5AkA9PPl7e0xq+5GS4zX+T+wnkXXFuuWlX8TLaW4ovrcKPu\\/r9xS7a3HlFKhLydwy8ux\\nsRsG5dqXYSM2F57M5spTMuJzAPmkJJGYBSk55E588aTHClSdOkZwIbyqm0N5SSClL7DjyAD3\\nhux+tpwtHYuFnfPqFRnSpSlrpEgpat\\/5RMswh2+pOjmYHv8Af5e1z225YGMl1WY4hTK7QxCu\\nS0VslLgLa6PcE\\/QltKDrj7o1DLlBDjzrg\\/CdWfOPZC\\/qnr74+y5QCgiztPPSxpyGkSzLWkhi\\nhW5ZhsMJZYlK7etSuOUaYbl0hhphqWqbKGWAgFlpKGXEhxtQj4xfAdvj3xY1Uc85ZpU4N01J\\nNOjXNcLQ09e\\/Eflt+46mOVaux5vOuM7+xffYva1+xdKb24c+6EF\\/VPo94hq7ubV6PaQIcr4D\\nt+Bho\\/8AU7VD3ExhI3Hx+wRgR6pOEl3nEHCrDO\\/S828b4w+sy8C6jYajpua3KbWi6gsIEuEr\\n8t1kpZSGgkjZ5IyEEY38nJdhvXQK0Pq6pxL7v9jthVRJp3bOTC35+1LSplqz8w88ttKlTD05\\nRX1zSSFBuYU62lx1KA4sj6D0+YE1ISM0CbTMnLTAvvIeZbcF78fS9\\/hFxSznaS8u4SFdoy0v\\nNr6WdCVX38b+OsZqxr25VOvLt3k9dKmfbLqFzGHHzDm02w6vZ3TcNDtl5CkTObeyW1VltvOg\\nbeXZU69K5PttZbCY1DcuNXvmfk4sYKepcsk3TcuE1ACX0Olxwy+JtrXRqyRS4lKZn\\/vcDitq\\nHW\\/JEzgCA8WXWtRjCY81wniaZtcsUCruAXykqTIPlACrHLdVhexINiASIxqqvJTKgq9iJKaA\\nPIqZWlPvIiCSNxHaIcDcQegiG0Lg5gHpEfOKKWhzGW2gzSfnvSzwQkw1tdjdT1YKdiiYI+5+\\nh1av7Qtr3AMCmF4v5a0sEGYR5zUYkJ4Ds926M\\/OTRp6Z3S3seaXs\\/wDcegXzUUFetrJW7adU\\npObWQILmzqih53m7IvEHaakQDaZNGR2dY8mwbLYwhiMtnk8aROJa\\/wA6U6jdrEowPLCbxtg+\\nWVqh7E1DQ4OJbNTlS5YcfQCtOdolkYMsJmL7p5yJ8kk6lMAkkZhUo7K8xOZ\\/XR3HeMt5zjWJ\\n8o+uJqkaD2HlBae1Ju6dJCzWVy+u+gu0ukWDidU5p7zBsXUS9QaoyFMvKOankPoQpTGsjang\\nEwXrvn3t5bl7fms1Ao\\/ZXahTUIBSc1HWbDyvMyyUned4B0bfKbrgMphfon2olxYTWr+xNuIs\\nCZCUuLte3bWpiXVSnF9TSbuUEzA82V2y2iP12mI55E9MEtsiRMhCUCoYsr08VFJSXS3L0+nh\\nYJHpptIBnMNLoy70m3Wm2maCGKoAbhFNkpe1yQO3mki2h0P5e4HrO\\/WLFgiwXbsnHlDMS1Em\\nlhRyOq47NyDQAz3pKkKd3p35JIPmkRlik5pHq9UYzYDs60\\/ccxq57KUp7GtkN3lD0yvLPiNb\\nybPIbjq7+AjJdB3Eenx454vLFq89YfF\\/2puXR4XaS5b\\/ADl44pqJvNLH6KUD\\/wAoV\\/8AtDpH\\n1ez9Pxi6E0cSPHjfCkRPcs9\\/22PxjVq+sYVRwI6\\/Huh2wfrJ7CPcfhDJB39o8fGHDZyWnty9\\nf2wlf1j3wmOQRxI6vHvhWEAciD0QvDCxY35\\/ZBFyDkode7x6YctnJaT15evd8YacIcA8CO0Q\\n2ddOYMB1BHOOQgi1J1kg9I9vP7YuhjxjH3HvEAORzHEbxD8HMA9IB9cMIdMKzSU9B9h+3OMc\\nixI5Q4vUA9aw9ScwD6+2FkHMZdHj7PRDVB35dO8dvj3Quk5Ht3ePHTDChYkcOENwtCiDxHp8\\neyE4qDkQeiEqFwRHihcEQ6Qd+XT7\\/wBHuhwg5HLp98NAeBHaIXBzyIjHIuCOcJQbi3L4de60\\nOYqklJChzHwPSM4tBzAPr7YrDBFiRyjxY\\/O9v2fI+qH4OYBHPvELpOY9hhiyv8A9ZHxHvPrh\\n0k5HqPHx454SoXHeN0NwtCiFcx9HZ0ejxwhOAHLeIYIuLQ2fRVcbjv8At+cOknI9XP46oXBy\\nOY5oaJOY6+eFUK5j6PHjuZIsbHhC9COYMPAQRmPHVG1nk28LVPTV14wVGWz8lUuzLVU62FHy\\nh1EvPXFPsbRHmral1U2mS8y1ucTN1eUKjk9lqpk5eanZuXk5Nl2ampt5mWlZVhKnnZh+YdSy\\nwwy0jzlOvOKbbQhO9bhSOfOJOGj9hsxhjh1ZdjsIbSu3aLLmrutZFubuCcK5yszSV5qUpMxV\\npmceaJcXqSrbbO8NkDnrykMW\\/QGCU0WXcyz2J3zLKCVZVppcmW3p8ggnR91cpJKBGVxmZeTm\\nBBAv7yccIiu41XXJlvPI4XYE2jMnMldUmwtmnpIIAJZQmanUqBuh6VZNrKvGQEs2GGW2yQVB\\nI1zqHes71H6nDMnLq3c0L6w6R\\/EP\\/uRSCPnV26jvCff8\\/Hoa\\/QcNgAC50+77+hrXWHSP4h\\/9\\nyDWHSP4h\\/wDcikEedurkn3\\/Px6GvvZjmeuj0Na6w6R\\/EP\\/uQaw6R\\/EP\\/ALkUgg7dXJPv+fj0\\nNTsxzPXR6GtdYdI\\/iH\\/3If0xkvzzTbSStXnrCRmCMm1DLoIG\\/cM9+fWI4+PpLSbU7VVFIJU1\\nKPLAyUT+yMt55JBBOajkeHNxMSbB0maxiig05WYCZqkolXZpzLyJdS4soCgpJUEoNgQd+46x\\niTygxKTDtxdLSyL6C9rC9iDa5udd2kQfNLipnEnls9IesvgqYsGZZpUuw4kltlVmYUWhh28E\\npe1FhRqzs3OhWq4hM0+HGc2Ni6jI7MdI9YjDqjTjF38pLyg98yq0TEp+rdjTTqbNNsPsJcpV\\nRxmrhprimpnUmWnZiRtyVdeS+yhwPIWHES5GxjLaPstjWVRTzhKgN5gzhrAWD6I0lQsoJlqQ\\nw7dQsLLV25Uv0QSokmPlftAnFz2LaxMLUlSnJuYcUU2Kcz8y\\/MkpsbBJL5ItcctN74qSOKkj\\ntIi0uoHPn2AmGcEQoIHEkxDYXU+fwRl1nu\\/TCJUVHNRJ8eoeqKQQoADcIIIItKgO3qhNSieo\\neOMLCSe4cz193fBFyl8w9cJEgZ5n38\\/v9EBUB29EIkkn3Doh9COW7iePh1u+JFVKJPVzDxzw\\nkpWW4cfd48dYpWW4cfd48daJOW8\\/p+2HwLaCCAkAZnx1QiTmczzwEkn3DohFauYenx47yHkp\\ntv3n3RRRzPVzeOuEVnm9fdFyjkOvmhEnPeYcQnifV8+vsjxZ4Deevf8ACCLVHIdfARdCKjme\\nocIeSLnuGp+Xrj1IsLes+MWE5Ak828wxUSokniT4Hohd5f4A6ifgPcfVDeHoWBcgc4ISWczl\\n0e\\/x8YUJyBPq7YQJy3nfz7+f9JhxA4+qHtw8B8ISWd+XR7\\/0e+O9tG7HataPOK1Dv+mNuT1N\\nCF0e7KKleoK3a086wuoSSVEhLc3LPS8tVaY4ohtuqSEoXw7LKmGHuhieJPaYQJzJPTGNU6VI\\nVymVCj1WWbm6dU5R6SnZdy+V1h9BQtIUCFIVY5kOIKXGnEocbUlaUqGXSqlO0ipydWpr65We\\np8yzNykw3bM0+wtK21WN0rTdNltrCm3EFSFpUhRBmEP2po56fFqyeGeLtOkK2\\/N2xT67g1i7\\nSHGqdetOptSkGqiJKn1txt155xjyhU18wVZqbpVQabel6hShU6bLPKj3aavJ5406GdYeqNZl\\n13thHUKgZO2sVKJJrbpq3XioydKu2mB6aftKvuI3tS04+\\/SqmrbGiVepOMTzUp2DoB47ztKq\\nhwpqVRWy9LuvXBh7MLdCdhMsLcnq1QWSpWZRMBT1clGBkkFFZKjm8wiJMWH2Mdv4g2cuzcVa\\nVTbqs656c5RKu3W5NmqybktMJ2M5S7jk5pp1qoSOZ2ZmXWVzKWwh91D6SHmdJgna1heiTFO2\\nK7cZ9+lVSmtsU3Ae2WaUHJepUpYDdDpeOipKSEstp8xbrrjq2WTKrl52ZkUSrk9PdTVfAtL2\\ns4aYx9hdhmUqkwhSK1TJRH5SUq8uhHnzaGwf2Sw6SiZZaVlmhLvMuslQcMqmC2o5An1dsN1H\\nVST0CN6PKIckzVcI5at46aMUrOXbg6EPVq5rDYfXVrjw9kFBcxM1ahOlbs1c9jSoKFOlK5qv\\n2\\/KZzM9850eVqNZkNFL6skhPSfYPtyi1cQ4YquFp4yFUZSC4ntpScYV2sjUZVVi3NyMyAETD\\nDiSlQIstsqyOobcBSOYKlS52kza5OeZU06kmx1KHEAkdo0ogZkEgjcFJIKVpSoKSGvGCCCNM\\ngbz6uuuEYKzuHLodd8EMnDmtR68vVu+EO1q1Uk9A3dp3D2wxO4E9EZCBvPqj1A3n1Qis5qPV\\nu8emLYOMEOQ5CSzvy6B7fGUM3zvSOon17h7jDonMk9MMXDmtR68vVu+EPgWAHdBCK+AHX498\\nJRcs5q7N0Ww6QAjxsfWdfgIItX9U9f6fhDdZySevd49GcLLPAenx7YbrPAenu+MLaB08b+rr\\n4w8gWHjrCSuB7Pfuhurgez37oWXwA6\\/Hvhus5ADPifHtyjKTvHiIVCJOQJ6vbzQhwhVfDtP2\\n\\/CEFHIHr3ev7Ifj0akDv+NoRhA7yT0kwsrgez37obk5Anq9vNDiBvPqh+ETvJPSTFIIIyEDe\\nfV17oIIZOHNaj15erd8IeE5AnoBPqhgTxJ7TDkLRvPh18IZunNZ6sh6hDZfH0d8LE5knpJPr\\nMN1HNR7cvVujKb0\\/xflAjVRPd8SIl8cgPW01PRDxFojpUX7ex+uXZ5IWlKafV7Ew6m5fN3X1\\nVumfbqusEJQW2vJxvUdY7ma4lCJ8IBSlS2G3AnW8471N5jMgkZo5hlmmI\\/8A8ndrXlNi6UVt\\nlxJTSbtwwreyBcLjZuCj3lIFxaCrYpQ4LYCWlIAcUW3A9rIS1lvrv5sJnpBaQkKclVoz1lD9\\nifUoZp3pIG1OWQ59\\/NEH24TRpezRyrpYRMpkZ+kuLQpwsqIef8wOVaWnfSSuZCAFIItooCOu\\ndlS\\/PKLRGyopKpSaZBtcfsaZfbGmYb0s8\\/nEAflnLfRbXKS6R7LIc8mq05h1cTCnXGXFrXXs\\nJrDqFROTDbaW20Vd2ossNuJ2yWW2i45MuKL7mJzD23lZR7PPayzLoO\\/M7RtKsznv5+ff0xsL\\n5eWgKo+ntPVJbTiPutwhw5uBLi5Uy6X0yxrtql1p4j9fNpVbKmDNAAIdZckh\\/wCBGNcVBd21\\nEpK888qfKtnjxZZS0rPPeTmg5ngTmU+blE+wtUE1nZ5gOqpSUdvh6m3QVZyhYkJdpxCl2TmU\\nlbCgpQSkKUCQALCKAxzK+a4orrNrBqtVPLYWGRyacWi3IFCkkDfa190ckviB48boZv8AFI7f\\nbl3Q6X9Y9X6fjDJ45ry6AB8fjG3TuHh8dYiUehxyJ1xi4+TG0YZgzO1mKZTcR7emW\\/LfLXpR\\nVv4wYg0uUl5gkbSWUqly9Pm5eScQkyshNSTbZclvJ3FkdF\\/J5K+us8ndTKctxx1FqYy4n0Bp\\nLjLDaGETLlCuktMraG0mGy7crrxemCXg665LjJhhgQR3bhB0zGFcNvK1UqiUsKOgupEmwlSr\\nAADMpBVYacBYGwtmkrzUyQIuLSrCOeraEIJ1PNF\\/V3mN58aLPlB9ZNL0E6BIl8tG4tIGwKMW\\nwyHPKgzauIlw7BSylzYavzEZnapW0SZfYh0pf2T29OI7XyjerqY0YcC6CJsNip48fPCpAlJM\\nwaFh9d8kJsKAzAkvuhU0RtAP90ciFZJLWq2lvmXwHilwWuqkvsa33TKm5ZXEfmum2u+3oqGh\\nxq+rJRp87rshII01W4hI4jeTY9x3ExD0hVG8dnu6\\/SYSi9B3kdPw\\/THz6V9YxT8OkcCOvx7o\\n2fck\\/ICb0kLlm1KWhFKwiuSbSQjNtbz90WTIoZcXlqoKmZx95A+sssgDzErMav0fW7R9vwjb\\nhyRkmF4sYqz+bmvLYeScmlIH0ZRPXLT31KVu\\/ZUmnILQ1h5qnuPFNQbdXjL7Jcdubs9GEvf+\\n+5uVlbbjv7UjXde4INosTZKyH9pOEEEA5aoHrH\\/6dh58H1FvdxOliCYlE6OculyqXO+Upzap\\n9PZ1jnrfTTEwsBPNkrybJQzyz1N5I3RuPlPdfD186H1qh1g\\/M9p4y3FsUpWZpBuWsYd00vPK\\nJLZl3haQTLJSAoOMTRWVayQmS7o0Sv0N4zKtTVU7QWEZE64LSKs46SNXcle2ZAOv52qfTFL+\\nUz1YuaWOAtA2zSkU3R4YrCZcZeUNqrmJd9SSn3SCSWH\\/ALnkolwdwclZgpyzMTfySKf5tsBw\\nQ8pISuZViWaJOijnxXWWm1HuWw2hQOvokEkWi+ttcx+UrDaSbF2lNEXNrBiVeIPMJWkW7x64\\n0lYDNBMncT+7N2ap7J3HPJhqaWCd2WqPKDq5b8yekRkCn6w8cd0dHYHN6ts1N\\/Pe5XXm8tXL\\n9hkKeoHPPeCXSMstwT9Y63m93g8CO0RL8RK7Ssz5\\/wC0Qj\\/EZbb92X1RyHPG808f4wHsQkfZ\\nDlJyI7YXhsDmAemHCTmAYjawdDyPs5X++MFY3H1E\\/C8XDcQegiFweBHUR8Ibwsg5js3d0eL1\\nAPWtobjkEnWSD0j28\\/thwg5pHVu9UMmFZgp6N47D9sO0HiPT48c0MrFx4QQpCqDuy6PHfCUX\\nIOR7d3dDMEP2Fbino3j4+OuF4YoVqqB5uB7Dxh9DKxY34HowysWN+B6MEXtq1VA8x3HsMWQQ\\nwsa357+ut0KQQQUnofrjkAcjn0b4ccYZtq1kDpG4+jvHjdDhB5ujeOzx74ZWNL8obItoYdpO\\nYB9fbFYSQcjlzH3+PhCsNQQqg5jLnHuhdCvwe0j2Zw0ByIPRC4PAjtEMrFj3GGz6Krjcej84\\ndoORy5j7\\/HwhWGwOYz9cLpVmN\\/EeM4ZWnj7fs6++F6EcwYuBIOY3EQ+QoLSDz846DDGL0LKD\\nnxB4jp+0Q3DJFjaORQrmPo8dUKQ3BzyIPWCIWSrWHWOMNLTbUcd\\/cfvhJFwRzi8Eg5+CPAhY\\nEEZiEIuSrVhpSb+PCEAlBsdx4\\/b8x0cwNCfD03\\/jpQJyaYD1HsRly8qiVJbU2Zmmuss0Jrzx\\nq7X58mJGcSgDaLaknyD5pdEi+3ZdTNOS65mXJhRdOY84NgaraebPNIKx\\/wDbOeNWvJ24duUn\\nDep3i6ypqexEuAS8m6U5E0C3Fv0+XdSCNZIVV368XMvNcaZl3MtwI2zIQltCG0ABCEJQkDgE\\npASkDqAGUfN7yj8UGvY+nZJpzPKUJCaMwEq9EOypLtQUU3ICzUHn2FKFipMq2FfVtH0W8nvC\\n\\/wCD+z+Qm3W8k5X1uVqYKgM3ZTIS1T0hVrlv6PZYmEp3JXNOEfWJN8EEEc9Re0EEEEEEEEEE\\nEEEfcWAB85zhAzUJFeW7eAqZZ1ss\\/wAEkA+gEcwj4eOwcNVAVifQM83KapwHmyTMS6FJPSrN\\nQy6MzvzMWtsQaQ9tUwa0tYbS5VFICyMwCzJzXZjLcXKl5Up5KINxaNLiFWWjzygLkM3tu07R\\nGYk62AGp0v6rxAK0aX5msY66Z90z6mlz9cxqrD01s2Q2lEw9eOIdSnFt7zs2XnqgnJkaoQJd\\nKjmMtXNSMU8ELbNm45aa9pTgdNXtTSXxBtup+US7klM61DvC7aWnbyS3HUyrvlUtO7RgOuOs\\nuFTLrqkobXGUkfXjaTZzGVVKVXSlqkoQctgUN0SmtoKRp6JSgFOgukgnUmPlLiTP9OVDtAQs\\nOoCgd4UlltJB5m438d8OItKkjnHv90IxTWT0j1xBg2OZPh0Y0cLFY5hn7IsKlHny7N32wlrp\\n6z468otKzzbvb49ULDfJPrPx1+wQQoSBvMWFfR6+77YTi0rA4bz454dCAN+vw+\\/rSCLu2E1L\\n5h6+6LConj6osUrLdxPu7e6Fx6AToIqSAMzCJJJ9w6ICSTmTvhJS+ZJ7T3d8EOpTbXefh1zg\\nUrmHpPRCRIAzMBIAzMIlRPwhaU31O749ddwpVvHgPnASSc\\/AHgxSCLVK1R1nhDoHAeqPEpO8\\n7+\\/rfFq1cw9PjrhFaghJPPzDpMXE5ZknrJMMlrKznwA4Do+0w+BYWhcWE5kk8TvMEEWqVkN3\\nE+M4UBc26EOoTbXnu8IsWczlzD3+PjDdZ4Do8e73woogDM+jt5oQJ4k9ph8C1gIFmwsN568d\\nd3frFizkMun3ePjCUVJzJPTFIeSLC3rPjHqRYAcd5693vjk6DXqpbFbpVxUWadk6tRKhK1On\\nTaB5zM3JPpmGVZDMLQpaAHGz5jzZLTiShakxIi0XsfqbeVapSmn0M0bEa36bOy0qXSpFFvKn\\nsusVKllSiAhTzktN04rO+bfkqZsU5PgxHGWeb1\\/Dx2Rl5opX7N0isTltNzbktNMPsXTbjwOS\\n5ao095jysMlYJDh1JOdYQkBCDJzDmWs4SaX24YDk8YYXfmy0BP0uXeQ28E3UJV9TSiSQMxEp\\nNMy84m6rJZRNoT+3rzdDeTtjJdCxcrDsy6U03FCAwhKlHIzV5dK3JJwAkhJmkdtJKCU5nXnZ\\nTMqzItLfw1xUqFlvpp9QU\\/ULZdUSuW1td+nKWoKXM04rWEpSpZDj8otaW3MlOtJadUtbmpPl\\nNeS5pdapVW0odEqgsvS7jEzX8SMKrbl1LYnGFqem5+9LApbIJYmZdW1cuGzZNllpTba56gyT\\nM0xMUydzlsi6Je9bTt+6ZYIQmsU9iZdaQCUsTqNdmoyqSSo\\/rWeYfl9Y5k7DIFXP37hniXPW\\nPPeTTO1nLenHQqdkknNcss+aqfkUnIB4AAvMghE0jzVBLiULbrHyZ\\/KmRhRpjYtttmJme2dG\\nYVIUDET2aYrGzSohzsG1NPEOPPYZQ4C3MyRz\\/Rrd1SqFSaXZJXR+1DZVT8YSL85JMJbqyApw\\npbSlJmVgC7jRICUTm7NchuaSOze9ModTBSgiR1yrPJr0t6lVfS70ZaGy5SphmYuPGCwaAyBL\\noln8pibxItOlMN6zLTalTExfNHl0pEqkLuNiUl2ma8pEcWO6MR4bm8NTrcs86xOyc2w3PUmr\\nSS0vU+sU2YSHJafkn0KW24082pKiELWEFQspbam3F8BVqkTtEn3pCebUh1tRyqKVJS4gKKQp\\nIUAoEFJQtChmbcSpChmSYbvq3BPTvPw+MNFndl0+O6FVq1lE9e7s5obqOaj1bvHpjSpFgBxO\\np690a9IsB7TFsWrOST17vXF0JrPAenx454cSLkd2vshUIqOqknoHt5vbDEniT2mHL6twT07z\\n2c3t90M1nIZdPj7PTD4FyBzMEJE5knpggiijkCYWvUhI64CAakDnCKt5Pb7t0IK+sfHDdCpO\\nQJ6IQJ4k9ZPxh9sW14AW+EZG6El8ezIfH4w3Wd+XR7+PuhUnMk9MIE5knpjIQNSeQ6+2Drr3\\nQiviB1ePdCCzwHp8e2FVHMk9e73e6EFHNR6t3q+2HYUgXPgLwkvgB1+PfDde4dvu6vSIWWcz\\nl0D7fdlDdZ3gdHx\\/RDyRYDv19v3Q9FkEEEZCBYeOsEJunVQrr3evdDBZyQo9WXpO4e+Hb53J\\nHWT6t3xMMXzkkDpPsG\\/35Qsbx4iHE6IJ9nuHxhrwhudwJ6IWWcknr3ePRnDdZySevd49GcZi\\nNxPf18Y9Ru9fX2xI++Tr1ktX9pQ22X3Upq1oYZVssBsFl5Vv1u76el9x3VKkKlxcqm2m8wl0\\nTL2fnNJIkXYyNFC7ddSV5FFUQSRkPNNPUBrZ5hRCl5bxnqncAM4jC\\/J6ans9KfGOh7Z9Kaho\\n\\/VCqmXSSGXTRsRbAkw86MynasGultnMZ6k1McMyYlI4zspFKozoKiU1F9vJX1SlbGuonPIFQ\\n2XH90QeO6sPKep\\/n\\/k04+ygBctL0WbzXGZKpHF9GnFWspOpaQUAG5Ga6Uk5Y6s2GTNk0NCib\\nImqowBuFnUTSt+thmdJ0tv3am8KL5QRTHU6T+DlecbWpNQwFkqQiZW8HNoKJiFfc6WEMFwra\\nDAuBDhWttsPeUhCVOFhaGtR1nubS3KacySlD7ZzOZGzmn0AdQySMhzJyHCN3PyhujeT33ow3\\nD5KUCrWjibRvLdqVCZ+YKxaE6ZUMBwpb8j+6MPl1LLe38vSkrdDKUtaObGc1reaG47KZmkDL\\njvc2mSt\\/HNzq3ZdsZvk5Taqj5OOzGZKy4puSnpQqUrMT5hXK1TiM2ddyDLhNiq6ctilFsiav\\n2vsdhj7EqLW\\/Z7DtrW0mJCWfBAsND2oIIBBBuCoHMfqycyT0k+rm9kMFnNaj1n1DcPZD1RyB\\nPQCfUIYRbu6KuibL8mnrnlehnjLby0vqXRdJi4Kk26pZW0mVruF+FjKJWXRmSyGpmiTky8lI\\nDbjk6F\\/su1zI6f8AkxVV2+FWljRAXs6diDhnVlBSj5PlWrbueUTsUhfmvE0FXlCilOu2JUZr\\n1CEEdsbOllzBOHVE3tJqb11Nmpl1ocOSAPZ6rSoC89Ikla6IcRp\\/2b62+BH6PjuuSbESk4jM\\nfKSZ9xvDrRWpYbQpqdvbE2oKezOuhdLoNpSzaAkebqPCrOqUd\\/nMNHPPMRJniLV8pXmZhEto\\nYySXliWff0hJl5gnzHH5ZvBBqWdPA67DU7NpQTvyfd6d2v2uOhnZ3iRRBOZmQa0toX6tIMAm\\n\\/AFwE9wNtbRj4mJFDnrf\\/TD1GblwfaLiIskVSciDFII4LWNx9sVLDkbiD0ERug5IKTdXWMea\\nilbYYlqbhzJuIzUXVOT01ebzK0jUKC2hNOe22awrWW0UoX5+ppdScwD6\\/Htjd7yQUuhFLx7n\\nUqWHn5\\/DWUWCUlsNycvfDzS0go1tZSp5wK1lKQQloJSk6+vRXlIOFvY1jApNlOChMi4uLOYm\\nowX4fkwu3faLX2IN9ptQwxe+VBrDhANvqUGplP8A58twQbi8SbdGRlKqBcrxSc11iWb195Cw\\n1IpWEZnMEo2utu4a\\/PuIh2\\/KSKs5UNP+0ZJbSGk2\\/o04d0hhSVrWqYbfvrFWvF50H6iw9WnZ\\ncJR5myYQo+etcTJNGFlS7Mrr5OSVXO60COOu1SqUogjnzDyOOWW\\/0QnPlDczMu8pJdsu8+68\\n1I4U4UysmhayUyss5RZqeVLsg5hDapycm5lSU+aXn31fWUqL78myUEvsA2begE5qI49qACTM\\nVWffKrD9IuFQVa6r5iSTc2htmevNVNIJ9KrSzRtqLIkyqxvyLY0G4i27SNd+C6CmzAoq1i7V\\nZ5fRqAJl2tU5k5729bPd9bh0dvIOaezd3eyOqsIEhNkU46hTtZipOEkEbQiffb1weCjk3qZ7\\n\\/qZfgx2kg5HLp948GGK0SatUb8Jt8f4qynhytb1c45YmtZl\\/+6L9xtDpB3ZdHx8GF0HiPT49\\nkNUHJQ693j0wuk5EH19kaVxN78L6jrrfGMoXBELxeg5HLp98WQcIaTqkpPX6jDEO21aqwTw4\\nHsPccj6IfA5EHojjQcwD0w+bVrJB5xuPaIb8YId8YIsQcxl0e6L4YIsSOUELpOYB9fbD1pes\\nnrTuPwPp+Eccg5HLp9\\/j4Q5aVqqHQdx7\\/RDaxcHmOj7oSsXF+I6MPIIIIZIuLQ0DYg+3whRp\\nWqrLmVuPwPjph4Dkc+jfHHw8aXrJ38RuPwPjnBhjxhSx+cNx6Bh4DwI7RCyTmOvgYaoP4Pq7\\nvHdCyTkeo8e+GCLG0IhaFEHmJ7PaTCcEJIuLR4Re4Pq6+Pcd+sOknI9R4+PHPC4JGRH6R4HG\\nGiTmOvn8dcLIVzH0d3p9\\/bDBG8H1whJscp9V+fL7R98Owcxn0xWEUqy7D4zhbshlSbHu4QpQ\\nuLceHXLh0IWac1fNV9XmPR9kOgct4\\/T9kcfC7TuXmq4cx6Oo9Xtz6c9yYZItoYfpUFfEQ9kJ\\nOaqU5J06SZXMTk\\/NS8lJy6PrvTU26lhhlI\\/HdecQ2nMHeojfwjjQSDmIyZ0RrQF548WWhxou\\nydtPzF4TuXFo2+3t6W6eYo+f10hpX7l3pjS16pM0Ki1esvWLVLp05PlKjbOZVhbqWhqLqeWl\\nLaBcEqUANSL7ag0l6vVykUVgkO1WpSUglaRctiamWmlOkfotIUpxZOgSgkggRv7wNsuXsq2L\\nYtWV2SpWzraplGDjKChExOsyaJeYnciErDk863OTjhOS1OvkqJJMZBx8XYkstmhpmXcy5Ovu\\nPAkAKDSCGG0nIDNPmLdTnmcneoR9pHyCr889UKtOzUwsuvOzDq3nSbqcecWXH1qPEreU4onj\\nePrJTJRmRkZWUl2w0xLsMsMNJ+q2wy2lphtP8VDSEpHcNYIIII00Z0EEEEEEEEEEEEEfZYdz\\nqZS6JNKykInWpmTWpW7MuMqeayB4677LadUbsl7sycx8bF8rMOSczLzTBG1lphmYZKhmkOsL\\nQ4gqA1c0pU2jIg563m5iJXgbEKsKYvw1iVIUoUOu0qqOtotmel5OcaemmBm0tMS6XWDuOVw5\\nSFWIwajKidkpqVNh5xLvNAngpaClCud0rKVAjiNd8RJ9KPDJ\\/BHlQtPOynWi1TsSLls3H62n\\ny0WE1CTxLp07cVzzLIUCXmpW8a5VqO68lWoZymzJSM3FBHCRup5avR0VcK8BdOyyJF19yyac\\n9gTjOmUbcddbwxv6tCoWHXppLebTUpYuLb4o9UXq5Ny+IMxUn3ESdEfUNJ+Z6T6zH2mxo5Lz\\n87TK9JPtTkjXqFR52VnGPSYmUNSDEol5pQASRMMS8vOJAt+TmmlWAUI+XO0mkPUjFtSadbU0\\nJhzzhtKh9VJJbU3e5uppTZaXc3zpNzrC8GYHE5Qhmek+sxTMDicoh0QOFipI5\\/Vvi0r6B6\\/H\\ndCJUkc\\/q3xaXOgeuCPQkncDCpUTx9XNFhUBx9XPCZUTz+gePfFhIHE5QQsI5+z5n5e2Lysnd\\nwB8bz+iLCQOMJlfMBl46OHviwnnJ9JghYAG6LlKJ6h0d\\/TFhIA9w6YtKxwHr6OzphKFpRxOn\\ndz+XxhKl8BqefW+KklR37vhFIItUrLt5h3w6BwHqgSnirf7fb9nVhSgn4CESc95\\/R9kVJJOZ\\nhq67n5qeHOenqHV7c+jLe8lNvHiYXFHXNbzU\\/V5z0\\/ZCMEBPEk9ZJ95hULSm+p3fH7ooTkCe\\niESScyf0DweMVUrPsHjOEVq5h6e70e\\/sh5KbDXeerQ4SALn7\\/Dx9kWqOZ6hwhFZ5ge32ERco\\n5Dr5vHVCMOoTxPq+fXHwhCRc5j6uu74wRQnIE9EVhJZzOXMPfDsORYTxJ7THPWXcbtqXbQbi\\naUsCl1KXemAnIqdkVlTFQYHW\\/IPTDOe4\\/Sbo+dWr8H0n4eO6G7qtVO7idw+Psgdl25mWmJZ9\\nOdmaZcYeQTotp5BQtJ7lJURbdu8IypGbmJCdlJ6UcLU1JTUvNyzo3tzEs6h5lwcQUOISoWIO\\nkSaNDXERuqIvHDl2YS4uhtUe76Kc8w9Sa\\/5RJz7bWqANhJz9PYmVAgHXrB1SpPmtZ2RoA0FM\\nTVyWNeEq35ghm57InMOaupawVlyVVUPmsO6x1XXZuqW\\/RFAlRcPlAXmXiUq3\\/wAfJ\\/bfhdWF\\n8cTDGTIiflWpzRNkGYbcdp84QRoVOzUi5NLFybzIN8qkx9XcP1VmuUWl1hgWaqdOkp9sXvlR\\nOSzcylB\\/jNh3IobwUkHUEDuHCfEgWzOfMFbcC7XqrqkOCYAcbpsy8nZKmAlQVnJzA1W51kkJ\\nAymkoCkuh2OZytnJ\\/N6NV8DG7CWjhvAfEyqr8qplOZAkcMb2n9rNvUJtDRU1K2ncCW5iftNb\\neylac4mctksyrMlRVVLelHd1Epll6QGFt4aPGLNPRW7bui3pyjlhxaUTDtKcSlaFyEytt7yS\\nu25NolqpQ6g2lT8i9Kysww2F05Kl9ueRdt0axVIseTltBn0gPF13ZBiOedKnKPWMvaLwZMTC\\nwpRpVVyKVR2ibsTRXS2A8qZo7MlR+27ZrL12mvV6ntJRPS4Ls1kTb0khIE5ZIJsqwbngAQps\\nomikLYcWuBATkCfV2whGRelXo63forY53vgteIXMP23PbegV0MuMSl1WjUc5i27lkkkkJRUa\\neUonZdtx5FOq7FSpKnnHqe8uMdI6lnZOZp83MyM40pialH3ZeYZWLKbeZWULSeBsoEBQJSoe\\nkklJBPCjrTjDrjLyFNutLU24hQspC0EpUkjmCCOXKA7gT0Q3JzJPT4y9EKrOQy6fd4+MNnFa\\nqCec7h6fszhtA0vz+H64bhs4rWUTzcB2D1w3WczlzDwezvhQnIE9Hv5oQh5A1vy0Hj18YIIT\\nWeA9MKQgo5kn1dkep9JRUR+vh7BC0C5vbQfGE1ndl0\\/DwIQWch27u+FFnNR6t3j0wgs5nLo9\\n\\/j4xlJFgO\\/X2w7CSjkD17vX9kIKOQJ9XbCizmQOjf6T9nvhBZ4D0xkIFh46wQkTkCeiECeJP\\naYVWd2XT8PAhBZyB693j0QoC5A5m0OoFhfmberd8et0Ik5knpOcIE5knr9nNCyjkD7Obj4zh\\nCMgDcB3AQuCCCKEgAk8ACT2RkboIaOnNZ6BuHo4+3OGLxzUB0D374dE8Sesn3wwUdZRPSYWg\\na+A6+2HFEhIHdr6rQks8B6fHthus8B6e74wss5k9A4fH2w3V9Y+OG6MtIsB7YWkWA8I3b8gT\\nUn5LTlrEo1NIZarOAl\\/U2abIaKpthm5cP6wmXaLiVOBSZmlsTetLFDwbll5r8n8oSqXDjU1q\\n21TXE81cZQQrLiunz6gRuy4NqzyB4noiHFyGc5LMcoVY0vMO7N2oYf4nyUkjUcVt5lu1pioq\\nZzShSWj5JITbus7qN5tBoK2rjSFzLMamEmz2Hcz9BWpJwJOWRJlp5jI8+Wq6vIjLeOiI3tyk\\n1Tnk27UQhIUpvDdQmFemE2TJvys4vW99G2Sqx1VuF7gnpLYg+AumJUT6FddaToTo4xLm1huB\\nU8dPFRteIg\\/yiKRbco+iXUi4sOytSxrkkIySG1tz8rhU84pe7XC0KpjQbAUBquuayT5oTHws\\nBZNCmEnLzKm+gAfWKTLyqwTvO8kqyO7cObIxI2+ULNsLwt0bn1NNl9m\\/75ZbfKEKebZmLdo6\\n3m0Oka6G31ysut5AUA8WGVr1lNp1Y3mHSwabPo50zyVZ83nsNpA7c0H1jjEG8ktwu+TTglBu\\nPNZ7E7QBtoDjCtv6Wsct5ggXvrcjSwEY23ottCxAr9NNHXpfS1Gp7f8A+vvHGPvnjkg9ZA+P\\nuEMlHJJ7MvXuh0+fqp7SfcPjDRfADr8e+L4TvHjFOxLL+S+VMlrTZo7sy0UoXo7VGTkFKbDq\\nlOJxulalONIH07qEhqlMzCxrMsqXLA6i5hO0I69+TDzsojFXSyprjg8tm8P8Mp6Wl9VRLsrT\\n7juiXnHwdXUAYeqck2oKUFHylJSFZOahHZWypwrwJRQVEltVSb33NhVZwpBvewCVAAcE2toB\\nazcOHNSJYaeip9O8cZhxWvL6\\/s15xMSiJ18pOmplV7aJsiXnVScva2L00xLrWSwzMzdYsFuZ\\nfaQdyXX2pKUbeXv2iJVgf3oZyxYiU\\/KSpyWXiZoryCHkGaYsXE2bflwPPal5yv2qzKvngNR5\\nyQnUIB35y7ueecYW2c22c17W13KSPH\\/4zTzbv3Xt3X4XhnFJtRZnW11y48f2Q2bd+6\\/qvwiN\\nLB2QQRwwoXBEVRCjZ4j0\\/A+O2N63JFS7bVlYzzidbbTN02nKubyG9lJ0iqvM6qciQsqnnwtW\\nscxqH8HztEyTkQY3u8kesIw\\/xhzz\\/wDHG3uHPnRZn4b4598pgq\\/E9iMAn0pugpUBxH05IKAP\\ncFJSr1euLg2DgHadQrgEiXrBTfgTSJ1PwUR4ExJz0XmnP1PqqtSSgO3dUXG8wMnEJpFCaKkk\\ncfObUjeD9TgIgu8v0ojlQccW1rKtS2MGwgHPJKVYSWe6AAfqjNZOQ4KOXEZxOz0YE7TDNS94\\nzuKrDIjMZbKRIzG7f464ga8vZPOzfKo6Scq4hpKKRIYKU9lSCvN1t3AXDKrKW7rLVm4Hqo82\\nNQ5bJtoFOtrKV1RsJlEymwDZWAFWewrSHAon86Zacmlp0P1UqWoJ0uAkXJNyJvtgcK6hUQfz\\na8U2\\/tJeZQD42B9sYj4VhSLDoGYIJFSWAedK6vUFpPYpCgR0Ax2QDwI7Y67wyP8A3i2\\/1S0w\\nP\\/66aPxjsFBBGXQcj6d\\/xiKVb0qjUFcfPpsn1zDn2\\/GOZpi5ff8A7q4fas\\/Pj8YdjeAemF0n\\nMA+vthqg7suj3fp98LIO\\/Lp3jt8e6NUsXF+XX3+qGYdpOYHqMXQkg5HLp98KxjH0VX4Ho+\\/X\\nSGVCx7juhRB5ujeOzx74dMqyVkeCvfzevhDIHIg9Hj2wuDwI7RHixY35wmORScjn6D2QvDRC\\ntZIPPwPbDhBzGXRu9HN46oYWOPt+yCL4XBzAPr7YQi9ByOR4H3+PhzQ3BHItL1k9adx+B9Pw\\nhSGSFaqgebn7Ie8YZULHuO6GVCx7jugi5CihQPrHSItghlY4+35wpJuMp15eHL5fdHIA8CO0\\nGF0nMZ+uGDK\\/wSf8XP3eD2Q5Scj1c8MqTcd43QgixtDtB5j6O7x18IUhuDzj0QslWsOscYZj\\nyLwciD0QuN4B6YbxclWXZCFJvqN498IUm+o3j9eh+2HaVZ7jx98LIVluPDm6vshp2QslQV1E\\ncR8R1QyRcWPGBKr6cR74dQQkleQ3ndzHo+zxw4KwyQQfgeceqSD48\\/nCzburuVmU83SPsjaB\\nyd9puauIF8lklx1yl2fS3koCvOSDWKyyDnkdoXbfXkOGrvzz3auY34aClnmiYUYdSzreo\\/cE\\nzUbwqGaQEupnJt+ap7h1iSou0eSpKQr6qvNyzGUUh5QNa+iNnc6ylYS5VZyVkyL2V2DBXUpg\\ni2uVSZFLC9CCHwg\\/XEXZ5PdENV2iS00tGZuiU+dqJzC6e3dCKbLpP8cKnlPt8lMZgfRjZZT5\\nUSUjJygyylpZlg9am0JQpWfSpQKj0kw8hDM9J9ZgzPSfWY+YSkqUpSlKupRKlHmSbk+0no6f\\nRYCwAHAW9kLwQhmek+swZnpPrMJ7M8x10ejoQvBCGZ6T6zBmek+swdmeY66PR0IXghDM9J9Z\\ngzPSfWYOzPMddHo6ELwQhmek+swZnpPrMHZnmOuj0dCOxLVm7Wr9DuPC3EakU+4bCvqk1O3a\\n1SKywmapM5Tq7JPU2r0moy7uTS6RWZKZclZpJIQ2tzWUW0uuuJj96fvJ93HozXHP37hxTKpX\\nsA6zMh6RnG1zVVn8OZl9YH3PXNMubaccpW1WW7fuSaU6maaU3TavNqrDbc1VN4GZ6T6zHb1n\\nYly7NPete+ZBu4LXnZZynOommGp4pp77SmJiRnpOZS4xVKY4wotOyzyFrDKnG0mYZ1JZPfPk\\n2+UNh5mhyOyXavPil0mUeUMF45eSXW8OmYUCqj1zKkvKoqnSRKTis6KelaZeaXLU+Xl5qn0J\\nte2SMYzll1CQSUVNoFwBtKS6XLJSpxlCikPBxKU+cyuZHbFCXmiJkWchU5k8ST6YpElnSI5I\\nHCbFtM7fWi9eEhhvWZ0uzT1l1QzdUw6nJp1S3VJkHWS\\/cFjrW6v6SURKVulyzaGpSm0GlMpI\\njS\\/i9oE6WmCj80q7sG7qqdHllOKN02TKLve21y6Rn5W\\/P22J96kS6zuT8\\/ytKfJIDrLeYz7W\\nqOBK\\/IyzNRlWWq7RZtpExI13D7qavSpyVdGZqZamZQuAMOJIKHXEoaXcFtawUk8LVvCOIKA8\\n61PU1\\/IypSVvstuONJymx7QBAcl1A3BRMtsrFt0YiFSRzj3+6KFY5hn7Io8y7LOvMPsrl5hh\\nx1l5h1otOsutktOMvNugONONOJDbjTmakqJ3DLciVpHPn2eMoiCm1JNiDcEgggggjQg33G++\\n9rWiNAjjpw1PcD9v2woVk9Q6B38Yt7YT2h5h8e6LCSc8yevo7oAg8dPj11aElY4a+6FSsDhv\\nPjnhMqJ7OqLYIcCQN0eekruHx+fwggihIHGElKz3cB7+3uhYST4c+t8KCQO88\\/lyi9S8swOP\\nu+3x1QkTlmSe0mLVKCBmfQOcmGq3CvdwHMO+HQkDx5wqLnHdbzU\\/V5z0\\/ZCMEEewtKSdTu+P\\nXXMEJKVnuHDn6+zqgUvPcOHT0\\/ZCSlBPWTwHxPVDqU21O\\/gOX3w5oB3Dn7oopWWYHH3QiTkM\\nzzRUniT2mEVKz7IdSkk93E9cYb1WeQH3X15xQnMk9MUgihOQzh7dDg7t3Dwi1astw4n2CEVH\\nIZ+qKk5kk9vZ9kIKOZ6uaFJTc9w3\\/KPYoTxJ7SYYrUVqJ9Q6BCzy\\/wAEH\\/Gy93g9sN4eAubc\\n4cSLAqPQ+\\/h98ZK6O1yOW1eFnV1tagu2L\\/tqtI1SMw3J1WnzikHjm255O+FJUChYWtCkrSog\\nyy4h14cq86sI5tWQUN53HObByH7oEAkb8hkNbgJfdImXZylUybfIL0zT5KYeKU6qS7MS7Trp\\nSjPzUlThyA3jszEfP7yvJBDdew3NoAC3U1dhZA1KQ3R5lsepczME96r8Y+j2wudXObMcMrWb\\nqaYnZXUm4TJ1WflGhcjcGWWrAGw0SNxtzMO6VVJyj1KRqsg4Wp6QmWpqXXlmlLjeRKFjWSVt\\nLHmOtghLjS1ocIQsmONzPSfWYMz0n1mOR5CbnKZOStRkJl6Un5GZl52Sm5ZxTMxKTcq6h+Xm\\nWHUWW28w8hLrTiClSHEJUkgjS2nWkPIU26lK23ELbcbUApK0LGVaFg6FKkkpUDoQSDppGPnL\\nCaNdM0kdGCmaSlkUra4hYISEzVKsJVkGfqmGbzyjeVHmktJLj4sydQbskHZl0s06lSt2eTNF\\n6r5mIjE\\/XAqsSVRTcOHVcZYqFHuOnzjiZCcSl6UnUPSxkqzT35dalImGZ6nKKnWSgoW1Lvla\\niFhMQn9MvASa0YtJfFzBgtzApVr3O+9aL8ztFvTtkV9lmv2fNLmXd01MC3qjT5WpPtqcbFWl\\nqgzrbRl6Puxh\\/GrG2fZRgTbE0lhFYqcucL49Yl0pQ3L4yobSWH5gtp0ZTVpVtFRYaKiGJF+Q\\nbKlLUpR+eG2jB\\/4M4mecYQoSkysFtZBIU24kuSqyr85ZZSuXcV+c7KOKtdRjGNRzJPq8e2Gj\\nys1ZDgn38\\/q4euF1q1Uk8\\/AdsMieJPaYYA3AeEU118OvbCazwHp8eOaE4qTmSYpDh9FNuJ3\\/\\nAG\\/KCLVHIHr3ev7IQJyBPq7YUWczl0ePs9EN1nfl0cfHjjDjadwPietO4Q8kWHjrFh3ceaG5\\nPEntMKrO7Lp936fdDdZAGXSch6N\\/wjJAuQOcKhMnMk9MN1HMkwqo5JPXu8eiECcgT0Q\\/uj0d\\n3HS3z4Qks5qPVu8emEFnfl0fHwIV4QgTmczzwtA1vy+P6vjDw0AHIQk4eA9PwEJxUnMnrO73\\nCKRkIFzfl8erx7BCTxyRl+MQPVv+AhWGjys15dAy9J3nx1Q7Cki5Hdr7IbOnJB6TuHphkTkC\\neiHD6t4T0DP0n7B7fU1WdwHT7h49kPNjdpvPu6vCjqu3AW9g1N\\/hCRPEnrJhuTxJ7TCqzuy6\\nfHdCCjkD17vX9kZQ932e6HRqQOZEbXuRIeZb5R7BZp55ttyboWLTEuhRGbz6cKbwnC00MxrO\\nCXln3tUE\\/RNOHfllE1zGpofcPMOE5hmpU5aQABxdLROZB3BLq88ufoziERyLIB5TDRqBOWf6\\nsYHowAxVPPu4CJwGNqQmwp1RVwn6aOHTMp7eiG9p7KX\\/ACcdsalthYawXjApuSfSboXboJF7\\nEpWoKG8EgXBvrf2xhZS\\/Tk334mZFwP0m6eCLnXUaWtb4xE\\/+UEqB0c8EcuP6tbm7\\/wDkW5\\/R\\nEYzDlZMtVEZDJL0urnzJUh0EE55fgDLIZ8YlFcv9T5Z7ROwpq6lL8rkNIi36c0AsBoy1Vw1x\\nPmpnXQU5qcDtGlQ0rWSEJ2u5QcSURb8OFnZ1pIIyQZFYy3nNSZ0Hq\\/ATl6YpbyOFJX5ONKQA\\nc0viDELa7i1lKrHbC3MZH0a8yRbSMbbugpx3U1G1nJGlLTbfYSrTZvyOZtXPS3O0dhuHNauo\\n5erd74br49mQ+PxhXthuTmSek5x0QjefDr4RSMSaPkx+R0h9JbdwwYtzj+\\/eU74I+T+TMFSt\\nLrHhOsSlWjnOqI1lAEpxNw9CSoD8JIUoAg5DWUMt8Edh7JVXwPTABufqI3\\/\\/AFzx+0+zmYsj\\nDP7lo1Gjz3vKT7r+4+ETZIiCfKRzljzo4kcRhJcR9V5PRL7iIF8pGbWMdNHBwoWlpeE9ztoc\\nyVqFbV4rU42le5KlNpeaK0j6m1bz+uIxNtP\\/AEd1n+70rhcaVWT3\\/DXiYRir9x3e56X\\/ANYO\\ntdIjlgggEcCAR2RWEWVZpKTxSd3YeHx7NwhaOHIqoixI5QRvu5JhllGEeJswEp27uIzEu45v\\n1nGZa2aQ4w2TvGq25NPlGXO8odMaEY3y8krOIcwtxTp4SQuVxAkZwrzzSpE7bkkwhsJ4hTZp\\n6lLO4\\/Soz4Rz35TiVfijrZTfKmpUJS7G3oGqMJ1HFPaKRpwVlNtLi5tgRSNpdJzWJMlVwi4u\\nc30c+dORyBWvK41vYyftFz+1gf3x1b\\/81IxAk5eL9tb0qf8AzHf+rfg\\/E9rRb\\/tYq\\/fJVv8A\\n8zIRAh5eRZHKu6VXD\\/8Agd7dG\\/B8x1vsVWn\\/AN3\\/AGSC9yMJYfv4iQVcdfbEu2vfulVP\\/uBz\\n\\/VTUYw4cJS3ZduoTmAqQ195z85x95xW\\/mBUpWQz3ApHZ94g5KHXu9f2x8Hh6SbKtwncfm5Hs\\nccj7kHMDrG\\/3GIPUNZ6evrebmb8\\/25evjHND5BfePDtV\\/wD9j8fdDpJyIPr7IXByOfRDVJzA\\nPRuPb9vGHCDmOzd3RrCN4PrhqHQOe8du7m7soXBzAPr7YaIPEenx454XQrI5cx98Yzid44jU\\ndeHvhKhcd41HXWtoVhRB5ujeOzx74TioORzHNCB6SbcRb7vlDMPWVZKyPBXv5vXwh2DkQfX2\\nRxoOYz6Yetr107+I3H4H0w34wQ8ghNB5vV3QpDBFjaCFknMdY4+PHPDtlf4B\\/wCLx385Hojj\\n0nIj1QuDwIPWDCVC4tx3jr1x4oXFvZ4xyEEWIXrpz5+BEXwwRwI9RhnUHkRBDxteuN\\/1hx6+\\nv0wziqVFJBHN7R0emGFCx7uEOGyxpvHR9XL9ccklWW48PdCwJBzENEqCxmPSOcGFkK5iew\\/C\\nGlp4j1\\/P5w1DsEEZj9EVhAEg+8dMLAgjPm93bDcEKJVluPD3ePHWr2Q3i4KI6x0QhSL6jfx7\\n\\/vhCk31Gh5dcYeJVrbuf39kKJVq7ub3dkNQc94hRK+Y+vvhojeD64EqvodD7Oj3fqjk5SWfn\\nZmWk5VtT0zNzDUtLNp+s6++6lpltP7pbi0pHWRzxKEwEt5mhyUjSJcAydq2xR7fk9VASEtS0\\ntLyUuQEgBIEtTlpA4aqjxAOccvAGhG48Z8N6XqqcR91VOqT6Bv2ktQlKrkyhQy+oqXpzqHMt\\n+yKsiCARJuwjZWihTk2UpCpuorbSciCWZVloJJVmM\\/pXphOruKSnoV5nG3lYVYol6DSELt2c\\nrNTi0ggFRnZliWaURv8ARbkZsJNhotd+IHYPkt0sCXxNWlJv2s1I05pRGqRJsOzcwhKje4Wq\\ndlVKBvbs07t57bghHaL6E+s90G0X0J9Z7o4Zse72j5x2Bm7h\\/jJ+fj0dFoIR2i+hPrPdBtF9\\nCfWe6Cx7vaPnBm7h\\/jJ+fj0dFoIR2i+hPrPdBtF9CfWe6Cx7vaPnBm7h\\/jJ+fj0dFoIR2i+h\\nPrPdBtF9CfWe6Cx7vaPnBm7h\\/jJ+fj0dFoIR2i+hPrPdBtF9CfWe6Cx7vaPnBm7h\\/jJ+fj0d\\nFoIR2i+hPrPdBtF9CfWe6Cx7vaPnBm7h\\/jJ+fj0dOSptVqlGmm5ykz83T5lIH08pMOMLUnMq\\nKF6igl1oqAJbcDiFZDXR09u0THe66eEt1aVkK40lIBW80ZCdUUncfKJQeTEFOesVSa1rVkQr\\nIEOdIbRfQn1nug2i+hPrPdFlYE2w7UNmTmfAmOK\\/hxkudsunyk921HeeJBLsxRJ0TVHmXNLB\\ncxIuqAJF7FV9RUaJSKuLVKnSs0qwSHVoSl9KRb0UTDakPITodEOJG7QR31cN24E4jIyxOwYt\\n261KbCHE3Fa1oXq2UltbOqV3DJNrcbDa1tZFkEtOLSGsiUK6nqWjhyddwuOO1LACw5FUw282\\n5812jNW8hKX1uFezZtdco1LugOa7T0qltyWSGwy4ylplLfzu0X0J9Z7oNovoT6z3R0lTfL82\\n6yyEisyOzbFzoQhHnGIsFyoeVlPpFX0FO0Rq7mucJaSm59BKRpEEntkGCJ9ZW7IOpzG5Adl5\\nga23meYm1G1jYk33XJuYp\\/Yacmd\\/gXpX+fYnf\\/HoeSeiRya9N2\\/k+CFsvbfVKxOS18VRX0Rc\\nI2AqtSmhLqO1OuGlMpdzbDueyaDTTaL6E+s90G0X0J9Z7o2g\\/wDaC7VxqnZ3sOSbEBSMF1hK\\nk3Frg\\/hcddBvBHMRrE7C8AJIKZFwEW1DNHBtYAgH6LuLgEb93ebj6aS0dOTtpjbol9HzD57a\\naqlpnrIXVVnUz1EsqqqprYE62\\/ZLaSvPNzMcHbOCnJ9y7zMwjRqw0Wtl1t0JewwtyYaK21ha\\nQ9LzDbsu+2VJyWy+26w6n6N1tTfH47aL6E+s90G0X0J9Z7oxnP8A2gG2NWXJhLY+wE3JDOC5\\nmyibanta+6QRbTKUjXUGwtko2LYFbACZJ0AWtb6PTl3E2ySSRvud1zpcx2a5hvoGIQpwaLuD\\nDq0jMNowEwv11noTtKM0gKPMFuITvOZTDP7gNBP8k3CT8xOD\\/wD1SOvtovoT6z3QbRfQn1nu\\njBmfL323vqSpql7MZMJTYolsESq0rN75lmcnppebh6K0pt+bvMZKNkGCUiypJ5e6xU7Lgj6u\\ngyMIFtDvBPfy7KRhxoGOISteizgwwpWtm29gNhYpadUqA1i1SHmzrAFQ1VqyTlnkc8uDfwQ5\\nPiZdemF6NGGaVzDrjqwzhfbks2FOr11JaYl22WGWtZWSGWG2mGmxs2m0t5AfI7RfQn1nug2i\\n+hPrPdGQjy\\/dtSUIQvD2yd5SEpSXXMFELcUkAFxYbrDbYWsjMoNtoRmJyISmwCFbHMEL+tJv\\nEXuElcooJ3aJzyqiLAWBJJ4k3OnOTujVyc1TW2\\/M6PdhsLQ0EluSs+YpaMt6vpWaY5KS7rms\\nrIuLS4rIHz9QZDgJvQy5MmqPvOTOClvsKmEFDnkj+JdNYb1WQ2NkxSaww3LqKUnNyVaQ6XlF\\n0HbBTov2i+hPrPdBtF9CfWe6M5v\\/ANoNtbFu3wFsTmwCklMxgyrWJTe9+wxWwr0wSFWUD+iU\\nxhubD8BufWk3r8TkpKjwsfTpq9QLgE3795j5KZ5ODkvquGVSdizdFDanELEpiLjGyX1L2QBe\\nTcNyTq0IaIOzcYEu2ouOB1b5Q2Gfh6hyRXJ41dookb0xCoS1tPsh+QxOoiXErcT5kzlcdtVR\\ngOy+4sBTZllnJDzLwzQO5dovoT6z3QbRfQn1nujcSn\\/tA8RBKU1PYhsYmiQA4qn0qr0vMPRC\\nuzz1aoKaJANjnWQTe5I11cx5P2Bnr5G3G77v2PTtPq2\\/aJaXva3C1+7MYxbq3IaaL1UI+43S\\nCxOkUrUyppVVn8PLpBQttSCCulUG2dcvTGo4y4nLUaSWS08tW2Z6luLkAp0suP2dpQSc0op1\\npaTuLCpyUaUoMqyK6vSr\\/qCih2ZS2jzaONgw7rfrl1gtO5\\/bRfQn1nuhzLT89JKUqTm5qUWs\\nAqXKvPMKOSSlJUtot55ayzmQfrkDKJPJeXtgaYLbdf8AJxp2Te9M0HaLVZBaFAH0m5RVCWFp\\nJ0DTk6hCb5ypSkpSdBNeTXhl0KUxOhtV7pSZaYTa+UD0mKmhI3b+xN+CdTGnS6+Qm0rKTtHb\\nXv3BO7pdBybl1V27aBV3lALUjVlJ+z36WgKSloErrvmvO5ZbFsvRjFePJN6e1o7V9zA565JF\\npWombs+8bFuBTh2rjadnSpe40XAQoNof2qqOhptt1naqae2rLUkuSv8Avenq1pW668kEZBC6\\nnNTLYG4EiWmlvMhW4cG9YIJGeRUT9bI444jSQG0q8vUGxkA3PU2QXuGtnmuVZlHzr62RC3ip\\nOp5moc8prTfLD8mWqlLdYwVtZwk66rV2kzWHsQSMvYCwWueqEvOqQq2UhuSdczFPpBN1Jis9\\n5MSrKMjVGTYWSDMutEk2scjsjMpNt1u3Rccb2iGTfejtj9hqHjiFglixZTLKdo5N3Nh9ddHk\\nS1r7IOt1CdpTMm8xtU7PbsvrYLoLW0JjpZxeoN31jw6uv0RPTp+khX2UoFWt2lThSfrSU3N0\\n5at3\\/wBn+c06xy\\/BSkFRy1ABu+Ou+S0S8YxMIxa0f7FuGbmwS9Va7YFp1yfbcOWs6xX25Vu4\\nZR88PKJJbD6m9dvajPUXZFG2r+TDirs0UXbhL0Gccy2kMc4arFDS2XD6CXq06y1Rk5QCHFtz\\nDqQbKUUJUkmB1Pyd8XyWZcskzSEn0Q2lh\\/NYA\\/8AV5lb+twADKC+trnSIKMES+725J7k5cWQ\\nV2a9c2E1UmUubJNlX1PMIenFawbLlCxNl7qZLKVgByVozdNbcYRlLOMLWH4wHxe5ArFejtTV\\nTwPxos6\\/pUJXMS9BvmlT1jVpTef0UnJ1amO3VRKnNLTwmpxNsyi9\\/wCxDLO1JLZ\\/UK1JGqYO\\nrOFsfUsBKvpDBmIqbWpcNrTnQfyTyFLUpNlZGQ6TmGXMAoitKvs\\/xXSFlubpjoKb3SlK0OG2\\n+zEyiXmFa6WS0dd+ljGkjDgedWF8wEgnPeRmVTZOfQU5DMcSCOqJfNHl3JWkUyVeTqvy9Pkp\\nd5IUFBLsvLNNOBK05oUAtB1VJ3Ky9MRw6Boj42YJ4xWJhNjVYU\\/ZdwXheVBRIomJmn1Wl1Wg\\nuVaTkpuq0uuUGcqNKqMpKpMy9Nok512ZkUJHlMu06622ZJO0X0J9Z7o+ZHliKdlsT0KjzUu7\\nKT0j9KuTUrMtrYmGM7VIl2gtl0IcRnVKvmyk6gAi4sT3XsRp71N2a4al5hC2ni1PTDjbici0\\nGaq0\\/NISpKyChSWnkJUkgKBFlAEkBaCEdovoT6z3RRSyhK1rWEoSCoqUUBKEJGZWsngE5ZE8\\nMzzcI43ynhr4G9+7S+vyPKLbzd3sIPLTTjv8bez6G16y5btx0attKOdOn5eYdCciXJZK9Sba\\n3HM7aUU+0TrJIC88juA1RfKCcHGJS68CNIGlyrezuSh1jC65ZploNpcnKFMG6LQmH3EnUmJi\\ndka1dDCXXMn0SdFlGtZ5lplErkvinpiYKYWIflX7gVd1ea2jYoVmoYq60vhsqSmcqxdaokmE\\nLybmkKqLk9LnW1ac8pKmzgtp7cpjoy6Veh+3gVXqsLA0jbSvSw7os2wKlPN3K5d66I1ULbqk\\n1S6tRZMLpE7L2hcFbrU6xddOt2VdaZdk6JUa1OK2B+o3kKztXk8FbXsEYik5yQpNalaTjDCL\\nk8w6w09WqI3MJrIlEODMV1CmsUxKH+zQy83JqZDy3Fttxzr5Q1DE\\/hpuqNhHaSKHEvrLjaVh\\nKXGpiXsFKSpVimabyoCiBMXA0JjQk8rNWQ4J9\\/P6uHrhqtX4PpPw8d8Xk5AnohEnM5nnjpRA\\nub8B8evsjhOKRQnIE+rtisJLOZy5h7\\/Hxj36yu4de\\/v4eFoUkXPcNT8vXFhOWZ6N\\/phuTxJ7\\nTCizwHp8eOaEVnIdu7vjJQLC\\/P4dfZD0JKOZJ9XZCCjmezd9sKqOQz9A7fs4w3UcgT6u2H0D\\nefV17oISWczlzDwYRWeA9Pj2wpwhAnMk9MOQtAub20Hsv1r4wms7sunx3Qgo5A9e71\\/ZCijm\\nezdCCzmcuj3+PjDyRYeOph3rr74sgggjIQLDx1gihIAJPAAk9kMCcySefMn3mHTysk6vOSPU\\nN\\/vyhi6rVSek7h8YUNSBzhxNgCo+HXr+ENVHWUT0n2c3shus5nqG4fH0wqTkM+iECcsz0b\\/T\\nGW2La8hYddb4EDefV8DCKzmeyEFneB0e\\/wDRl64VJ4k9phuTxPaYd9W\\/TrrjD6BrfkPf1eNo\\nvItKH\\/dNdGdPQMZSe06P+KvDsA9vDdnE4vG1KTh3VlZAak3SlI38FGoyyCcufzXFHxnEG\\/kV\\nVa3Kb6NSuvGTL0aP+KuXsAicZjg4E4eVJGrmHZ2lt555Efr9lzjkedsJzzSRrHsjK2hFtPk4\\n7aQ4pIBwRjnQjN6asKkNW039rksSLJJBO68XvsbuZmmW3\\/hRLf4oTTr6btANd+njEVrl9v7j\\nrDf\\/ACl7N\\/mtxliK9hyck1oc5NN9Q8vJ9uUSn+X2\\/uPMN\\/8AKVs3+a7GaIr2HX\\/74\\/8Awf8A\\n\\/p0UJ5Ggt5O0uOWJq9\\/vCVhzb4k\\/hvNq0t9F0nx+paOylHIHr3ev7IbqO49mXwhZZ4D0+PHP\\nDdZ4D0+PbHR6BYeOvwiiYkg\\/Jlv7rvHb\\/Jwnv5zsO4Ip8mWP\\/wC15jsOf+xvnj\\/\\/AHOw7gjs\\nDZJ\\/SPTf74qH+2PRY+GP3LT\\/AHd74pibJESv5SqrLEPROHMqzcVR6RW7Ky95iWpETv5S5SnG\\nLm0P64XkFqoUPG+lIYCFBbLlIqGFk448VHzCl5NeZQgAkgy7mYAKQWdsqSrZ1Xt9gukk24D6\\nZp4v7SB649xQD9CzRHBUuT3AzDQ+JA9cRhm1aqweY7j2H7coexxqTrJB45j9MP21ayAecbj2\\n\\/bxPbHC8VUsblDjv+yL43pckrvw\\/xdPTeFB\\/0NMRotjd9yR844u08apApSGpa4LNnEKTntFL\\nnaZXWnEqyOrqJTINFPm6wU6rhuihfKXbK9j+IyNzc3QVKPca7T0DxOZSRbvJi3tgygnafQQf\\nzmKykaX1+h55XwSYlOaK7qDhi6EqCi3c9WS4EqCihXktNc1VD8E6ikLyOXmrB5wYggcvxJy0\\npyp+kNMM64cqlFwVnpsqVrAvt4I4e01Jb46ifJadKgp\\/3wLP4UTrtE3+11W94\\/8AHWo8SBl\\/\\nuFbe7ed\\/T6Yg0fKDKdMSXKgYwTL2psqxZWDlRk9RRUoS7WGtu0lW2SUpKXPK6XNZJzUNiWFa\\n3nBKen9gkz51sC2XFQSkt4XpjISDcgSodlQo7tVpbBULfnEa2vE32woCajUrG967nPMdpLTC\\n\\/YCq3fGFuG7odsi3VDMBMkpG\\/cTsph9onsKkEjqKTH3aDxHT493ujrzDQ5WRbx\\/+dpj\\/APzZ\\nqOwAeBHaIi1RAFQnwNwnZoDwD645lmBZ53kXF9\\/5xvv+7lDpByO\\/gd3p5vHXzQ4Scj1cDDRJ\\nChmIXQSob+I49\\/YfR2Rr1jj7euuEMw6B4EdohcHMZ9O+GqDmMuce7x8IWQcjlzH3wwsXF+XR\\ngh2k5jP0Hti6EUqyPUeMLRjH0VX4Ho+\\/WGVixvwPRi9CuY8\\/Dq\\/T7+2HCFaigebgez7IaQsk\\n5j2GPFj84bjv+fr63wmOSB4EdRHvhdJzA9UMGV\\/gH0HP2d2UOkq1T1c\\/f6IaUm47xughaL0K\\n5jz8Or9Pv7YsghmCHaFlBz5ucdIh4CCARwMcalWe7nHthw05qnInzT7D09nTCFJvqN43jroj\\n1Qhab6jfx74dwQcYIZIBFvfyhsGxvF6FlBzG\\/PiOno9UPAQoAg5gwwi9Cyg9XOPHPDJBBsYc\\nIChcb+tD39bo5JKs9x483X29cKAkH3jphqFAgKB3dPR3ZQqlXMePMent8fa0pHEez5de7c1D\\nsEEZiKwgCQcxCwUD29ENwRcFEcPVCwUDw9UIQZkcDlCVJB7j1vhJSD3H9Xhe0ZlaEVJVUcZz\\nUijXTbtqVyppWsKyQ9NrkaI2lJBCdopqrP5Be4tJd4kRI1w9ljK2fRUFOSn5Z2bUd+8zUw9N\\nIUcwP7062lIHABP1t6o0JaA9P1Z3EmuuN5hmVtujy68\\/reVvVWcnEhRVrILfkciSC0Q7rjJw\\nFsxIJpLK5Kl02T3p8kp8nK5HPd5PLttZZKCVbij8JIMfOzypagZjGypS4KZNiQlk2PBuRTOq\\nSADuSuqKJHBV9b3j6AeTnTvNdnknMBOU1Gdqc8rhmPnZp6SeOqKakgnemx3ERysEI66\\/xlfx\\nj3wa6\\/xlfxj3xy5p3+z7\\/Ho6X92Z5jro9HRaCEddf4yv4x74Ndf4yv4x74NO\\/wBn3+PR0OzP\\nMddHo6LQQjrr\\/GV\\/GPfBrr\\/GV\\/GPfBp3+z7\\/AB6Oh2Z5jro9HRaCEddf4yv4x74Ndf4yv4x7\\n4NO\\/2ff49HQ7M8x10ejotBCOuv8AGV\\/GPfBrr\\/GV\\/GPfBp3+z7\\/Ho6HZnmOuj0dFoIR11\\/jK\\n\\/jHvg11\\/jK\\/jHvg07\\/Z9\\/j0dDszzHXR6Oi0EI66\\/xlfxj3wa6\\/xlfxj3wad\\/s+\\/x6Oh2Z5jr\\no9HRaCEddf4yv4x74Ndf4yv4x74NO\\/2ff49HQ7M8x10ejotBCOuv8ZX8Y98Guv8AGV\\/GPfBp\\n3+z7\\/Ho6HZnmOuj0dFoIR11\\/jK\\/jHvg11\\/jK\\/jHvg07\\/AGff49HQ7M8x10ejotBCOuv8ZX8Y\\n98Guv8ZX8Y98Gnf7Pv8AHo6HZnmOuj0dFoIR11\\/jK\\/jHvg11\\/jK\\/jHvg07\\/Z9\\/j0dDszzHXR\\n6Oi0EI66\\/wAZX8Y98Guv8ZX8Y98Gnf7Pv8ejodmeY66PR0WghHXX+Mr+Me+DXX+Mr+Me+DTv\\n9n3+PR0OzPMddHo6LQQjrr\\/GV\\/GPfBrr\\/GV\\/GPfBp3+z7\\/Ho6HZnmOuj0dFoIR11\\/jK\\/jHvg\\n11\\/jK\\/jHvg07\\/Z9\\/j0dDszzHXR6Oi0EI66\\/xlfxj3wa6\\/wAZX8Y98Gnf7Pv8ejodmeY66PR0\\nWj6Ki3bc9tqQaLXalINtqK0y7Ey4ZJZUStW0kndpJOZlRWA6w4kHNROeZj5fXX+Mr+Me+DXX\\n+Mr+Me+NtRq7WcOz7VUoFXqlDqbFixUaPPzVMn2CFJXdmcknmJhshSUqBQ4n0kJVvAKWnpVi\\nZbUzMsMTLK\\/rNPtIdbV4ocSpBFiRqndyvH0mI9alcWRY07fNBptRuLDa4J64LRuRlpUrPScx\\nVaDUbfq0rMsJ2krMSs7KzzU0W2USqW6hSaTOpQp2TaKuCSNcHI5DtyOfo5x8eeENdf4yv4x7\\n4qlxaTmFHPr3+\\/fG8xttAxjtHqkrW8cYgn8SVmUpsrSG6pU1NOz65CTU6uXbmppDSH555tT7\\noM5OuTE44gobcmFttNIbYkaZJ01jzany7crL9ot4MtFQaQ45YuFpBulpKlDN2beVsKJUlIKl\\nRjXj\\/pGUrBAGXnpWmMLTQ2q9NV+46tLUa2qPJPzk9TWnahMOus65RMSLgdSuYp7QQtlKJrXW\\noJjkaZnLAWZU3FW\\/bN6VnFV2WE41N0Gynnbfw78pC0Jbana4prYVthIQ6qXnpCUuppSXFak4\\nEKjepymfJwW1yjuAlNptrViXs\\/SBwtZnJzDav1Gbm5O2qwuaUhc5aV8syUrPOzNv1ZLIXSay\\nzIzVTtSsKXNyaXpGdrtMrMO9egQrB+8K5Z2Nyao9e1pVN6l161UtvUemSU5LKSdVb6Fmo1OT\\nmWFNTUhPyz8jKT9PmWZuXbmJZ5h5f0Y8mnYpsRVhai45xFWXsQVxxhMwuiyMoGkodUmygJtT\\n0y6pLRUuXdVKv0VcvNsusOlS0XcoHartVxJhGYVISlNap0s4eyYqziFTzz7qUhSktNLQ3Jyr\\nqU3IRNCZDrQDrarEpR0hfmlvpHY6zzlCtl2dt6mPbUIt7DuUnmZpUq6Q2VVOuIVMVhaNnrIf\\nUicp1Nd13FOSjeWqORwh0bb5pN00S97sqsnRX6XUm6p81tuGsVaec85UwzPTbLyZKWMyl1aH\\nH25upOqK3AthBKVHNmkW\\/QrZkkUu3aRTaLIoAPk1NlGJRtShmNd3ZJSXnlaxLj7ynHnFFS1r\\nJJUp+o5D2COxnMXStPkHaNhGgUzDlLebUw72Mu05NzKFpLa1PulASta0KUFLeEy8L3ExfWOR\\na9jWtYgeW9PTcxNOLCkl2ceVMuBCwAUNJUexYbI07JpsJSLBJFosWrmHNx6\\/0e\\/siyCCIWTl\\nASN56v4n3eyIfFqjkOvm8dUIE5Ano3xepWZ6hwhBauYc3Hr\\/AEe\\/shxtO4es\\/KHkiw7zv+UW\\nE8Se0wgo6xz9Q6oUWchlzn3ePjCCyUjdxPDv7B6eyMgC9gIVCazmd3AbvTz+OrnhBZ4Do8e7\\n3woo5An1dsIE8Se0w+BYAcoPffd7v1RYs7sun3ePjCCjqjrPDv8ARF5OZJ6YRWczl0ePs9EL\\nSLnw1h5IsAOO8+74aCEycgT0Qh1+nfz98KLO\\/Idp9\\/s4\\/ohOH0i5A9vhCoIIITdVqoPSdw9P\\n2Q\\/Bvhs4rWWSOA3DsHfxhi8rNWXMnd6TxhypWqkq6B7eb2wxJ4k9pMLQNb8vj+qHFaBKR1w9\\n+sWLO7Lp4+PHCG6zuy6fhlChOZJhuo5kn0DsjLSLC3rPjCwLADlFizuPSfB8dcNXTkg9J3D0\\n8f0c8LLOZy6N3p5\\/HVDN5WashwHv54cSLqHIWPw+33Q79VHer7fu98bTuRQYed5TDRxcbacc\\nblGcY35lSEkpYZVgNidKh10jclCpmZl2M1f3x5pGZ1om\\/Y7qBw8nss91SpXAf\\/PIyyHblxy6\\nIhOchzmeUhwc3KIRbOLRWQCdUHDC6U6yuhIJSO0gc+6azj28pFgOpRq6r1XpragrPPUBfd3A\\nqTv1mkZnzt3AZ5Qjai6iX8nPa8FGwewZi0Wtc5nqL5ugC1tCoJJPeTF97F0Xmaad5GJWlcAL\\nJbp6jr4C\\/uiKZy\\/VWfa0X8IqKEtmXnceqbUnHTrB1DtIw8v6UYbQcwgNuorcwp4KSpZW21qq\\nSAsLi+4dEH54yIP\\/AMj+H\\/39EmL5QFPyyMBsDKY4sibmsX6jPMt6jmqqWkLNqsvNLLhzQNR2\\npyqQlStZwrUpG9C8ozGHJyFa6\\/m4evy\\/4RTnkfMhvycqOoIKPOK3iB0qIP5QivKZz677BkN3\\nFhdsjeDGPt2dKsdVRJVcNyVJbCRb0P2JLuEbt5LhVY6jMDuIjssnMk9fs5obqOZJhZRyB6eH\\nRv8Ashso6qSege3m9sdCAbgO4RSA1IHOJJvyZOQfd0q9IOrJLfkslo\\/IpzoUVbXyip4jWfMy\\n+ohKTrNhukzW0VrAJUWQAdfzCOd+TDtPnH\\/SamENOlhrB612HZhKCWG3n71acZaddyUhLzyJ\\neYW0hR13US76h+xLgjsDZQAMEUw2Or9RPE\\/9ffHxSPYe+LLw0CKYi3F506219JIvr3pHrB74\\nmgRFp+Uv07aUbQ3qu2CTJVPHumiX2ee1+dZXB+ZLxdCwG9h80BvZbFzaeU620bDIDspaIy\\/y\\nlOnIXhJovVkyzi3ZHEe\\/aamcBdLMuiq2xRpp2WcUk7DaziqQy4yHk7Yok3djm35QYd2rtJe2\\nfYkQoXAl5NwC5HpM1OSeSbgjUKbBG8G1iCkkExKCaLOgb\\/2OfZNsHv4CIj7CuKT2j4+M4esq\\n1VZcyvfzevh6uiOLSdUgjmh8CFAEHjwPOPtjg1Ysb8+vv9cVQnUFJ3jdfh9un3RyMbnuSNnH\\nfI8fJHJAaYmMMplKgk66nJtm\\/WXULzUU7NCJJrZ5JQQpSw4peaCjS82vXTnz8D2jjG3nklZ4\\nM3PjVTi8sGaoFmTolQpzUeEhUK+yZhaB9HrS3ziGUKUddCZpep5q1g0l5RDPb7HcYpAClIRR\\nHk3BNuxxJR3FHT\\/s0rFzoL3Ogi0tiLoZ2oYXKty3KqyRcC5eodTaSNf46k2A1JAA1tEsDRGf\\nSuyrkRrAuIuhRUkHglykU9KFHdlkpba+wt8OGUKz5RpSnKdyklanFPNuIr2C+FVWaSkKSWGm\\nZasUItO55hS1PUZ1\\/WT5uzfSk+elcTPdEB8roN5saoAarFNeCtbPPbyb6dTLVBBQJbPW1vO1\\nj2mIV8pso7FN0+MNKjKybrQr+itYk5OzajMqZnanJYoYy0tZbW6tbKHZalSVHaelpUNobTsH\\n3mttNKffvLybJkP7A9nISU2RSZlkgXuPN6xUWbekb6Fogm1iRp6JBNnbZWj9I1Ym90VOTc1O\\npDkmkaAaE3dNr2043jVFhSsqsGg5kkgVNOZOZyFYqASM95yCQEgcwGr0x2Mg83RwjqrCB1Js\\ninpBObU1Um1g7gFGcddyHAnzFpOsOnVy5z2kDkcxzQzWU5KtUhwM9NKGlvrPLV9undY8Y5fm\\nUntnwRY9qs\\/+Yn4aX+Ih0g5HLmPvhZKsiOgnI+33GGoOYzHPC6VZjrHGNaRfQxh+3Tf3cPuh\\n2DkQeiFxv4c8NEHPd0cOz7IWQrmPPw6v0+\\/thgixI5QQ7Scx1jj3wuhWYy5x7oZpORz9cLg5\\nbxGOtHDgd3d18OMeEXFocRUEg+8dMWg5jPwIrDST+Yr3\\/D7QfZwhgi2hhwDwI7Qesd0PG164\\n35aw4j4+mOOQrLceHuPd46YXSooOY9PWOiEKFj3cIOvCORQcvN5ubu8fGFR7\\/G+GqSFAKHD2\\nj7YXQrPcePvHf46YaWniPX8\\/n1Yi8HLeIWScx7\\/HRCMKtNuPOttMIcdddcS0000kuOPOuKCW\\n2220gqcccPmoSj65y4ZCEAFRAAJJNgBqSTwtxMEOmnMvNUd3MTzdXZDmMi8PNDHSwxWbYesT\\nR5xZrMlMqDbFYds2r0S3nVq1VajdyXBL0qhqKUrStwfOI2TbrRczDqIzdsXkUdOG6gybio2G\\n+Gjaxmo3pf8AKVF5DYSlWWxw\\/kr4CnVZ6jbanWwHEnbOstfSxuJfCuI54BcpRKm6g69r5m82\\nwRcJ0fdShq+Y2Izk7ydxtnMUWqzllSlOnX0qt6aJZ0t62se0yBsAg3upYBGsal4IkOWlyAtx\\nrS0\\/iBpJ0OlqQkKmZGzsPJ6uJWrUO0bbrFaue3tkhpwtqS6uhPF5tA1mZdR+iyBofIpaHVsB\\npy+MX8Urim0LyWybpsa1qY8EKbJT5A1a87VwvNC0kt1oENOK8wOtpdjJnsF1amMGZrbtJoUu\\nkgF+rVeQlWkhQTZanA+4kI9ICxIXpqgHLeRSGzzFs8pIZphTmvYLeZUo25tsreeSe5TYPiDE\\nWVCyg9IPEeOeHaVBQzHq5x2xLvpHJ0cmraDTW2w++6mcQR+va3e+JlaW4EoAUlyTpNdk6GSt\\naS5rLp6DtF\\/ROIZySO16TgZoJ2eEfMOjdhbOOtOJW0\\/OYY23XZ1taH3Xg6zPXZLzM42tK3Cp\\nLiXkObPYtZlDLTTNe1XFWzKhh5NV2s7O232bFctJ4kp9RmADbQy8s8qYC9bhHYkkC4JBiaSW\\nwnG87kUuWQwlf5wl6gvfpqXJNho24kPWA56RC+SvLcfX48fD7Wh4eYgXKGzbVi3ncAd2WxNE\\ntit1baCYb2jGz8hkpjaB1sFxnUz2je9rhumq0u5sKLWQ2LMwqt6gFks7EUi3rbt9LWxQtLWy\\n+apMlvYhRQ3s\\/wBibccyz\\/Y45GYxmmHUlLNvstAEEbWouPZZJPHUkmM9+fOMk7gRlFeVLbxs\\nMpi1I\\/GE3PrCbpTT6DX3gpaR9UPM02ZlxqQPScTmBuLakSqS8mrEbwSqZqBZBPpJTKSosOYU\\n7VEL1\\/uJt7oh80PRB0qbhDS6do6YzFp7YbKansObppEm8iZCti6zO1emyMq4yrUzW+h4tM\\/R\\nKdWgOtZ9uUTk29NeuhLkvgfU5Bg7Mrert0WHQi0h0qGuuVq10Ss8rU1SXG2pRyYbAz2Q105y\\njnsWLgdBS3I0hpO472ZxxYyG86xnEpyJ\\/c7uBJG+OFmMQ7nfBSJqXZSSAQzJyxzy\\/wDtzbx3\\n+zcIryp+VPsxls4p6cRVJQBKCxSm2wV3NiUzs5InLuuFKSdVaAkCJXJeTAxdJnatOkEgrDb8\\noyeF7ESU7bjpryCtxjT1o8aLGK+jtQ26RitbsrSalel4Sy5T5uqUjW5QSqJenSbUpNT9Nfm5\\nJE9tVTizJp1lKYKHUrmApxDO1WHlVrFRrsumVqrwn5dL8rNIZeZYKETMm8mZlH0JQ2jUel3m\\n0OtrTqqSoZkfVjjtc9A9vfHE21bGMhjzE71cpjM+yxMlTzjVQbl2nm3nG2GlIQmWmZpBZS3L\\ntltSnM4T6Cgoozr6UwZhlnCNBkqFLr7SXkGgywsuFxxaO0cdK3V9kyCtTjy1HK2lOugF7BWC\\nEtc9A9vfBrnoHt74rHs18j117j3XlcKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74N\\nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R6\\n69x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrn\\noHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vf\\nB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rk\\nKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74N\\nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R6\\n69x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkclTKjM\\n0qdanZVWTjavOQpRCHm1EFxl0J+shYTw5j54yWAqMJOUx0LpPSQwoTj1hZSEvYw4d0eYXVqX\\nIMJXPX5Z1PcdmZ6ivNNALm7mtltb9Rt7V15qpyRm6Kw3OLmqKiXzJ1z0D298fd2HdBoNTEvN\\nLIplQWhqY11ZNyzxISzOZfghJyameGcuoE7RTTYjpLyc9qpwHitukVp4owxiBQk3lurIbpNQ\\nmFsCXqAuClEs6401LT5JQhtotTalASmVyAbRMGyeMKBNyTzQW6lvOhSUgu3bCihbRIP7IYUe\\n1ZOuchTCgpDyhEFEniSesmECST7h0Rtx5WfQ5Ro\\/4tMYtWJSjKYSYy1CemyxKtKEhaOIv0s9\\nXLeQlDZYk6dXWQ7cVtsbQeam4KZJSzEjQWDGo2PqTlCAFHUKSlaTwKVgKTbhcgi+uhuL6Ex8\\n2qzSZqh1Obpc4mz8o6WyoAhDqCApt5u+pbebUlxBOuVVlAKBAIsWrIZc590XE5DPwYQJz3mE\\npBJzH1dd3R0jXITfU8N3efui1RyHsEIndx5oqo5nP1QitXMObj1\\/o9\\/ZGUkWHeerQ7FpOZJ6\\nYQUcz1Dh3+OqL1nLd08ez7YQUrIdZ4Q8hPE+r59fbBFizmcuYe+EFnm6eMXk5DM80Ik5nM88\\nOQtAub8B8etfuixSshu48B8TCBOQJ6N8XqVmd3AeM4QWrmHp7ej0eOEPJFh3nU9da3h3rq8W\\nHeSemCCCH0Cwvz+HX2QQQ0eVrKyHBO7088OHF6iSefgO08IYk5AqPWT1wuFoGt+A+P6obvq3\\nhI7T283shqs5DLp3ejn8dcKElRJPEnOG6jmSfQOyMltO7u1Pj17hAn0lX5a\\/LruixR1R1nh3\\n+iECcgTCizmcujx9nohBZ4Do3+mH4eSLkD2+EJKOqkk8w\\/R6zDAniT1k++HD6uCR2n4eM4aL\\nOQy6fd4+MPNp3d593VzC1ekoJ5dH2Rud5BOUmZrlB7emGGS41T8LMTZydUFIHk8q5TpGQS6d\\nYgkGbnpVgBvWXm8DkEhRExzSFmFNWPIoQAoTFyyDK8wcggU+qzA1d4yIWyjmPmbhnnkYjvye\\nWlIqGnNeM4XlNGhaOF+VZCAgL8oU9feFdCLRVrp2QSmsmZ1xr+cwGtX6TWTLP0jnAi1qEypR\\nBXX0LCd+8NU6dSVEjdmkujLn85WecRrbrNmV8nDaaUqyZ6BNy5sqyimbm5KUUgai4Wl4tkW9\\nJJKQdY6K2Ks3mqSd+esvOgGxA7NhvcBu1ZvruIvuiJF8oKqLKMO9GymlDnlE3euIM+2tISWU\\ns02h25LPIcVtAvaKcqkuWgG1DVQ9rrQUoS5HKw7A2NVOW8uSgJy35BMwQD1ZqPr7IkC\\/KFKj\\nqymiZS0LaKHpjG6ovtbvKG1SzeE0vKLyCjqNO+VziAVI+kWxmlX0S84\\/2Hgyk6krLLOYZSVE\\nbiA0o5Z8N2sT1Z58YiPkoMdh5NWC1ZSnzmYxM9bNe4TjOtMjSwsLMWGpuAFcYj225WbH2Ihv\\nyJo6Ab8PoemLO7fYm1juOnCPv1ngOjf6fHvho+rcE9O89g4evf6ocE5knp8D1QwWrWUT15Ds\\nHCLwQLm\\/L4xTqBc34Ae\\/q9olW\\/Jd6dNvXxpjVNDC1SMnamC0hMTIUkJZm6lV8SZiSlyNdKyq\\nYZpc+sFKSgeSq1yCWtYj7z5LfTi3R9Nurh4LE7VNHmm+T7MDZfNUrjVMl7bKcIWX\\/njZloNo\\nLXkwVtHdsUskdjbL2i3geiZx6SxPuWOU2C6nOlNrbgUZTbeL2IBFhZmH9KTLEE+kp8nhqJh1\\nP\\/6xLNiPF8pApIf0QMGq5tlpVTtJOh0lMvs8w6ms4YYozZeU5rgoVL\\/MKGw2EK2gmSSpGyyV\\nIdjRz8oLpLlR5P8AXOJLpFAxsw2qzuyZU6jUflLooQ8oWCEy7JerLR2yxq7ctMf3\\/MZm0Rjz\\njA+J272tSJl7cT\\/QwExbQjf2VuNr3sbZS5XBmpM+LX\\/IE77fVUlV\\/Va9uNuUQckHdkeI932c\\nDDthXFJ7R8fGcMAcjn4MOEnIhQ7RHAbieVtd3cR174qBXoqChuO\\/7fb8bxyjKtVWXMr383r4\\nerojalyUlQLeMGI9M128pvDQzxQR9Mr5tuihMa6MlD6JHzoUu5jctxnnzz1TJIUARwPs6j1g\\nxsf5L+qiT0j56WLqW1VnDO6KZqFC1l4tVW2qyUJWMwz5tJ2u1OokJaWjW2ikINTbapbzrZVj\\nhqxOWiOzFrE28zfYmySLE+iGSe4jeN8WDsqfTLbRsIOk5QurtM375ltyXG8j6xeAsNTe2pNo\\nl6aHE0NriDLFSiC3bD6Uk5NJKFXA24cickqcLjWeSTrJRvB1G8ou3yomjlnSd0bbh1ZnKqYD\\nVSjaykAShNCxCr8+Uy7oQAuZSLkT5W3tFbJpUkSlG11nJM2h\\/MAXRd0nmQX6DKTIGsCnKVqS\\nWiVJ4lZ8rySrV8zzt+axEf8A+VQW6luo6E92MiZUqakcfrcniVteSMJp7+EFTpQaa1A+JmZN\\nSrG2dLrzGylJZKUMKClTEv8AJLnA\\/sKwgwCFGUmMSyxJvmSTieqzYBBF9G3xa17JItpoLy20\\nsET9Xc3AfRT\\/ACB\\/ISkv6vS0PffTUWjoYLvbSzSnNJDNXnmxluIzblXslc+ebxy4eaU9ZV28\\ng5jLnHujozA18fc5VGd30dbcdOROsNvISSQT0DNg6u7eQvfxju8HIg9ES6vt5avUE8TMKWP\\/\\nAOQJX78326mOUJoWmHe9ZPtsft3+uHSDkcun3\\/bCyTkc\\/QeyGw38OeFknMdfPGijDWPzvbv6\\nHLhwh0Dzg7+I8dBhcEEZj9HVDRB5vV3QslWR38D7IQtNxcbx74bh4lWY6xxhVCuY+ju8c\\/bD\\nUEg5+CPAhYHMZ9MMkXFuhBDtKtU9R4wtDVKsxv4jx47OuFkK5j6Ixlp3\\/pDlx64ceEIUm+o3\\n\\/Hr7oUhVCsxkePMero6z3QlG\\/HkirJ0Vqla1XvfGHA23cTrxpV9zNDl63cyJm4WKHJmnUKoU\\nx9iy61OuWXOtB6bmFpn5ilJrkrMSbymZtxotNRr56t4coqZSZxVXJfDdHfnpeQfrc5LzcxJS\\nDk0FhhycEky860w66hLBfUhLDTjraph1hnO8je4XwxUsW1QUilBpU4Zd6aS24vKpxuXCVPJZ\\nFj2jwbUXEtXSVpQoA5rA6msFNFjSM0hZpuXwXwbvm\\/WFuhhyt0ujOytqyjwd2BbqF41Y0+1K\\nY5tNZITUKzKn6N4nMMOlG3fBnkCdIC6RJVLGrFCxcJqe8EOzNGt1ibxHu6XAzU5JTaJeYt+0\\n5Z9wgMtzchdFel2NpttjNbIS7sgiq6Ri5KUapViWvIUSmybLcpImdQ2RKyzadm0zKUim+TSM\\nkhhtIDbIfnJdtAAS2E7o6Vr2Il63NtBWLiqcwwoKC5Nl3yKQUCo5pVIyKZeVWMvMBW0tQRu1\\ngDlFe4r8qryaMDlcvQ0Yt2wVdnTNIMKwnhRbrZstCqhUEt1dSVLvkelJCpSzqU3Q4pBTn6Lw\\n75Nk++G3q3NIl0GxU2656djY3EtKLUbjcoOVBlQvYoSoG2P1hckTyemDqWHsRahcmLlblW0u\\nzDd6XlMy0l5UATtJe1cPW6C+ZY7i3JVaYrLbhzDrrwIjMWzZrRewSQlnBTA+0LVdYaW2ioWt\\nZVt2pMzSXG1oX5XWmpU16bW8nJt56eQ+6prNCysANx0VBHO+Iv8A2gO0p3tGNn+DMA7OpUk9\\njMylJOIK+gHQB6qVQpp8yQkJupdDSpa05lEpOQXXRNiGC6QEKW07NuptdQQ3KoURbXM0FTl7\\n3IvOqtrbXU5E1PSPuh85Uui0enNkZEzHlVReB3Zarm0kmd2\\/MKllnrH4XwFRxdxCqeuHrknG\\nEK1hqU9uVpuoFE7kOSUvLvDVGQSsuqWOO0zzjrWCOdsTeUdt2xgp013arjNxt6\\/bStMq72H5\\nB26UpKXKdh\\/6MkVN5UizRl+zBJUE5lKJsGTwnhmRCfNqNIJUm2Vx6XTNOptaxDs0XnAeagq5\\ntv0F+Wna3VqmB85VKoT5Cgc52emZs5\\/jHyhxfnDLm3b+aON2nV7fshOCKcm5ybqD6pmfmpme\\nmV2zzE4+7NPrtuCnn1uOKA4AqNuEb9tthpIQ22ltA3JQkISN17JTYcybDn3XU2nV7fsg2nV7\\nfshOCMaw5D2CHPQ5H3\\/Pqx7rqbTq9v2QbTq9v2QnBBYch7BB6HI+\\/wCfVj3XU2nV7fsg2nV7\\nfshOCCw5D2CD0OR9\\/wA+rHuuptOr2\\/ZBtOr2\\/ZCcEFhyHsEHocj7\\/n1Y911Np1e37INp1e37\\nITggsOQ9gg9Dkff8+rHuuptOr2\\/ZBtOr2\\/ZCcEFhyHsEHocj7\\/n1Y911Np1e37INp1e37ITg\\ngsOQ9gg9Dkff8+rHuuptOr2\\/ZBtOr2\\/ZCcEFhyHsEHocj7\\/n1Y911Np1e37INp1e37ITggsO\\nQ9gg9Dkff8+rHuuptOr2\\/ZBtOr2\\/ZCcEFhyHsEHocj7\\/AJ9WPddTadXt+yDadXt+yE4ILDkP\\nYIPQ5H3\\/AD6se66m06vb9kG06vb9kJwQWHIewQehyPv+fVj3XU2nV7fsg2nV7fshOCCw5D2C\\nD0OR9\\/z6se66m06vb9kG06vb9kJwQWHIewQehyPv+fVj3XU2nV7fsg2nV7fshOCCw5D2CD0O\\nR9\\/z6se66m06vb9kG06vb9kJwQWHIewQehyPv+fVj3XU2nV7fsg2nV7fshOCCw5D2CD0OR9\\/\\nz6se66m06vb9kG06vb9kJwQWHIewQehyPv8An1Y911Np1e37INp1e37ITggsOQ9gg9Dkff8A\\nPqx7rqbTq9v2QbTq9v2QnBBYch7BB6HI+\\/59WPddTadXt+yDadXt+yE4ILDkPYIPQ5H3\\/Pqx\\n7rqbTq9v2QbTq9v2QnBBYch7BB6HI+\\/59WPddTadXt+yDadXt+yE4ILDkPYIPQ5H3\\/Pqx7rq\\nbTq9v2QbTq9v2QnBBYch7BB6HI+\\/59WPdfnsU8Jbb0tdHW\\/sDbqLLVSnaUoW7WJlBcdoVxyA\\nXN2dcrakNqdKaZVWW5apsy+T8\\/RlTsg88lNVd1oSt5WlcOH92XJY930x+i3RaNcqluXDSprU\\nLtPrFGnXZGflVOIU424GpplwImGnHWJhGo8w4604hcTcLSr6rbr0nUtYiWK\\/Jp9KcvpJJ9QT\\nMbuBLeSJhtI3qdZSMt5jRvy3WjaizcULQ0k7alCLcxcYRbN6LYbHk8piBblMb+aZ1x1IQ2lV\\n12lKDydlG0W5N2jWp+ZdKp1Gf1T8mraIrHuzxqm1B7tcQ4LMvR55SyVPzdLU2TRp9wkqU4pc\\nuy7JvLWorcmJCZmnSO3STxr5Q+CUy62sSyTQAFxMZB\\/1d10BwEWF\\/NZt1CkgDKlicUCSlmw0\\nWqVrHqHCEFq5h6e7xz9kXqVkN3E+PHb1QgTkCeiOgUJG+2g3fPrjHKoFtBFFKyHWeEIEgDM\\/\\np6ouJJOfgDwYQUrM7uA9sPpFz3ceu+CLSecnfxPjoEIKOZz9A7IvWeb190IqOQ6+aHo9AJNh\\nx665RYs5nLo9\\/wBkIrOQy5z7ovO7jzQgTmSemFoFzfgPj1r+uHgLADlFqjkM\\/QO2EOv07+fv\\ni5RzPUPGcWw8kXNvWfCPYIIITcXqpPSdw+J9Hvyh+DfCDytZWQ4J3dp5+OXPu9GecMn1cEjt\\nPw8ZwspQSCTzD1no7TDIkqOZ5zx5oWgXN+A+PX2Q4r0QEjjv+fr+yLFnIdZ3Dxz9EIKOQJ9X\\nj2xco5kn0DshFZzOXR4+z0RlpFh46mFpFgB7fGLCQASeaG5PEnrJ98KLPAek+PHNDV5WQCRx\\nO89gz9\\/whYFyB6\\/Vvh1PopKj0Pv+FobKUVKJPOfZzCG6jmSfQOyFVnIHr3Q3UcgT6B2xltp9\\n+g5cIEDeeen3xIk+TiU3baTWPNaCmv8Ac7ApmlaqkEvK+d8QbUnCptz8FtHzFk8gfsiiwr+9\\nZRJ20lZlCabacqFpG2n6m+EZZKUJaXkmtcEZAJSZoJOYOeuCNwyiO\\/8AJq6AHq\\/pe3QshHzf\\nSMFaCyFSmttzWZ7E+oTJanSsbPyX5hlBMSiG3A\\/5ZLvOLa2DQfkA6S72tN2hL62eylqy7qZE\\nZB9dNbJ1ufMy+9OWQ1cj9ciKv8p+dMl5N2OEosFvt0OTAvYqE1jCjNO8QT+xy5awIuAVDLmj\\np\\/YfL5pmgk\\/VW\\/VX9Nf2tmcQDx\\/PbA13b+RMNn5QNU9tino7UfZAeQ2BelSEwXM9p863DS5T\\nY7LZjZ+TGjFeuXnNt5SU6jZa1ndJ1hAikTasxkuorTlvz8yWliSebLzwB6Y2w8vXV2ZnSxw0\\npLC2HFUvAC3nphTT4dcZmajiBiOvyWYbSCZdxErKSs2hDh13GZ5twpShSFK1QWIkihqURltJ\\n19We7M5IZRmcufzMuwDKNz5PMp5l5O2zVm2XtKS7NWNwT5\\/WKlPhWpV9YP5t9rHQJTZIrja4\\n72uOMTqve1RbZvp\\/UJaXZtoBqOysRvFiCTqT9g6rVSek7h8YZE5DPohZ5WasuZPv8c8NnDze\\nk\\/AcYtJtO4c9T4fq98VikWA79YmafJgaItrAjSiuHZSwTVMW7PoomEZCdcVQLOdnlNTCtQKM\\nq0LlQuSSXVhLr08UtNZlTpHcHyaKiJp+gniZWC1KCauDSgvZzylrdMrp9Nw0wikJWVm1qbSS\\nJeeRVpmXaQt1ptueU5r7V5xDZHZ+AGyzg7D6FCxVJdqBqLh59x1J9YcB8DyJtZ1EQE0qTF96\\nFq0t+e6tR4jio37x4kSKI1PctrQEV7k0tIhSW1uzVBdwsr8mNsGUtrkcYbBl551wEBLyW6TN\\nVJaGj5zjpaLZ2gbEbYYwP5Te2FXdyf2lxSkMl3yPBO8Ln1A205kLKlBei3Sl86mTCaCp8uJB\\ndQGi7LjbJaz2uKGBNYaxDLkXD9EqrWls35SRfSCm4IuCQRobKA0MP1FHaU+fQBcqk5kJFr3U\\nWV5bd97R5yqTmM\\/Qe2FkHm6N47PHvhqk5HqPHx454XBIOfPHzzULgjq\\/WkU2RcEc4esryOqe\\nB4dvjxwjOLk8an836WOHTBc2bVXkr1pjh2obQo\\/cTXqgw2sHc6XJqnsNtMneuYW1qHWyScFw\\neBG4+484jJrRBqxpOkxgrOBeoXb6pdJJAaJ\\/3c21EKcns0HaJqGrmn6UZ5sfTakQbaFJefYF\\nxpJgAmawriBhNx9V1dKmw2rdoUuZT4iJDgqaMljHCk0bgS2JKK8rXehFSlVLT4FII9d++Jn+\\niZNbDE+daJA8ttKqywzQokhNQo84dXIhKCfJd6nCRqncNcojUl8qPtryvR\\/0Xrx2ST8w4xXZ\\nbJdLTpW2brsn502aXh9ChDosorW05k46plC2c0sPxs70ap8yeMVrNqWQ3PM12SdyWvLJdEqD\\nzQyT9bOZYZA1gW0D6TzSkRiT8pPtxVc5O6jVQIKhZukZhpcaj9KNRMzbGItnhRDWaMyq6gjO\\nZKWfPISTMFlK4v5GE+H9lrkoCCqQxfWZRXAgPSNKnRodCCmdOU23hSd4IjqrbVL5np1Sr\\/la\\nTJvi1iLsza+AtY3YGbiN9uEQssCXs5S5JfP9imKY9llw27c6jPPnJ8nG7my64yBQcxlzj3eP\\nhGM+Bb+rU6\\/LZ73ZGUf1czwYmHG9bLhu8pHHeM\\/N54yTBIOYi6cToKK1Nm2iwwoeuXaB\\/wDM\\nD0I45nxaad5HIR60J+28O0K5jz8Or9Pv7YWByIPRDUEEAj09R6IXSrPjxHtiOLTxHr+cYR79\\nx068et+joHnHohZJzHWOPfDRKstx4e6FgcjmPT1w3DJBBsd3A8OucO0K\\/BPHm7Oj0eOaFkqy\\n48PG+GgOYBB48DC6VZjrHHv9MNLTxHHf3fr+PjHkO+GRB8ePGULAgj3johohXMT2H4QqDkc4\\naUm47xu+UEPEqz3Hjzdf6I26clZdKmapi5Zi1kmakrWumRQVj6L5tmKnSqm4GzvWXTU6ONpv\\nDewyOe0GWoUHPeP0fbHaGEmMd84G3pTcQrBdQ5VaZm1UKDNTJlKXeFCcdadqVq1d8MzJl5Wq\\nJZa8nqKZWZcotUZp1aZlZl2nIl3a+2mYSmMbYHxDhqTUwieqMswqRVMr7FkTslOS89LpcdII\\nZS87LJYW6oZEJdUpz8nmtMtnmIGMKY0oVemisScrMuNzvZpzrTKzks9JvrCNM\\/ZImC9lBzEt\\n+hdeW0x5maS6y06lIIcabdGR3ariEqBG791l19MX7f8Acfyv6sY0aOGkHYuPmHFvYgWNUlzl\\nvVxL0uZSeS0zXLXuGSdMtWrQuiRZmJn5sr1EnguVn5NTzzQc1JuVmZylzcjOO5Hx8f61RqhQ\\nanO0mqSr8lPyEy9KzUrMtqafl35dxTTzLza7KQ604kocQdUqSfzbKP03kJyUqUoxOyjrcxLz\\nDTbzTzS+0Q626hK0OIUkkFDiVBSVDQpN+dnG3\\/cfyv6sG3\\/cfyv6sN4I1VvD2jrj8eRjNyp5\\nH39cfjyMONv+4\\/lf1YNv+4\\/lf1Y1I8pHfekPo94f3XjFgxO3Jc8hQ2WbouC1nLmuKTlpC0pN\\nfk92VOk\\/NEyiaZVbj0zIVuoMg+QSlsmpzR2CKavW0BU3l1dIyXUr5xt1yeRqJSymXxEuaSUn\\nLW1i6uYlKkp0kauqMm1A6ylKXrDV6c2b+SptC2sYZTirBM5QqnICYMnMsOVGVk52UnENsurl\\nn5eamGloWlDySFmzTgCuzcUUrSmD4h2hYVwtUEU2tzM1KTDjCJltQkZt9lbK1LSlaHWG3AoZ\\n21oUEglKhYgb4m17f9x\\/K\\/qwbf8Acfyv6sQ77e5fnEFhxsVvD665dCG0MqckcRaXXlKSEec6\\nGKtYtPSHNdCNUmacdKFKC5krTqOZMWXy\\/wBY824yi6ZXEGkOFQ2y6pY1oVOngZFfmzFtVuVq\\nLmSmywrOlt\\/sqF+d56mttVfIp2\\/UtKlnCrc4lIJIkJ6VqDp\\/tWqe5OKUbcLg3sLXJtjyu1HZ\\n5OKCWsTSaDp\\/RUvUpIXNtM85JsI3m2iuF92sSeNv+4\\/lf1YNv+4\\/lf1Y0r4f8tFo2Xg5KsuY\\nl4dMOOuMpcbuBN0YbqaWshJD09eMk3S21JzzdfbmFSaNVThdLaddOd9j6YmF18yaZ+jzLFXk\\nCpKDU7TrlCu6loWtOskLnadOsjJad6dm04pQGerq5mKZxFsc2mYUJ+n8HVumJBtmnJF+UuTu\\nCUTSGHVXuLWb1vpcWvMafU6RV\\/3JqtKqm\\/Sn1KUnCLAFV0sPLWCkG5BSLD62Xhlzt\\/3H8r+r\\nBt\\/3H8r+rHW9KxUsGrhKZe5JKWdUP2KpbalrSokAJCp5thha8+GzdcB5+G77xp+XmEJel3Gn\\nmVjNDjLqHW1j8ZDiMwsdnbwivZiRm5RQTNSszLKJsEvsONHS24LSm43kEXBA9mwU0pH121I\\/\\ntgU37he1\\/dDzb\\/uP5X9WDb\\/uP5X9WG8EYtvD2jrj8eRjzKnkff1x+PIw42\\/7j+V\\/Vg2\\/7j+V\\n\\/VhvBBbw9o64\\/HkYMqeR9\\/XH48jDjb\\/uP5X9WDb\\/ALj+V\\/VhvBBbw9o64\\/HkYMqeR9\\/XH48j\\nDjb\\/ALj+V\\/Vg2\\/7j+V\\/VhvBBbw9o64\\/HkYMqeR9\\/XH48jDjb\\/uP5X9WDb\\/uP5X9WG8EFvD2j\\nrj8eRgyp5H39cfjyMONv+4\\/lf1YNv+4\\/lf1YbwQW8PaOuPx5GDKnkff1x+PIw42\\/7j+V\\/Vg2\\n\\/wC4\\/lf1YbwQW8PaOuPx5GDKnkff1x+PIw42\\/wC4\\/lf1YNv+4\\/lf1YbwQW8PaOuPx5GDKnkf\\nf1x+PIw42\\/7j+V\\/Vg2\\/7j+V\\/VhvBBbw9o64\\/HkYMqeR9\\/XH48jDjb\\/uP5X9WDb\\/uP5X9WG8E\\nFvD2jrj8eRgyp5H39cfjyMONv+4\\/lf1YNv8AuP5X9WG8EFvD2jrj8eRgyp5H39cfjyMONv8A\\nuP5X9WDb\\/uP5X9WG8EFvD2jrj8eRgyp5H39cfjyMONv+4\\/lf1YNv+4\\/lf1YbwQW8PaOuPx5G\\nDKnkff1x+PIw42\\/7j+V\\/Vg2\\/7j+V\\/VhvBBbw9o64\\/HkYMqeR9\\/XH48jDjb\\/uP5X9WDb\\/ALj+\\nV\\/VhvBBbw9o64\\/HkYMqeR9\\/XH48jDjb\\/ALj+V\\/Vg2\\/7j+V\\/VhvBBbw9o64\\/HkYMqeR9\\/XH48\\njDjb\\/uP5X9WDb\\/uP5X9WG8EFvD2jrj8eRgyp5H39cfjyMONv+4\\/lf1YNv+4\\/lf1YbwQW8PaO\\nuPx5GDKnkff1x+PIw42\\/7j+V\\/Vg2\\/wC4\\/lf1YbwQW8PaOuPx5GDKnkff1x+PIw42\\/wC4\\/lf1\\nYNv+4\\/lf1YbwQW8PaOuPx5GDKnkff1x+PIw42\\/7j+V\\/Vg2\\/7j+V\\/VhvBBbw9o64\\/HkYMqeR9\\n\\/XH48jDjb\\/uP5X9WDb\\/uP5X9WG8EFvD2jrj8eRgyp5H39cfjyMONv+4\\/lf1YS0jMIWtKzQ8x\\nOwoEsicu+Qoq6jZRWWjMN3jaw+e7ODDrhUJZNWXLrtaZfOS\\/m2fqaf75usjtLCStKp10IkVq\\nIl60wuTWkkBKJllJmJRagogkkoclkp5zMgc27oDyacarwdtTozTzpRS8U\\/8AyzUUlX5PPUXG\\nxS3lA+ilTdVTKNKdVYty0xNDMErWDD8dUOWruGqlJvN5wJd1eX84tFpSJlKb3NzLrcUm2odQ\\n2RqkWghOocZcW08hbTra1NutuoLbrbqDqLQtteRQtBGTjZ4b93PDRSs+HDxvjYFynuBwwH0x\\nsUKPT5MylsX7NtYr2mEMeTS\\/zbfD01O1aVlGhrNNyVKu+XuWjSaGFFpErT2NVqX3yzWvlSsh\\n1nh3+iPq2pBQrL32G7UcCQN1xr3a6aR8xahJPU2enKfMCz0lMvSzmlgVNLKCtOp9FYSFJIJB\\nSQQSCDFq1fgjjz9nR6fHPCKjkOs8O+Kk5ZkwiTmcz6OqHALC0YcUJ4k+mECcyT0xcpWe4cPf\\nCSlZcOJ9kKAubDjDqU2F+J+EWLVzDm49f6Pf2Qis5DLnPu8fGLiQASfR1nohAkk5mHgLAAfr\\nML6MHjx7YIIIfSLDvO\\/5QQQycVrqzHAbh8T6TvhZ5eQ1RxPHqH2+7thm4vUSTz83bCt8OIAA\\nKjw3fd8IQeXmdUcBx7fHjjDdZyGXOfd498XZ857TCBOZzjKbTu5DjzPXy5R4kZiVHh8eHs+U\\nWKOQ6+bx1QgTkCeiL1KzO7gPGcILVnu6OPWfs4Q914w8kXNvb4RYTxJ6yffDFSipRJ8CF3l5\\nDVHE8ezx1e2GizkOsw62n2n4da+FoUo3ISOHs6HzhNRzPVzQgs5nLo9\\/jKL1HIE+gdsIKISC\\nTwAz+ztPNGc2m2vLQfOHALC3KJcnybmgFjB3SZugJH+6+Jtl0DW2mtrG2rXqFRKdgfqan3Vh\\nRd\\/vxXq7wwY2\\/wCkjNa93UaSBURLW83MHJwZJXNVCfSQUcEK2cs0pX4S0rSPxSNevyeeiGk6\\nCty1JSSFXTpDX\\/WkrU4y4FNStoYcW2lLaW0hbbSXqA6A1MKccDheeSdk+0lOc2kBNh7EabaQ\\nvMyFLpMqoayTqFTHlgSAN4zE2F5L87JX+9lGfO\\/lkz6pTYaqUzBAqeI8OyZA\\/qgbMzVAjUaH\\n9gB05bK9A+llJB662HywCqTvIapc7M8rF94gnwHnBSPEHSwtBs5aqufOmnZdkgVLItqwMOKI\\nlK20NhtMxQvujKULQdZ5GvX3FbRzJwLKm8g02gxgPZoDduyaxq\\/SOTa9wIJPlTre\\/hmr6M+j\\nVjJDlSri+6fT50jKiFIUJa5rct3Jtp1pI+5SwrStdQ2by3FF0LpCi84khl58uvMobadQgY6W\\n4nUoFKb\\/APnbacRn9KtboO7IcF5DiQDv84xe+zKQNM2LbK5BScriME4SW8mwGV52gSszMAgW\\nue3eWCd5PpEAm0UFj98TWLMTPJOZDmI6uUKJvdpE9Mpb9qAkcgN2kcwTxJ7SYQJJOfPnn3Qo\\ns7gOc8fX+gegw2dVqpPSdw+MSpA489B4dfCIXHoCfJ8LcdonJp4fVVxlaW7zxJxbuRhTksWU\\nvNSl3TNnl1p1Ot5Y3trTea8pOWo609J5ZyqjBHf3Ix20q1eTF0SabslMGasq5bjCC2+gFN5Y\\nkXreAd2cwoKPlHz4JgOpGydDoXLfrZTUEdvYWY83w1h9k2Km6NTQq27OZNlS7X4ZybeqLSpi\\nQinSIGl5VhRB5rbStXvUY2hR0bpJ2wb10dMfLObl0zC7uwVxSthEu55MpD5rtkV2lBhaZtSJ\\nUpdM1s1pmlJlsjk8S1rZd5Q0eZbmG1svoQ6y8hbbrTiEuNrbcSpK23EFKkrStKylSVApWCSB\\nlujcvtB5l1lX1XW1tq0uLLSUm+h4E\\/DlGW4gONuNk2C0KQTyCgUm3tjyqQrMAjdzHt5\\/YYWQ\\ncxlzj3R9BfVuOWVfV52e+laXrVuy4rZmEr2gcS7QqxN0twL2zMu6VpVKZL2suw6CfpGGl5tj\\n5sHI59Hj3R84X2VMOraXbO2tbawNQFtqKVWOlxmBtoNIpM7zpbuOtu6HSDkcuY++OysJa4ba\\nxUw0uIKDZod\\/2bWgtRQEtmmXHTZ0LUp5DjISjYaxLiFN\\/joWgZR1iDmM+mHku8ttaHG1raeZ\\nUlxtxtakOIUhQWlxC0nWStCgClSclJVvHMY1s\\/KInZSalXLFublnpZwEX9B9tTStP7VR5e0w\\nth5crMy803o5LPtPpIuCFMuJcSRbUEKSDfhbjE3HBufNOxUsCYz1de56XIk5KPm1N9NNUPNW\\nnIKE3v8AwBuKkrQCk8ny59ot3fyXOk6ymXLs7bsphrd8g4lTx8lXb+LliTlTmNm060h5JoHz\\nwwoP7VlpL5mdgX2GFDpnDq62ZtFiXikpSzNJte50FGeolp9MjVEqQFbYaoQvcCXQAd5Ud0bC\\neUKstvEHQT0wbSU2t56o6N+MUzTW0thalVui2LW65QAUGUnVqbFaptPLglpZU3qJPkim5rYL\\nRzf5Fs+tikYzo7tgum4lpc461ey21T0quUWSBf6\\/0SUDSxKFAmO5NrTCZqVl5luxTOUWebaW\\nRdKgEB1tXqEyFcxcHSPNIwWmg1d0w1rHKao041q78ituYk5gHLLIqCWlgFWQyUoJOZIOVvV4\\nEYY4VzAl77ohUfNeM9LqyG\\/6WnzYbGZUADtg2Qd5UNZASogRmdHWuL2QiqJOtnZRpdzzC3W9\\nPAIHttHD9TTaZB\\/SbSfYVJ\\/\\/AFEXJOR6j4zhcEggg7+OfjphtCiFcx9HdEPIsSDGvh2CCMxC\\nyVZ7jx9\\/2w0SrVPUeMLA8CO0QypOU9x3QkgEWO\\/gePXOHSVZHfwPjOFgSCCD9o7oapVrDrHG\\nFUqy3Hh7oTDViDbcR1p9nPhDwHMZwslWe48ff+iGYJB946YWBByIPeD3wypNj3Hd8o8h2lWX\\nZziFgeBB7IapVrbuf3wolRSernHjnhpSb6jf8euu4jtPATSbunQ2xLexLpstUK\\/hDdz9NlMd\\n7Dklhx5UlKI8kkMT7YYU24EXVako4WapJs7Bm6aAw1T59xh6nyFTpssXCzFO0sT7Rtm7rQuC\\nn3Pa120eRrlq3JTXi5I1mkzzW2l3ElxLTzUwlILb0tMtMTcvMIek51hicl3mUw7FJQ4hSFpS\\n404lSFoWkLQtCwUrSpCgUqSpJIUkggg6qs47F0PdMCs6AuIzNn3euo1XRJxLuFhbxS7Ozkzg\\nbdlQfPlFboks2Xyq2JtSlT1ao8qx5VMSrK52lpdrVNdlLj58267CWdqdMexBhmWCNoNIlATJ\\nspSleMKXJtBKZRP1c+IaZLthNOJuqqSDaaUbzEpS0Ho7YltYXht9rDNdmCaK+4RIzDqjanOu\\nKBU2VG+WTcXdSx9VhalPpCUl8OzIdcdB9nfBrjoPs746\\/sm96Nd1EpNWpNWkK1TqzT5Sq0Wt\\n0qbl5+lV2lT0uiZp9Tpk\\/KuLlpqWmZVxmZYfl3HGZlh5L7KlJUsJ+12yfGfdHy8mZF6Uecl3\\n2ltvNLU24haVIUlSDYgpWEqBBBCgQCk3SQFCw7mZdbfbS62oKQsBSSCCCCARYgkEEEEEEggg\\ng2McXc9vUe6KTOUis02TqslOSc5JzEjUJZqalJuTqEo7I1CQm5d5K2piTqElMTEnNyz6FsPs\\nuFLiFlIyh06Y\\/JiYWYBYqTFPpMpdkvYF0pfrNlTYrKnUtSwcQmp0CZmJyTmCuft6beTL5pdU\\n45TJmlzsyRMzTjTEyrbJ8Z90Yv6UejvS9IrDqpWcFS0lcTe2rNmViYbGVLumTln3JZl97VLj\\ndKrSAaZVtRLxbl5hU40y9NSkoEX\\/AOTxtmrGyPFWVNWnpDC9eLMpX2mHnAy0ltThlKmWkE3c\\nprjzriilC1qlHp1tCFOuIIqrbBgRzGmGHlU0FGIaSlybpLjasi5ggAv01Z+qUTraQlvMQETa\\nJZwrS2l0KhXTWhvhu8VGUr95ya1KUQlc5RpphCSDkhCDRGHsgSPOcmXSUghStY66fkaloTyq\\nszR8QH2iCcmqlb7cwFA6uQ8olqrLahTks5iVXr5hPmapUrPeu0Or2zW6vbdw0+ZpNet+oztJ\\nrNKnW9lN06p099yVnpKYbO4OMTDTjawkqSojzVFIzjj0qI3cR44R9Y5fH2Kkobelq64+04hL\\nja1Ik5tp1twBSHELcYdStDiCFJWhVlJIUlW4n52Gp1Rham1vuocbUpDjbzaM6FpOVSFpdQVJ\\nUkgpUkgEEWOsa0qvodYlSSVrpVVtesoCTqtpnJ2nziyFHJIam5ASg1k5HWVPjeVJ+qkKc67X\\nhPjvh3PJq1Oty8KPUJQnZVez5x6ammUK85S25215yZmmG1aoUc1IKCEpd1SnJO3YEEZg59kV\\njeS+1TECEqanpWmVFlacrqHpdbS3EEWKVdm72BSRcELl1jXdbSMpnEU80pKlBpZSQQoBTbgI\\n3FKkKABHA5bg2IIjX1YnKF6ZmFUwiTbxcuSvMS+oh+jYlSkteSnEtkJDb07cstMXHLjJOqfJ\\navKOq36y+cbHMH+XRuqiPS7GKuEyGwS0Ji4sJbknqNMNBJycKbVuOYn251TifPRr3hJIQpGy\\n1XEvazHyFYt237hZ8nr9Do9bYCSEs1amydRbSD+ImbZdCTnvBGRB3jzo6NuTRYwhuBLi5WlV\\nC2ZpwE+UW\\/UXWka4OYzkakmoyCUEgJU3Ly0vrJJ1VoX56YvWqLsPxuhbeLNmdPkn3gQueobT\\nci9nOUds8\\/SjSnnym1wmYanEkWQpC0XBsvD+23GVDKEy1fqzbSbDzebeRWJIJF8yRLVFLyGk\\nqub9i2ldzmCgsJWJD2B\\/LG6M+JSZOTTi\\/SLbq7oaQqgYv01yx5xsu6gQgXI8tu0piYcdKm0p\\nZuWovpWk6zOzdZLmze28fbUrsnKzq21Ikp1tLsrVKVMy9bpMwydyZhmblVJW40sglJl2pgc2\\ntuiBJc+hdckql1+0LqpdZbHnIkqzLvUidy3fRNzDBqEm+5nmdd3yFBGQ3byfiLbr2lfoxTjk\\n7Z1wYm4cS+1S9Nu2vWJ961J9baiUGrS1NmJ62Kkgg66WavLv852JUF5UHibyINlmKy6\\/s6x0\\naXOO3U1Sq822oqWsj8m2\\/KtU2ZZbQSRmXSamsggKcUfSN44d8phL+RnENCp89ewM1RphymTa\\nbAemqRmzMMTCyR6WRyVQCSpIAGU+jZS7jodbbDlKqcpOggkttOpD6QCQdeXWUzDe8cVtJ4iO\\nY1x0H2d8QicF+W5x4s1MpT8X7GtPFinsrBcrdIc\\/U8u865SFPuP0ySqdrTBYP0rUtLWxSVPL\\nKmVTrKXG3Jfc5o\\/8tJowYjNyNNq+IVRwtrr4bbVQ8Y6emRpeuFhDgaveRmKlbcvJNkgNPVav\\nUR5xgpeXIt6r7bHJWP8AyN9suBw9MDDsxXqayTafw8fppns06qcUzJI+lGG0pGdTs5SZNsJO\\nZSxZWW7qHtN2f4iyIk8QtU2bcIAkMQN\\/RbwJAyoE2tS6a64o3SlDM2tRUAkD0kZt7WuOg+zv\\ng1x0H2d8dI2jjbbN10uRrUjMSFWpFQb20hXbaqcnXKLON5lIfl5qUeW080SkpLjExNkkEcY7\\nTkK7Sqk2lUjONv6yc9QKKHQkn6ymHC26knPPNbROY4cw5inKNP09xbU3KPsraUUOBaDZC0Ky\\nrQspuEKSQQpKylY1ukW0nymHUoS5kKmlpStDrZDrS0KF0qQ62VIUlQN0kKsRqI5vXHQfZ3wa\\n46D7O+Gm2T4z7oNsnxn3Rr+x7j7R1+s91mYd646D7O+DXHQfZ3w02yfGfdBtk+M+6Dse4+0d\\nfrPdYh3rjoPs74NcdB9nfDTbJ8Z90G2T4z7oOx7j7R1+s91iHeuOg+zvg1x0H2d8NNsnxn3Q\\nbZPjPug7HuPtHX6z3WId646D7O+DXHQfZ3w02yfGfdBtk+M+6Dse4+0dfrPdYh3rjoPs74Nc\\ndB9nfDTbJ8Z90G2T4z7oOx7j7R1+s91iHeuOg+zvg1x0H2d8NNsnxn3QbZPjPug7HuPtHX6z\\n3WId646D7O+DXHQfZ3w02yfGfdBtk+M+6Dse4+0dfrPdYh3rjoPs74NcdB9nfDTbJ8Z90G2T\\n4z7oOx7j7R1+s91iHeuOg+zvg1x0H2d8NNsnxn3QbZPjPug7HuPtHX6z3WId646D7O+DXHQf\\nZ3w02yfGfdBtk+M+6Dse4+0dfrPdYh3rjoPs74NcdB9nfDTbJ8Z90G2T4z7oOx7j7R1+s91i\\nHeuOg+zvg1x0H2d8NNsnxn3QbZPjPug7HuPtHX6z3WId646D7O+DXHQfZ3w02yfGfdBtk+M+\\n6Dse4+0dfrPdYh3rjoPs74NcdB9nfDTbJ8Z90G2T4z7oOx7j7R1+s91iHeuOg+zvg1x0H2d8\\nNNsnxn3QbZPjPug7HuPtHX6z3WId646D7O+DXHQfZ3w02yfGfdBtk+M+6Dse4+0dfrPdYh3r\\njoPs74NcdB9nfDTbJ8Z90G2T4z7oOx7j7R1+s91iHeuOg+zvg1x0H2d8NNsnxn3QbZPjPug7\\nHuPtHX6z3WId646D7O+HEpPOSM3LTjBKH5OYZmmVHVIS9LuIdaJGsOC0pJG6OM2yfGfdBtk+\\nM+6HWC7LvNPsqW08w428y6heVxp1paVtuIUDdK0LSFJULEKAI3WjxSUqSpKgFJUClSSLgpIs\\nQRxBBsRGBHLo4Ty12YO4LaRdHkwp+1q6\\/ZdwTLRO3Xbl8yCKzQHpsKzSJWjVyizUk1qFDiJu\\n6VpebWlYVLxhCSSST9g7onG434bp0idCDHTCZLKp2tKtCuPW2wUpdeeue2wxe9lto1tZTSZi\\n4qZI05SknXRLJe1DkdSINqlZ7hw98fbbCNebxbgvB+LGynNX8PyE3MhAslufSyhufYSLaCXm\\nguX3kktX+rlj5xbZqCaJjObKUkNTYKgqwAU5LEMX7yuWEq8dxKnVEi9yaKVmd3AeM4SUrLcO\\nPu+2KqVqjrPCESeJPaY30VQlN9Tu+P3RQkAZmESSSSTv45+OiKqVrHqHCEVq5h6e6Hkptv3n\\n3Q7FqjmeoeM4t6vB7YIIeQnifV8+vHlBBFq1BAJPoHSeYRdDN1euch9UcOs9OXu+EOR6kXPd\\nxhMknMnid5PjKGTi9dR6BuHZCzy8hqjn49nR4HtENVHVGfPzDp6fVDrab68ToPn13wtRuQke\\nHd7uXuixZ5vX48c0ILOQy5z7ovJ4k9p8dcIE5nPp8e6MpIsAOiYWBYAcotUrIEnfzDt5vYIb\\nqVqgk83TxJ6O0xes5ndwHCGby8zqjgOPWfshaRc24DU+7Trxh0egm\\/E8OuXH2QkTmSSeO8nm\\nhuo6xz9Q6oUWrm6ePUIQWchu4ncO\\/iOHbGW2nu36Dw+Xyj1Atrz3eHXw74TWcz1CGj6t4QOb\\nee3mHx9IhdaglJPq7eaGJOeZJ6yTGUBYW5QuJ9nItWt9y\\/JuaPRcaU1O3D+qTdE7mXcnTVcU\\n70+bXEpcaZWhK6FL0rMaqmlLSt5l19pbTivu8X53yvEq7HQdYJn2ZXLWB3yMjKSRG4JG7ybU\\nyzzTll5xyUe1NAG0U2NoRaJ9uagafYwCwwqc62EhGyqdx2nTLjqrR1VupUpup1aZbU6FZPFJ\\nf1W9bUTjpfdbl03BeFdnH0tyTVWuCqzEyoFaGpNqcm5pbp2e2WptqWQVJSzrq1EgMjKON\\/Lg\\nqCvwKwVRUJKjOYqdnUp1K1fRlImpRICAL5v\\/AIvlAF9SEgekL9u7HZXzdoOKsPNaBIy6zuSk\\nuCXWtRVqLXlio303m1rx59ml\\/cTd2aV2kpcbCy5KVXHXFaYkHCACqmovets0wqAddAWZBqX2\\nhQ6tJXrbMlOQhpSm9jTKc0chs5CUQd2XnJYb1iQCd5IJVxyJ39XStdq8xcVfrNcmQryuu1eo\\n1aYClJWRMVOcfm3QpxLbKFHavqBUltpJ4hpI80d6EBttLaOCUpSncBklAyGYAAG4c271ZR3S\\naeKRQsO0dIATTqbKSAsQRlkJOVlgRu0sk28NNLRyBWJkzc3MTShZU1NTMyoci86XCPUV+6LF\\nHMk9fqHphm6rWXkOCdw5+0+OYQ4cVqpJ5zuHjqi2SlJipTsnTpRCXJyoTcvJSjRUltK5mceQ\\nwwlTiyEICnXEgqUpISB5xyyIZQgqKUJBKiUpSALkkmwAtvN7ADiTYa6RqRr98eojoHWoLF0J\\nNES1PJjLPUXRrwTl6g0pcyFfPLuHVuzVbdKJpa3mTMVZ+dmDLqKUy+12DTbTTaGkEZH2lbVP\\ns+1bZtKm\\/wDyPta3qNbkhqtJZHkNEp0tTJXJlsbJpOwlW8m280N\\/UQSkCCO7pRhMtKysukAJ\\nl5dllIFiAGm0IAHcAkWty8ItxlBbZabuBkbQiw0AKUpGlri2nDl4R9LBBBGRDkea7yhlpiyN\\nOrS4t1DCZVhvSCxQrElLIbDTUvTrnuqo3RS2GG0pSEMM0+sSyJcAfsIbI3ERh8hWYy6Pd9nC\\nNtfLpWb9yHKT4y1BqWXKyl92\\/hhekqgoWhp\\/bYfW\\/blRmWCttAUiZrVtVJ15aVzCfLFzADqP\\nPYY1HpPBQ7R4EfPzF8n5hijEEoEhKGazUkICdR2XnbpZIvzbKCNb29G+htTk612c7Otf1uaf\\nQCdDZDq0g20OUgC3CxFodoVluPA++Fgcjn4MNQcxn4ELpVnx4j2xGvGMLxiVfovXAm5NHbBa\\nqaxUv9Tm16c85mSpc1QqYzQ5pxWWt9IuZp7qnBkBrFROWW6QKimU7EjCtFHqublJv2wE02og\\nJQsuU66bcEtNgNvNFlzWlZ53zXmi0rIa7BT5sRi+TsuJFb0WLNkisLdtetXhb7ylKzXmq4Z2\\nvS6Dk4s5NylclWWwpLQS2hOSAnz1yV8A6mKrhBY0yFAlmkrpis88x8zz01S0pKch9VEojdxK\\nSASr68cjeT6v6A2v7X8Mp9EKm5ybYbOiizScQzEvLOpvpYM1htVt93Ad1zHdNWdTVdn+Bqmr\\n8oXaVTm3jvHazNKYL6Cd5IdlXEnhdJt3+VnR5KetPEKSpdVaVK1Gg3a3SKowtLja5aYkaoKd\\nUWlIdS06hTSm3m1IeQ2vdquJSdZMZvx1Tp8WUnCvTn0srOkWESkjbekdiwuhyyA0gS9Dm75r\\nNXt1sJlUtMo1KNOU8FLLTCEkZJYY\\/Y09nS0wiZZaebOaXW0OJ3jelxIWk5pJBBSRvBKeYKVH\\ncGM051UyaF7PMOp1tcBPYuJCrAWP5Y27hawtHFFaaLTyUqsShTzSiN121AceBN7Q4gggiDKT\\ncd43RpYWSrMb+I93T4+MKoVluPD3Hu8dMNAcsiD1giFwQR7x0QwRfQ\\/qgh0CQcxCwIIzENEq\\n5jw5j0ePHUqCQcxDJBB+B5wlSc3iIdpVzHjzHp8eOtVKsjnxHOOmGoIIzEKpVzHjzHp8eOvw\\ni+hhmHgPOPRCyVa3bz+PG+GaVZdnOIVBByIPeD3wypNvDgfnBDtKik9XOPHPDCuUSlXLSJ+h\\n1mUbnqZUpdUtNyzmYS42rIgpWgpW280sJdZebUlxpxCHGlhaEqh0lWe48ff48dSgJB946YSC\\ntC0OtLU262pK21oUUrStBCkKSoEFK0qAKVAgggEEWBHoJBBBIIIIINiCNQQRqCDqCN0dgaBm\\nnJdWgjiBT8A8cK5Ua1owXXUHnLJu+YbmJ2cwqqk5NB1U5LlnXeFsOzTuvd1Alm3DTZl03bQJ\\nZBmKrI1yXTaV4Um6aZTajTKnIVaSqsjLVKkVimTcrP0utU2aaRMSlQp09KLdk5uWmpZxt9h+\\nWedl5lhSXmFKbWrKFledm0K\\/bfnLdr8up6TmRrtutqCJqRm2wryeelHCDs5hkqOWslTbjanG\\nXkONOONn77QJ0+L40Er4k8AcfJ6pVrR2rVTceti5G0zU9M4avz02VLr1AShLszM2lMTLwmLs\\ntSXS5OUadddr9AYXOOT8jc1BbefJ9ltrEpP45wPKNS20STYVNYiw7KtNtN4wZaTmerdHZbCE\\npxGEDPUpFCSmsBImJcJqSlIneptjW2NVM7DDmI37yF0tyk64o3kwbJS26TceZAjRQF5Im5Bl\\nCRLTPYUbcU04hxJ85KtYZ5kZjjn2jjv3iOt7CxCt2+rfoteodZpldo1wU6Sq1Ar1Im2J6k12\\nlzzCJmTnqfOSy1y77Uyy4hxCmlFDifObAO0bR2Frp6fYe6Pl7NycxIvuys2y4y+0tbTjTqFI\\nWhaFFC0LQtIUlSSClaFAKQoFKgFAiO0GFszLSHmVpcacSlSVJUlSVJUkKBBGhBB0IJBFlAkE\\nGNSXKb6KgrtPc0l8PKbrVGnSrEvitTJJGTk3TJRtqVkL0bZbRrLfpLCGaZcSwo50hqm1INtM\\nU6rTLujdDwO5W49PN6eiJnku5JOoekKizLzdMn2lys9KzbDUxKTEs+gszDUxLvIWy9LvsrU1\\nMMvJLbzSyhWaDvja6eWiHN6N+ICrhtWSeewfvmdmZm1ZkFcw3bFTcK5qbsqemFLW4fJGwuZt\\n+bmSXJ+jANKmJqfptTePcvkx7XRPSzGzPEczlqEk0s4SnZhes\\/TmU510RTiiSqaprYUuRFz2\\ntPQqXSlvzJsP8U+ULsuVTZx3HVDlyZCdcScQSzKLCUnHVJSippSkWDE6tSUTZIu3OqS8or87\\nX2WCgJHCFQsHjuPsjjkOKRu4joPN2d3CHSVpWNx7RzjtjskpB3+2OVodQQglRHZ0HP2fZ6YV\\nCge3o8cYaUkjvHOCLwSN4i8L6R6vHfCcEJ6668II6yuvBPC29g45WrRpSJxzMmp0po0apFw8\\nHXZqmGVXNLBG4TomUbzmhWZjGK7tCppW1mLFu5TW5Sm6XdDG0QVEEpSKvTGUrQkb0pC6Q6vV\\nyUXlKGas6ovCzz7\\/AGGJHS8XYjo5SJKqzPYpsBLTBE1LhII9FLMwHEtpIvctZFcjGaxUZ2Ws\\nGphYSLeguziLcglYUE3\\/AItjGsW3JfS00Yaq7W8O67iLZIQ6H5qp4e1ufmKFPpQgAOVqn0p5\\n6RnJPJCElm5KYWVKQzrNZ7HLYXgpy5ekdYyZOmYwWZZuMdNlVtJeq0sg4eXqsJGzdW5PUSTn\\nLVcWg6riGmrNk1LcDqHJnVcQpj7IKSefLt3fZHwF2YVYd3ul03LaNHn5l0qK6i3L+Q1bWIIK\\nvnWnmVnzkfO1VzCmyR5yFbiHq\\/M7PNoDfZbSdnNDrrqkBtVXkmfM6whFgkpbnm3JepouBfK1\\nVWW7gfk9EgWBhnatizCykmlVao09AUlSmZSYK5NZCr5nabNdrIvKvc3cbO9QAsoiN0WBXLaa\\nIuIrUlT7jvK5MHq44lAXTMUaI4uiuzGsAtuVu23116kMyiNxRM1ubt4uJB1mGyNQbZbIxis3\\nECisXDaNxW3eVCmM0s16ybgpNyUZ5WSXMmpylzk3JrOotCxqziyEKSojJSAYL92aF1uzhcfs\\n26ahRnSpS00+tsoq0lvBAZam5fyKclmwciHHkVNzVGqQsnMdNyeEuk5gfWvulw4qt1Uapyw1\\nW7lwmuyrUqrFDa0uJQlNKmaTcSklRJ2QklN6yVA5+brc+4m8jPY7i0uTGA8eT2Ep52600rE0\\nu1PyfaK+rLszQXSpptPAuLmqy5+ilX1R0Dh3ynphWRrEdHpdVHopVMyi3KHUNT6TjgKZmRmX\\nAD6KGmpVBAsSCbx6JsvWKdMhJbmW0E\\/gu5tK47v2TJJPRqEmOQSpKgCCCCMwRvBHSDwPr9UQ\\nV8MOWL09MGZiVo913RR8TpCnjZuUHF+zm11RLK8wsPXBb67Tu6YmMytcvM1eq1MpcCQ60\\/LI\\n8mXs0wn+UOWS8mTk8ZNH67bbWkJTOVzDK66ZdbL7hWSuZatu5Zez3pFlAVl5Obmqy9VsKS6p\\nStmjnHF3kN7ccO53qTTKVjGRF1omcOViVW52OuUmRq\\/0RPuuEZQWpKXnCCbIW6kFcXLSNtGz\\nerBAeqVQoDysv5KryDjrJUQi4TN00zjKW7lWVx\\/sbgErDZskydYI1N4ccstoHX+iVbVjWbHq\\nUwop+aMR7Pui3ly5OZSqarrFLqFpoRkDrKFxqCck6xQVIKs2LN0rNHzEBDS7IxwwavIupCkN\\n2ziZZ9VfSS06+WnZWRrE3MMPJZYmFOMPNIeZDD21SgtuhHO1f2VbSMLLWnEWB8V0bsycy6jh\\n+qybJSDbO3MTEo3LutnWzjbq21DVKzeLAkaxh6qpCqViOgVIqy2RKViRW6M9socZU6l1pZvo\\nhxCV90ZGQRwQrjOeSmHR06q0qy6ehXYd\\/EcIuFcldwLUwFdGq2d3aXUju9kQYyzw\\/qZPhY\\/A\\n7+7x5RvDTpob2F342Ug29YNrDeTw77iObgjhjXZMfgPnsQ2f\\/wDbFiq9KZEBqYJ60tgesOq+\\n32QCWfJA7NWvh8+t2+D6OmuDDvsHq4bu+Ocgj59dwMo4S7pB4aykpz4Z7t+WWfEmPhrmxksK\\n0Av7qrts21w2pIcNy3XRaLs1LYVMoS4KjMymoVSza5hGsQVMoU6PMQtYyZalVGccSzKyj8w6\\nr6rTKC66RcDRtF1nUgbt5ANri7bso4wjtH+zYb0u4++wy2CQTYrcWkA2BNt+m7Q27ZgjCG6+\\nUI0QrOSv560m8BZd1tKlPSdPxJti4ak0Nm08kO0y36tUqg2XGn2nGQ5JhT4VrNFYQoxjPeHL\\nQaB9sB1LOOT9zTjWvnI2fh3ftSUvU2mWzqc7a8jQ3ApxvURqVfztq0tQTLqDwndJ2N7VK6Uf\\nRGz3GdQS4QEuyeGK5MM6m11PtSCmUJHFa1pT3xopuv4XkL+f4qw1JqSMxbfrlPS9awIyspdU\\n6sm+gQgkjURt2ihWlO9RCQOJO7P17j6N0R5bz+UCaMNOS61adiY8XfNpUdRx+mWha9FeSkrS\\nCJt68p+qJJ1EL1XLfH0biSFbVK204qXh8oWqz+s1Y2jJIyyk5lNRu\\/FCZqeuS4jLWpNHsymF\\nnJAXmRW3StTiN6UtK8otOjeR55QNZyFrAM9JNqIu5VZ+iUnswbarZqVVlZojW1m5darn6tgb\\nRic2pbNJHMHcWsPrSnMG6fT6nPZ78EusyZlwf7d5AHHUgGV07UZBnPazsqgg5EF9vWz6NUKK\\nvZDFdxUZGQM4lRO7zGX15deaWtX2n0ZboWV2cu7pj10KboNtYIWWyMtm9SrQuSrVHM+TqXtn\\nrivSrSDnnMvJb2VJY1WJpaV7R9tiZR0PVOU\\/5SDEJKm5DGO60yrqVBuXsfDiyaSWwUpac2dQ\\nt+y26ssrclnFAu1F1TTu3SxsW1KbFp0r\\/wBn9tcmUJeq1YwXQWgR2onq3OuupuRoBT6JPSyl\\nccqppCTvz6axec297O5QKDLGJagpIBStqSkJWXUo20Wubn0PJA1uQwsX3Ag3idyu7KUjeEzT\\nn+Kykf8A5brfDn39mcNVXlIjPVlZpWXTsk7ubMhxQB6vaYgNTmNvKSXuh1M5jBpQJYmvLEPy\\ny8RL0tCUfbnddMyxMSCa1Q5VcqtLS20Sr0uZdllYbl20MvhDnzExh\\/pmXSXF3Fed\\/PiZZEu+\\nu48W52ol+W1NzUylNyVN5TGqdnsXUApJCS0lIVlKpfyB22R\\/8Z2wYPklgjMiWln55Y1FwEO1\\nGmLUQn+Ikg6a74jM15S+FmSPN8NTTxG8TdelJQjTSwZlJo8gdO+5tr6Aqr1ZGtqyDuQ4az6E\\nn0gNkDfu49HoQN8gZkUzhkRnO5Hr3JlFAb+lQ+A8+17RWxvraGkVi5KA623rOtorFzVyeQy4\\nSEkJS1Sp8IdKT9ZrNJA3q+qmFmdC+\\/y2DMXRZ7bp1tZDLtafbTkfNydcpEupRIyJBbGR83zt\\nyoz\\/AP3F8ENgdrtyp+a+qWcFTT6RystGMU3uOaQBzNxfWq8qShA\\/0mNm1hf8KnTf1JoBHrvb\\nnyj0CTfgAJ+axu\\/+fh\\/1SKC\\/W8iV0tYUM9yZtKh\\/GMuk83MmPP8A29C28jr7W77YRk2othtm\\nquBbuXmocKpVottk\\/XcSHVJ\\/BbVnuS\\/sLr4\\/8rLU9VX\\/APh8ef8AuO4DvYbcJUEW1GA58ewn\\nGVjx3XsbetJ8qahfwKR6sUzHG3PD\\/D5x6A6cQJQjfTnwf3Lzax6ylI9aYUTiDSj9eTqCd34K\\nZZe\\/0zDe6IBqNGnHunzLb1KxNpzS2MjLTDd2XnIzTKkpI+iEvSXS1kcwkof3jmT9WFKjbmmX\\nYFHnavS8YcQxLU9K6lNS1pYs3s1PJEtsyqbblG56nrmHmG07XJjaTGowoIBUENrZPkKYcfW2\\n3T9s1DeccKUoRM4enJLMtZASm5r0yQSTbUfW9E20JyGPKfw66pKXMIrbzEat4k7RWtrAJdpD\\nA1OlioHUakkCPQRo9wU6uNuKk1OJUwobRp9AbeSFp81wJStxBbUoKQVBe5Scxn5ojmYjL8kn\\nymNQxI+atH3G+53pnFmkSym8Pb4uCoLmJvE+kS6St62bhn5x4vT9702VTtJWoTDrs5dVMZXM\\nTjq7gpkxO1uShSKxKViTRNS6siTqvMqyLjDw+s2sJGY5y2vitPn9IjjHa5slxLshxbPYXxBL\\nFKpdSXJSdazrk6nIukiWqEi6pKe1lZkJVYqCXGH0PykwhqYl3EC\\/cO4gpGLKNK12iuqclH\\/y\\nT8u4UCap04hKS9JziU3yuIKgpCvqOtKQ6yVtrQpXMQRbrp6fYe6DXT0+w90VVG7yDmfd8oug\\ni3XT0+w90Gunp9h7oIMg5n3fKLoIt109PsPdBrp6fYe6CDIOZ93yi6CLddPT7D3Qa6en2Hug\\ngyDmfd8ougi3XT0+w90Gunp9h7oIMg5n3fKLoIt109PsPdBrp6fYe6CDIOZ93yjvjASsCUuO\\no0dagEVen7ZtJUAVTVNWXG0hJ+sTLTE6sgHPJrhlmRC5018JP1CtK\\/HjDJuXMpTaDiHWp23Z\\ncgAs2jdCm7ttBvMIbQtTds1ykpeW2220t1LhZbR9US8rOrKaDdFCqqlhDUpU5fyhRGQTKPK8\\nnnN+\\/LOUeeGfEawOUaTuXuwhVbmPGFeMslKFum4n2HNWzVJhCUqacujDufRrvTCkjNl2Zty5\\n6BLS4eA8pbo8wZbX2EyGfp15IuI\\/pvZVUsOuLKpnBmIHS0i+YopVcHnzHoiygF1JVXO4izfo\\nm2YI5G8pWg3aka0hFyhTRWu25Ksso+L9\\/wD8N42sbEE2jQuSSczCK1Z7hw957vHRFVK5hw5z\\n0+PHWkSAPcOmOmkp4n1fPr47uQ4opWQ3cT7unx8IRgJzzJPWSYIeSm57hv8AlBBBBCbiwgdZ\\n4D4nqHt4dcPQb4seXkNQcTx7Oj0+7thmtQQnPn4AeOiLycsyT1kn7YZLWVKJ5uAB35Dv7IUl\\nNz3Df8ocJyCw3neevdFhOZJPaYRUrM9XAeOnsi5avwR6e7xz+1FSsuHE+yMtCbC\\/s7hHqE21\\nO8+4RYtWe4cB74RWrIZdPu+3h64uJyGfgwgTxJPWSYc5d+7n4\\/Lv8IeQLm53D4\\/dvixxeok9\\nJ3D4ntGXvhkTlmT6emL1rKlE83AA78h39kN1nM5cw98Pto3D1nr3e+D66uNvgPv6vFhOeZMI\\nKOas+bLIdX6YvWr8H0n4Q3dXqDdxOYHV0n0ZxmoFhe3h4Q7CDq9ZWqOCT6yMwT8BCkhIzdWq\\nEjSaeyqYnqnOStPk2E\\/Wemp19uXlmk9brzqEDPnPDeIak5AnojJnQpsgYkaYGjDZLzSn5O4M\\neMLZaqNpBKjQ2LypE9XlJyadGs3RpaddSVt7IFOb5ba13EvtgX1va4vYXPfbvtw431h1hpTz\\nzTKTZTrjbaf7ZxaUD3nhePRwoNHkrCsejW\\/JFPzdZdqU+kSqlazaTJW5SGZKXKgt5ZSnYSSS\\nQ5MKKTuLyiCqNJeljdZtHRi0irsW8pExR8FcUalLurzUXKmmza2qnNlWze8+ZqKpZoFxJSlT\\nxU6dUKjdNibPfN2H94TIVs1\\/MU\\/LNuAqK0OTzJkUFKk+clSXJlAQoEFKyDwG+NzysN2otTQJ\\nx0dbmNjOV+Xs205BO7OYXXr8tmWqbAKm3MiaCKy6dwJSypIW26EOo4d8pMHE+17YRg4Aq85r\\nsqp1N8w7Ov4kotOU44m31UIprylKUCEoDhHohUdxYaWml4PxlU0gJTLUuaDYOgvJU2adQ2k3\\n3qU8hCRe5JTb0rRCppbe2qdOa4hyelUnsLyAonI55AZndkd26O+1HM5+rsjpC1Wy9X6ekkkI\\ncddOe4fQsOuJz386kJHWTxjup1eqndxO4fE+iPohXFXmGU\\/oslX+Osj\\/APQRxVNH0kjkm\\/tP\\n3Qg6rWXkOCdw5+0+OYRkdoY2Z+qNphaLFhqQHGLs0iMGaDO6xWEt06oYiW8xU3lll+Wf1JaQ\\nXMPuCXmGZhSGVJYWH9QjGsnVGfPzdsbTORNsVN\\/8p1ot095CvI7euC8b7m3UpC9ibFw4vC6K\\nUpSDMSy1CYr1MpUjm0p0smZ262Jhll5smHpYzlbpErYqEzVJBhQG\\/K5NNIUb62CUqJJOgFyd\\nBHko32sww2QD2jzTYB3ErWlNu7f749IWCCCO3oteCCCCCCIX\\/wApQslNL0o8Cr\\/aYbaRd+Ba\\n7aedbQyjyuese+rlm3X3igJdemUSN6UyWL75WfJZaTYbIbYCRHOaXkdQnd+D0Anm9PviYF8p\\nksVyfwU0YcTQ1m1aGKd6WIt4Dc2vEW0pK4G2ju4vJwtdVvXmdgctYZhEPUHPIj7c++OJ9rcl\\n5pjqs2ADc2ZOcQBzekpbtSTxJmEPa63tzuIqvELZZrE3YHKtTbovoD2jTalW7s1xfjbujk0q\\nyPUePfC4OWRHj9MMW16438R7unx7YcoV+CfR3ePgIrAixtx+O6NOoBQzD18+h8I3pclTcXle\\nGWJ9qlYUqhXzT68Gyvz0N3PQmJBPmlJ1G1rtN4o89SSvakIQrWU5KG0R6oJ3C6ZkFLyXRbnq\\nkqlBUTkxMSsjU21DMFKErfnJkHV\\/DSreSN8Pvkq7kXJ4n4l2kXg23XrGka6Wy4UIemLXrstJ\\nNare9DrzbN1TakjW2qGdvqoWjbKErXQuq51r8oa3M9ZNDq0s3v1swahJTqt\\/m79anjilWYJJ\\nXwa49k\\/\\/AJb8qypNAFtjE1NcKNwzec4flqi6CTwVUaU6EgAlS8oNrmOz8GTBq2xKkrUordpE\\nw\\/Lr0vbzeqvtNAC+5ElNNXvuAOlrRCs5fiwhZHKd42z7cv5NJYh27hZfsk39MQozWHlv21VH\\n0F5Cc\\/KbgtesPLDTj7KXnHG21t6nksviVZk75Za1uzSVayl0iQQ6rMnWdZl0MPZk8c3Wl58c\\njzk+dG6H5UThyul6QujJiwGFJZvbBy5rAVMAHUdmMNL0euJaFeaE7VDOKzGsSpSy0ptO5LSI\\n0Y4RzwmbMkmCoqVIzM\\/KE57wTMLnEpOtxIbm0BOW4JyTzbu6azabwxR5tNyWVNMqO82DTjK1\\nE6m+dhN7nQm28Ry1jCW7Cpz6CCP2c44BltZE1d9IsNAmy0BJ5WOkdvJUFAEcD7D0Hr6PtEXQ\\nyQsoV1HLPrG\\/h1j49cPAQoAg5g88QeIWpOU9x3RXx2RUEgg+CIpB2Qhab6jfx74TC4IIzEKp\\nVnuPHmPT9vv7eLQEg+8dMLA5jMfo7YZIBHwPKDrrxh0CQcxCwIIzENEqz3HjzHp+339vFUEg\\n5iGSCDYwlSc3cR10fHSHaVcx48x6e3x9qoUU8N\\/V0\\/b1w1BB4GFEq5ic+s\\/Hx7OHhF9DDW7u\\nI5\\/K3x\\/W8BBGYhVK+ZR7D39\\/gtASOHjthVKgrt6PHNDKkka7x1vjyHYJBzB3x8df9h0HEi3Z\\nm3642U6529PqDSEKnKXPISQ1OShUMt2ZbmGCpKZmXUthRQFBxH1aV5bjvHthUHnB9IhbD70q\\n+zNSzq2JhhaXGXmzZaFpN0kHjrvBuCLgggkFSFrbWlaFFK0EKSoaEEbj1odx0j5jQs08cWeT\\n5vWVwlxcaq156O9Wn3ppqnSakTU9aZnZxKpq7cPn5otrUxtSqYr1lzU1Kyr8w87Oygp1WmXp\\nupzE8JsZLFxWtC3r0sq6aTdto3RJpnbcumjzQmKbVGNotlbbi9VLkrOy0wh6TnZabZl5ySnm\\nJmRqEtKT8u+xEOW+bGt7EOgv0C4ZcuNKO1kp5nURPUycCdVucknlIWG3UglLiFJUy+0VMzCH\\nG1KTHWWjTpX478nFiMumlt++MFrlqHlNbsqanHZeiV9lDaWl1215taJxFrXlKMKZROlLDkvU\\nW2GJOrS8\\/JtUmoSdS7avJ9ou2+UmsTYQl5KhbVGGnH6hTUlqTpeNsibrmGVKysyVfUBmU+sp\\nYnVgioKQlXn8r0xsl2zv0NbFFrrjj9KulDa7Lcdp6QQM7KRdb0mN7kqnM6xYuSoUAth2eRtE\\nfjCOKvWxrMxksWu4WYh05uq23cUmuVKc20Tco+g68nUKZNuIdEjVqXMIanaXN6qw0+0kLbca\\nUZd7FvRp0qMK9I\\/Dqj4hYZXQxcdsVDUlphDmzYuC06shsLmbdu6kJfemKRVZMLQXJd8uIelX\\nJeo06aqdJm5GdeyqQ6hSUOtuJUDktC0LTkU5BSFJWknMHPMKTnlu4HcfldVaLXMI1lyTnWKj\\nQ69RZ\\/TtG3pKoUypSLoUlWVQQ9LTUu6kKsSlaCAUn6qj2ghyl4jpagky1RptRlVIUk9nMS0z\\nLTDZSpKh6TbrLrailQ1SpJUki+givaS+jpeWjLiVPWLdKFz9LmUu1GzrqaY2EjdVvl9TbM82\\n0HH0ylRllp8lq9IW+5MU2b1TnMyMzIT85j0Dzg9hHfEvHG3BSwdJ\\/Diew3vxssTzavLrZuWU\\nbaXV7crjTS25asU3X1Ev5JcUxVqW8tLFUkHXWtow6GpuRi7Y\\/YA4h6NuIVRw9xCp2xmmdebo\\nlblA6uhXXQ1OKblK5Q5tbaNvKvahbmZdYbnKdNoekZ5hiaYUlP0a2F7ZpfaXSfoqsqak8a0d\\nhCakwEpbZrEuEhLdYp6QEps7lJnZVH9Cv3U2hMs60EfPfbBsom8AVRU9T23JjC9QeJk3\\/ScV\\nTXV+l9HTizdRCbnzSZXfzhoBK1GYbdB6eQ9luUM+scfSOfxuhwFBQzBB8c44j0xxoWDx3dvf\\n+iFASDmDkYv0gjeIpWORCyOO\\/t4+v9MKBQPP6DDFL3MsekfEQsFJVwIMIKAe7w+XytBDqCEA\\nojn9HHx6IUCxz7vd3++Gygjdr8fZ+uCL4qCRwMWgg8DnFYSRzHtgi8LPOM\\/ZF4WnnJHoz8eu\\nEYIOuuufGCGVWodDr8sqTrlHpdZlCCDLVSQlKixkoZEbKbadbGfSEg8eMdIXFou4OXBtHG7f\\nmLfmXQoGYt2ozElqE7wpqRmfLqU2U5nLVkAk55KSoJTl35FQojnMbCRq1UphvT6jOSetymXm\\nHWkK\\/t20ryOAnUhaVA8Qd8PNTMwx+0vOtdyFqSD4pBsfWDGDNc0JZJRK7bvuaYSM8pauUhma\\nKs8iP19ITUmEFI3KHze5rZ5+Zq5K6oquh7itIqV83v2vW28s0GTqsxKvK4jVW3UpCSbQvnyS\\n+tGRTmvW1kp2fa6uo9o7sou2h5x8O+JbKbSsWyoCVzjE4lNgBNyjBJ8VsCXcV4qWVb9TpGwb\\nrdQb0LqHQODjaT70BCj6yfhGqiRwj0mbLJTQafeVEADiUrta7WWUlLygpwgUSu6yUvKaSpwK\\nCCohG2SlSkZfSpvDTno7TIlr70nZRun7FqVbpl8YlLEomXKG5dMm1T6wtTbcuUNpZVKoKGko\\nSpKktp1o2Z7Qc4Pv7oNcdB9nfGW7tGXOnNU8L4ZqC73Ut+QK1Kv9bWYcmTdQuL3I1OhjZMYt\\nqkv+1KDXPsHZhm\\/+I9wIuO\\/feNdP6v8AyjP+GvTX\\/ORjr\\/8AGY+aF4acFTln2Hb10nXpZ5tc\\ntMy8\\/eGJrLUww8goeacl52qNB9p1BKHElCmlJK0KPnFJ2ea6en2Hug109PsPdGK1jOkS9zK4\\nBwhLqJSSpqly7dykgpKuzl0ElNzlJV6JUSNbmMx7HdefAD05OPBIISHqhOOgBVswAW6bBQAB\\ntvsL3taNUU7h\\/pQ3QgJrEtiTV0OSzjOpXrlnHU+TPj6aXUir1gBDboUAuWWBrBStZCszCElo\\nrY1zeW3tmSpySQAqduGhKASUk6xRIz864N5AKSkOBR85GrmobZNdPT7D3RTXHQfZ3xnjanWW\\nkFuSpdDk0cEtSkwAO8JTNNt314tnW+gjVrxJPLJJQwSd6lh1auW8u8tNQY1nU3QzxLmilVQr\\nVoUxs5BSRO1SdmUjzCPoWaQmWUBmpO+cBK0av1FJdj7ym6Ef1V1jEIZZAKl6Zbu8nzSSmbmq\\ntuA85IzkiSdVeY85EZ67QcwPu74ptDzD490a+Y2lYufvknmZYHgxJSt7cgp9p9Y000UCOBBj\\nGXXKivc6lv8AtGm+7S60rPDnpwtGJtL0NcMpTVVUqtdlXcGWshc9T5KVOQTnk3K0wTAKlBZ\\/\\n8MICFJQM1J11djUvRwwXpOqWrIk5xxJzLtVnqrVNchRI1mZ2felQADq6qJdCVAArSpWsT3UV\\nq6h6O\\/OKFRPOY0MzivEs3cP12pkHelubdl0HdoW5dTSCnTcQRoN8YjlQnnPrzb5HJLikDhwQ\\nUjgOEfOUyxbIoaUJpFoWvTAgDIyNCpcqvMADWLjUqhxayANZxalLUrzlKUrzo+n10jcOAyAy\\nGQyG4bt3NCUEaR1559Wd9515evpuuKcUb2v6SyTrYXsbGMRSlLN1KUo8SolRPrNz74vKzzDL\\n2xaSTxMUghuPIIIoSBxOUWlY5t\\/u7\\/dHoBO4QRfFpUBz+gQkVE8\\/o4ePTFhUlPEgQsI5+z5n\\n5e2CFCsnhu9\\/r\\/RFhUEjMkDxzDifRCCnuZA9J+AhAkk5k5nrhYAG6DrrrxjBrHXBWq2tWUYt\\n4VrnKVNUmoS1wTspQ3XZGpW9VqdMNzsvc9uvSam5iW8knGG594SqkTFOmm\\/LpVSZYLRJSMuS\\n15SyX0j6JK4a4jT0pTce7UpTIqCXnZSUksWaFINlL1y0aVSWUs3LJMt+UXPRpVjZskqrtKSm\\nlzU\\/T6JqvUoDoVmOB3joyPo9PZuMYSYs4TXHhxckljTgtO1O3KvbtTYuJxu3XnJKp21U5J3y\\nlu4LfclcnWZZlwF6ck2hlKJ2jjaFU9T7EnkYzwdhzbfhNOCsXrakq9Ioc\\/A3FriO0ekZpxKE\\nin1A3S5MyE5kaaeQpf5TKy8kpnpWWeNz7KNqdRwLWEKJMzTpoNy9RkHHMrM\\/LJNkJKiCGZ2X\\nJUqSmgnMgktLzNOOId9AOn1OTqko3NyrqVtuA5hXmuMuDett1JCilSeBJOXBSCWlIXD\\/AGiP\\nxhGivkzuUypGk1R5exb6madb+Plv05Kq3RUlqRpOJdJkWwZm6rUYzS2xVWG0GYuG3pf6SnOa\\n9UpiHqG9NylI3c0+pyVVlm5uUdStC9ykKUkLaVwU04jWBQtG\\/PI+d+ytazYSqPkRtG2a4k2a\\nYln8M4nkHpKekXbXN1szDDhJYnJV\\/KlEzJzKElctMtgJcAUlaW323mUfQ+i1il4ipUrW6JMi\\nbps2n0V2CXpZ5IHayc41dRYmmCQlxtRIUClxtS2loWrm9oj8YQbRH4whjmOkesQZjpHrEV72\\nQ5L6\\/wC749DXZQ+2iPxhBtEfjCGOY6R6xBmOkesQdkOS+v8Au+PQ1IfbRH4wg2iPxhDHMdI9\\nYgzHSPWIOyHJfX\\/d8ehqQ+2iPxhBtEfjCGOY6R6xBmOkesQdkOS+v+749DUh9tEfjCDaI\\/GE\\nMcx0j1iDMdI9Yg7Icl9f93x6GpD7aI\\/GEdM8rJhoccOT3XiBIMCcuLBeu2xfRU2D5Y5TmH3b\\nFvNlG5SUy7cjWTc86hxbQVLW+h5lxRSyy92xmOkesRkVhVTqBiZh7ifgtdbaZygXfblcpNRk\\nlLbK5mgXXSZi3LgZaQ4lxIDbMyyWyptxAenCvIEjaddeRpiVqj7UJrDE28WpPG9CnKY2FkpQ\\navTm3KjTnCojIFiXRU2GQtJKnplpCDmVlcq3a\\/QBXcHTzYSC4wFWURfIiYAZzgb\\/AMnMGVeJ\\nBFktKJ0BIgGkgDMwiSSSfAEdg4qYe17CPEq\\/cL7paLFw4fXdX7QrCdmWkOzlv1Kaprkywkqc\\nCpWcDAnJRwOONOyr7TrTjrSwuOve2Po6tpaFqbWMqkKUlYNvRUk2I0OpBBHjuuNY+ba0KbWp\\nC0lK0KUhSVCykqSbKSoHcQQQRwIg8dsEEUJCQSTkBzwoCwtyhMUUoJBJ4D2noHX0\\/YYZKUVE\\nk9vUB0eiLnFlauoZ5dQ3ces\\/Dqhq65kdUek\\/DvhQBJsIcACRc7zw+z59XTdc1jkD5o9sIKVl\\nw4n2eObm90VJyGfq6z1emECcySYyW0ewe89fKBIucx56ePyHW6KE5DM+jrhEnPMnx+iKqVrH\\nqHCEVq\\/BHp7vHxMPQ6Bc26EWqVmeocO+Gjy8\\/MB3cT2\\/ZCjq9QbuJ93T49kMycsyftz74cQk\\n3ufVz5fcP1QtRtZI9f2fPoxRashlzn2c2fdCBOQzipOZJMIKOsezh39sZjaPvPPu68YUkWHf\\nxihOWZJ6yTDFatdRPoA6B43wq8vM6g4D63b0Q2UrIdZ4RkAXNucK6Pu6\\/XFi1cw5uPX+j39k\\nbXeRLsX7tuUZwWfdllzUhYtLxDvyoBLa1JZ+bLEr1Jo8y6tH7CmXuSt0N5Cz5qnkssE\\/Txqe\\nJyGfgxIu+TgWCuraQmkFiiuXS4xZOENGswPLbKhLT2I14SlXl1tLKShl92Sw2qLKVAh0sKmG\\nknYqmEqU8oNS7yv0W1ag5TmUMqSDrqCQQOJAEb3DMv51X6S1a4E6y6RbMCmXV5woKHFJS0Qo\\n8N+kSndISoJk8Np2XWvV+dapSZBAOWS1tzPzoUjPn1acVk8c0jnMRSeXcvEUjRew6s9lakTN\\n54y0yadT9Jqu0i17UueZm0HUKUFQqlSoTidrrDJtWq2VarjMnnShqOzpdp0gKJM1UKjUXATu\\nHkMuxKt8d+Z+clhI\\/cuZ82UM\\/l97zE3fejth22tINBtO+bzmmwlQU4LtrNEock46orIWGvuL\\nqKWAG0KbLszrLc10Ib4mDYxd5amDJEjOzhKmS7r5AJ7H6NoNVxLL5zqCTP1OVSCk2Sp1IIuF\\nX64rz30XserTwslyqPJZbBt6XnNQlJJ0C3ES0u8Re5OW\\/EW0S2K1tKw65vHk8k8sE5fWcW00\\nAd+46inDnvAIEdoOL11E8w3Dsjr6xG9UVN85Zq8mYSd31c3luDhnv+iz39PNH3ilZDrPCPoF\\nVVZ55xI\\/MS2gf4gWfYVG\\/gY46mNXSOQSPaAftvFizmcuYbvTz+2JD\\/yaOw03Lp13\\/ec00Vyu\\nHGjzds5JvAKyZr9z3hY1uyaVqLKm0tu0GYufcHWnlOIbDQcb2+pHcJyBPREvv5LTh8GqLpgY\\nrTMo4pU9VcJsP6PPltSW2xSpS9bkuSVae\\/Y3Vums2o9MNZhculiXVwmYlmziT86xhRklN0sO\\nvTKjut5tLPPJV\\/lUti3NQ3akbGjtdpUpNHBLhXru\\/JIU7fnvRp3ncYlvQQQR1zFjwQQQQQRp\\nt5eHD1V88m\\/inVGmTMTeGt24Z4gSzTZyWUNXhTrOqTwQWnApEpRbxqc86CuXKWZZ1zbKCfJ3\\n4CaVZHqPsj01tNrDtOLWiBpN4diVE5OXRgXibI0ZktB9QuNm0qpO2y+hheRcdlbhlKbNNICm\\nnFONJ2TzTmq4nzJUqzG\\/iPbHLW3eQLdepM\\/b0JulKlybjVySmnFq0GtwicaFzoRltuUYr\\/Fj\\nITPMu20elkhW\\/VbbiwTfd9RTYsDwud4h2lRSQQftH2w9SoKAI+0dW7du\\/THGoVzH0d3d+iF2\\n1lCuo8R1dPbFBrRw4jceY69\\/HfESBKDY7utevsjN3QDur7mtKLD1Li1ty1xN3FbE0W8s1\\/Ol\\nAqDtPQpCiAtK6xK01Kxreblro11oShcunRLrZp+K7dPWopTcFvVemoQFaoU9KiXrSVFOeqta\\nGKVMZZjXQhx3pXEIPCm6RZOJ2Hd5leo1a17WtX31a5SlUtSq1Jzsy2sj+9uy7Lrbo36zalpI\\n3xMiwgrhoGKFi1IlLbaLlpspMOKVkEytTeFMm3CRlualJ19zM8+4g8Dx1tzT+D22PZdiwJ7N\\nmZMlJTDgFszdOrGWdVe4PaeY1pKCToAlAIMdZ7Bpn6RwLjKhXzrlJtc20neUmoU9KWQN4ymY\\npa1C2uYqOlwIw++U7Yamv6JGB+KUsyt+bw5x2FuzK0M6wlKDiNZlfXOzbz25TLQrdl2zJav1\\nHXp5nWOslIMQbA+d16fXqfnl5POSk4lJVzzjDjKylPHd5C3modKQrmJ9Ablp8LziryZulJSm\\nJQTdStK06NihTXNUrdkRhnd1BvOuzjOWeofuTpNwyb6yClMnOTOWqrUU355WDE\\/5Ncs3JqUA\\niepbuqnL678q+y6gZjgAwZk59OUdw0hzz\\/Bs8yLlclMKKQreEpWxNE8TYpcdAJ0vexsNKW2i\\nSmSourAH7JlJeYuL2zNEsqB4FQQym4G4FPHWMrGnNYZH6w9o6YdNuFBy4pJ3jo6x43+2OLSe\\nBBy6IdtuBYyO5Q9vWPiIh602N7afA9fKKuBv6Kt\\/A9ceR4\\/HlYIaNuam4jzfd2D4Q7hEIII3\\nwRUEg+8dMUghtSb6jfxHP7\\/j47\\/IXBBGYhVKs9x48x6ft9\\/bxaAlJzH2EfEGFgQR7x0Q0QCP\\ngeUHx66MOgSDmIVCge3o8cYaJXluPr8ePgqDzj0QyQRvhJSFdx68LiHSVEbuI8cIWBzyIPWC\\nIaJVnuPH3\\/b1QoFZHd6RHkNEW0I1+zr7b9zxK89x49PT3QoFEcPVDUKB7eiFAsjjvHthtSOI\\n9nyjyHgUFdXSOjv8ZxwN0WvQrxo03QbhkGp+nTicihfmvS7oz2c1KPpG0lZphRJbebUk7ylQ\\nU0txtXLg849cKBfMfX39HjhHjbrrDiHmXFtOtLSttxtSkONrQQpKkLSQpKkkAggggx6lSkKC\\nkkpUkgpUkkEEbiCNQRGHli3xj1oCYny+JeEtwvzFuTjyZOpS04y\\/M2xdVKKw59zd80Zl5tnb\\nb1iQqLK5abYfSahRZyRmQ+w1LM0HeUOwm0uLSD9rzQoF\\/UaSYmL5worM4yq4KCVrbZmKxb7+\\nqym5LVXNuBpmsSLLZZVMSUtXJChVGfl5VUfCfp8jVZGaptSlWJ+QnWHJebk5ppL0vMMODVW0\\n60sKSpBG86wzBAI1SAYwpu3Cu\\/8AA+66fi5gVX7gok3bk2qqyUzQZ2Zl7ktZ5La0vrlH2CXa\\nlRnJdx6XnZd8ulyRffk6lLztPdmlq0e0rZZgvb3Tks1wy+HNocrLhikYvaZQiXqwbSAzTsQN\\nNhHbtqPosvpKX5Vas0m4G+0p03duzPa5VcITSJZ5apqmuuAvyS15EKJ0U\\/KLN0y00d6kZfN5\\nqwS4lKw0436B0jPsTbbU1JTAUAUrQ4hWqttxOSslAZKQ6k5EozQridyVpEMMZ8FsNdLLDyYw\\n6xIk0ytYlA5OWtdFPbYRXLdq5aS2mqUZ10FK0TAQ2zWaM+oSlWkkZENuy8lNyOgHk+OV6tjG\\nR2i4X47TtJw+xjdSxIUy5HVy9MsPE2a1ktMMDXcbl7YuydzyRR3nG6VVZ0rRb85Lz09KW23v\\n1olxStT1Fy7ipaea1XFM65Q4hSTucZUNUrQFDNJSErQc9olJ1RHzCxdgbaFsLximVrEpOUaq\\nyDyZmQn2FEsTjDbhDM\\/TZ5CeynJRy6gHBolRclZ6XZeD0sntqSqOFtpWH3W0GXn5KcaVLzcp\\nMIBW0paUlcvNMKOdl0EBQAUTdKZiVeUkNvRGJ0l9F3FDRavhy0sQKWpymT6pmYtG85BhxduX\\ndSmHdRM3Tpo6yZWoNIWyqqUGZcFRpDj7O3S7KzEhPzmOIUR2dcTTLno+GuPVkT+FmNdvUy4K\\nFVG220OzgVLlubaSRK1GSqMuWpyhVyVUoqlqtTnpYqCnmFuJbcdl5mPlpm8mPino3u1O+cPW\\napijgogOT6q1KSyX7rsySJ2pZvOlyTSdvJSjRIVdtIl00hxtpyYqkpbpWzLL7r2WbWaZj6nI\\nbfcbaq0u2ymZuEttPuKGUHsyby0wpSVAsG7Tl0uSrriF9m3xBtP2M1fBk0\\/O0pp6foSlLcCU\\nhTs1IIGqg7lF5iVQDcTaBnbSCmbQ2UB13WGFjn3e2LwecHsI74bxUKI4GLfKAdUnr4iKOh4l\\n5Q+t5w9R9Y7s+uF0uoPE6p6D38I48OdI9Xd9sXgg8D6OeEFJG8QRyIPOD6RFwWodfbHHBSk8\\nCR2GFQ+ocQD7ISQDvAPjBD7aDnB9\\/dF2sk849O73w0S8g8c09vD1j45QoFJPAg9hBhJQO8QQ\\n5ghvmRwOUXBaunPtA+GUJLZ4EevT5wQtBCW0POB7u+K7Qc4+PdHmRXL3iCFIIs1x0H2d8V10\\n9PsPdHmVXI+yCLoIt109PsPdBrp6fYe6Cx5H2GCLoIt109PsPdBrp6fYe6DKeR9hgi6CLNcd\\nB9nfFNoOYfDvj3Krl111oYIUghLaHmA9\\/dFCtXTl2AfHOAIV4eJ\\/XBC0WlSRzj3+6EcyeJzi\\nhUkcSB2kCFBvmfZBCpcHMD6d3fFpWo9XZCCnkDhmrs4es\\/DOEi+o8AB7YUEpHD26wQ6J5yfS\\nYTU6gcDrHoHfwhoVKVxJPaYtKgOJhVidwvBCynlH6vmj1n1nuz64SJ5ye0nvhMudA9fd9sWF\\nRPEwsIJ7vjBChWObf7IsKiezqi2CPfQT3n2\\/d9sEEByOYIGR4jiMjzb+btgJy3mEyvo9f2eO\\nyC6lHTQc\\/v4+H649SCTp7eX3xiHidg3cVn3HI4w4HztQtq67dqTVwpkremFU6oU2pSCvKm61\\na7kqULZmW3EBx+ltgtv6y\\/JUEKMmvftybnKm0XH1qlYXYtTtPtPSAlGvI8nky1JtzFlqWCiq\\naoTWs23TbvS0hxyr2w02yhxaV1S20qknJ+j0DWCTzk+kxjLi7gOzc84LzsN77nb4k30VFKpR\\n405iqz8q4iYYm0TLCml0yuNvNpdYqbS2w7Mark2pt39eo8xnhHCm2HDreF8dASlQkWlt4Zxo\\n2yl2oUZ1waSs\\/fKqfpDqsvnEu64m1kupcYfQ1OS1xbMtq1awBUQptzzqmTJQ3UKdMLUJWdZS\\nQB2hAUWJloX82nkJU4wSUOJdl1ONKnY0isylZlg9LnJaQkPy7igHGFqz81SScik\\/gOjzF9Sy\\npMcxmOkesRFp0DOVxqVDqdMwR0wZ+aoFzU55ukUHGSptmWRMqBaalKTidL7JKGHlZANXuguy\\nE+2th24WGFtzVxTkli174pNxSkq83NSZ8tlmJqSm5WYbmKbUpaZbQ9LTVPnG1uMOtTLS0Os5\\nOKS4hSVsuvhWR+W+1fYzjLZJXF0vENPV5q9mepdVlM0zSqtJgjLN02dCUpfayKQp1paW5uUz\\noTNy7KlJK\\/oPhbFVAxpTE1SgTYeSlKPPJFwpE\\/TnFpCg1NMAqJQfSDMy0XGHwFFt1RQoD77M\\ndI9YgzHSPWIQgioM5\\/R+Pd8\\/ePXI+zHM9dHoar5jpHrEGY6R6xCEEGc\\/o\\/Hu+fvHrOzHM9dH\\noar5jpHrEGY6R6xCEEGc\\/o\\/Hu+fvHrOzHM9dHoar5jpHrEGY6R6xCEEGc\\/o\\/Hu+fvHrOzHM9\\ndHoar5jpHrEfaYeXUbOu+j1ouESjT4laolGsdemzYEvOKKUpO0LKVCaZQN6n5ZoDLMZfCQRt\\nqDXajhytUnEFKcLFTotRkqpIPalKJqRmG5lkrSLdo2XG0pcbJCXG1KbVdKiDjzUkzOS0xKPj\\nOzMsuMOp5tuoKFgHgqxJSrek2I1F41Lcu\\/oxP2fi7aelHa8gV2hjBT5G2L2m5RsuS8liNbVO\\nSzSp2YdQlLTDd2WbKSSJFtCnVvTlqVycedKpxpMaCInsTVkWDpbYAXtoyYqDWl61RBJUyfRs\\n11KnmQWict246ItagBWrPqsvJzSGVENTckw3KTiZqTmKk2qFNpOaNGJ+ifi3cOEeKlJckqpS\\nX3ZiiVxlp75gvS2XZh9mlXbbU44geWUiptMrzbOU5TZ5ubo9VZk6tIT0qx9qcPYkpWP8J0LH\\nuH1pXTq9LJVOS6VhbtIrLf5OoUyct6SHmJlK05lAJe0fbuw+wtz5u7VsGTmFsSTyltK80mX1\\nLDqUEN9qv0u0uLpyTif2Q2b\\/AF1PNGymVR0BDNxwrOXBIO4dPWfG72xVxzX3Aeb7+0fCGrjg\\nQMhvUfZ1nujNAvoIrAAJGZXqHXH4fCjrmqMh9Y+wdMNScsyfT46YCeJPphFSiT1Dh3+OEZDa\\nOHrJ+z9fee6PBdZudw6t48z9wgUrWOfDoHMIQWrPcObjFVq5h6fHjuSUrIZnf0DnMZAG4DSH\\nQOA9UUUrIdZ8Z+O+G6lBIJP2nq37t\\/6IuUeKj2nwYZOLK1dQ4Dq6e2FJGbwHvPH293dDn1Bb\\n849ezl3+uLVK1iSTx9QHR2CEFKzPUM\\/TFy1cw9Pd3\\/phFSshu4n2RltovY+wbrDn7PdAhP5x\\n38Pn64tWrmHp7u\\/9MN3F6id3E7h1deXVF5ISCSdw4nxzmGKlFRJPP7BzD0RlAWFocihPEn0w\\ngSVHPwBFy1Z7hwHvhFastw5+PUPth5CbanefhB0YsUrM7uA9vX49kTEvk5GHyqLo0434mPNb\\nJ6\\/MZJa2WCT5z9Kw9tKlzUtMADNIaFTvmtyyTrbTaykxm1qBtTsOhxeondx4Dd44R6AnI84c\\nKw05OvR0kpiUTK1K7qFXsSKkveFzqb+uuuXJQ5tRKUjM2pN2\\/LpBTqlqXbIWvepWurLvYyJv\\nf8q622LAHce111BtdsDS+psbAxPNnkqX6\\/25HoyknMPAkG2ZeSWAvuBIfWRc2ISo70iOz9Ji\\np+VXvTqeleaKXQZcrAJzRNTs3NvuZ78s1S4kzvy3b8zvygpcsrfSrv05bwpKJpMyxh1ZVg2N\\nLqbeLzTWvRvu3m5VKwpTaVy9SvSdbmGkHJmaS+06EzCXUCbNi\\/VBV8SbumUr1kM1RVNR+KBS\\nGWqYoI4ZJLkotWQz1lKK+J3+ebpbX83ifpP4\\/X3LzJm6fcWLV8zFGmMgC5b8rX52QtzMZDLV\\noUpTkEcSU62+ORvJiZ\\/Cnyj9rmMjd+WpEnU6bKPaqCVzlZlKfTnAsg2z0uiTaUJB+opQTdKI\\n6F2xPinbP8J0cWQ5OzTE04m9lKRKyLjj6Ckb0pmZ5lRPApRxUY+SspnZ0dTquMxNvuA\\/uEJb\\nZA7EqaWfSeEfTqOsc\\/UOqOLobXk9FprXAmVbeUMsiDMZzBB683Trc+frPIqOQ9gjuqYV2k0+\\n5+m6sJ\\/tQopT7QB9kcnK1cWvmo28BoD6wP13ixZzOXMPf4+MT7vk42HS7M5OaTup+W2asW8a\\n8Tr6lplTakKmJGkCgYXI1HXAAthifw6qKEBpRabfVMjc+p\\/WgGKVqpJ9Q6TzD1x6eHJjYZnC\\nLk+tEKyHWVys21gZZF0VWUd1EuyldxEp6cQ69KOhCUI2srWrpnpdwp1s3W1EuvZB5dt7H5Lt\\nK\\/OzZSSmTpi0g23PTT7KUnMdxLTb4A3qFxewIMgw23nnlrO5uXWb33KWtCQCOIylZ8QIzygg\\ngjpCJxBBBBBBFi0IdQpC0pWhaVIKVpCklKhkQQdxSRxHBQ6QY8trSGw4fwax+xtwncQttWGW\\nLOIdiI1k6m0l7VuyrUWVmEDVQlbEzKyTMxLOoQGnmHGn2M2lpz9SiPPg5cXDBOGXKRY2OS8u\\nqXpeJUhY+KVKbUgDXVcdp06nXE+F5JDombyodzTCFBKdXaBhWu4yt1yj9uch21BpNRCbmRqa\\n5dR0ulqel1qUTfWxdlGUkC+qgSLC4iWLWc0tKv8A9afW3x3PIzeFrsjU8SAN8anQdYA+BCyV\\nZ7jx98M0nVOfTxy5\\/tHjKFweCknrBEcruI+48u7rx4RAlC47+EPmnNXcfqnn6D9sSycBLycv\\nHBzCm8Q+ry6q2Na0\\/NPJVrrTWGaVJt1TJzfrqaqjMyArNKlBA10JWNQRLkq1h1jj9kSKOTdu\\n\\/wC6XRnpdIcdC37Fuu5rXUCfpQxMTDd1yqnNbMrbS1cplmFJ8wplvJ0+cwsI5U8qujKmsG0O\\ntNpPbUavoZWoXu1K1OVeQ44FDUfsqUkU6EXKgb3Av0F5ONT82xZVqS4bIqdGU6hO\\/PMyE0yt\\nCbcf2PMzawdfqkblXEom9bXpOOmCV3WTU1pRQcYsLK9a1QdaSFpRSMQ7SmqRNqSDrBYElV3C\\nASSSBv3gjytrbYnrQxIlqRVmVydSpFwzluVSWWN8tPJemaLOsOa24bCZK21kgaika+4pzHqS\\n6NteNdwdtNS3EuTFJROUOYAy+j+bJ59uTb3c\\/wA2rks+nXJzzOcedFyquFkxgZyjmlhaSGES\\nbTuMNWxIozTKEplmaVis1JYrUdmVCFKbDElJ3exJBDZJYXKql3Aw8ythHSWxytIxFQiSvMK3\\nh+nVMAkeiqYlUpmNCSbpXNtpXvyFFjrvxtqdKMs8gZbCWnJ+nLNlG6Sbs3J0sUsuqTpdQUSC\\nQNGaVEHpz4jxz++FgcsiD1gxx0pNNzstLzTZ8yZl2ZhvnzbebS6g55cSlY4w7SrLsh9xBuQR\\nZQJBB5g2IPhrHPy0XvwI39\\/cY5FtwLGR3KHt6x8RDptzU3Eeb7uwfCOKBIIIO\\/mMO23AsZHc\\noe3rHxEYik21G74ddd6QQfRVv3A8f1\\/Hj38rBDRtwo3Hen2js6ukeriYdAggEbweEIhBBB+B\\n5xWAEg5iCCEKTfUb\\/j113eQslWt29HT2QolRG7iPHCGsKpXnuPoPD1+B3tEX0Igh0CDwhVK+\\nY+vv7\\/0w0BI4QqlQV29Hd0wypJGu8db48IB0I8D1940h1CqV8x3dfT3e6GgUR2dEKhQPD1c8\\nJhopI36ju60MOgSOHjthUKB6j44QzSojs6O4wqFA8PVzwkpB8efW+Ew6CiOHqhUKB6j0Q0Ss\\njjvHjh9sKAhW8e3iO2Gykjw59boIxfxf0b6ZdJmrishEtRriWVzE3SvNYpNadOa1qby+jplR\\ndJP0yR5FMu5Gabl3XXp05aaFPKu4maOdQp+Dek+1cd2WDSFy9KpN1PpfmcRMOmEFKJdEw46T\\nMXnaks3kqVYceXXKfIKR8zVCqU+Vp9Djjgsjjv7ePr\\/THX+IOGFp4l0\\/ySuyezn2W1Jp9alE\\nttVSQUc1BLbxSoPyxVmXJN8OMOZlaUNv6jyNjVG8NY4oRwjtHpKcQUM38ynfq1mhPlIQicpk\\n8AXm1tJ9EpCjnauw8mZlCqUXNcJY4rWE59qckJt1pScqFEHOlxkKBLEyyr0JmXNvqL9Ns2cZ\\nWlxDZTL+wnxwsfFW1KNd1q3PRbqtivy6Jij3XQppuapk63nqqbmC1quSM3LuAsTkrMNMTEnM\\noclqgxKzLTiYy8s3FKq2+hmnz4+eKGQEhh1YXMS7CgQBJzCswtgIBIlX9owpKdRpUsNYx562\\nEuMWktyfl6LuGw6v872FVpuXNwUGcTNTlhXcylTaEt1ml7Uu29caGEIYk63JOS9UYAMrL1Gp\\nU1U9IzEobQq5SHBzSnpLFPt6pG2sRJSSVM1\\/CS5Z1lFwSiWG0rnp+054BqXumhNqKlGdkENz\\nUswG3a1RaK5Mshzgzal5O2ONjk05jfZ9U5jEODCorbrlMbCnZBgqCvNMSU1IWiXQhWVC5hba\\n6Y4sNqcFOmVok0dw4G2q4bx9KM0urJl5WpuBKUy7iz2Uy5a2enPkhwu2JJl1KRONgqSBMoQt\\n0566RXJi6NmlDL1G9cG6hKYNYozLZmpxFEkGhZ1YqC0hx1VzWO2qW+bJuacStp2uWs7IMuTD\\ns1U5yQuOaVmrQzpB6AGlJo2vTk1e+HFQrtoygW6nESwm5u7bLclGzkZydnZWVbqVutFR1Upu\\nulUF51W9ppxrUdckXUO4WplTVSo0+8xMsKCkqlnVy05KObycy0pLjShmUhxCi2vLJoqTmIyB\\ntjH26aQlqVrctLXDKoASHHFCRqKU55AGbZacYdyTnuflFuuFJK5k5GNvgPymZBKW6ZjqUfpj\\nzSENmoSjTs1JFSAkKW9LpDtRlbjTI23PouCoKaFkCKY38nej1pbs\\/QFiTmXSXCGA02HCo3ut\\nhWSUfJJKlOIXIuLP11rOsQgIImn35hFoJaQSHkYp4I2nJVueLhmLkYt9Nq3E9Mvqz2zt5WE5\\nIVyZCHM3W1VibMu25tCtgsvvbbX9jdyGVnXLS5u6tFTGBcu84hx+UsvER+XrtAmXc3nDKU6+\\nrelkVClNoRsmZaXq1AuB9TufltZYQCsdUYYxHhzGTanMLYhpFbUhrtnpaUnGDOMoukEvShc8\\n4YsVJ\\/b22iq\\/ohVxfmbEmxjGWHApxyV87ZCilCkIXLursLnKl8Bhw8ky8y+o7st9DGzClDhv\\nA6d46uyLtp0j1d32x2Ri7hDiLgRiBX8L8VLam7UvO3HmWqhS5pyWmWlszLKJmRn6fUJNyYka\\nnS5+WdbmZOoSEw\\/KPtLBS4XW3W2+s43LiOzWUOpKFgkFKgUqSRYEKBsQfG3ssTVLrTjDi2nk\\nLbdbWptxtxJQtC0HKtC0KAUlaVApUlSQUkEEXhYKSef17ouhvBDeQHcfgfhaG4dBaxwUfScx\\n6jmIvDyxxyPaO7KGmsoc\\/wAffFdoecD3d8eZFdx674Ieh\\/pT6j3xdt0dCvUO+GW0HOD7+6DX\\nT1jtHdnCcquR6\\/X1YwQ+2yOkjtB+GcXbRH4w9sMNZPT74rmOkesQWPI+yDrrf17IfbRH4wiu\\nuj8ZP8Yd8MMx0j1iDMdI9Yjyx5Hr9Y9sEPtoj8YQbRH4w9sMcx0j1iDMdI9YgseR6\\/WPbBp0\\nfu8ehq8LyOkn0H45RTbo6Feod8M9dPT7D3RQrT1n0d+Ue5TyPsgh2X+hPrPdFheWeGQ7B35w\\n2Lg5gfTu74oXDzAenf3R7kVy+EELlazxUfXkPUMhFsI6yjz\\/AA90WwrszxP2\\/KCFipI5\\/Vvi\\n0udA9fd9sJwQWQN5v13fbBFxUo8dwPoHX2xbBBBnA0SOvVvgggi0rA6+zv7s4sKyeG4eOeCy\\n1b9B1w58dfdCggnu65QoSBxMWFfQPSfHjohMnLefbz98JlY5t\\/WfHdC0tg8L953dd2phwIA7\\n+uUKE85PriwrHMM\\/HrPshMknjv8AHsiwqA4+rnh4IA36+4DroQqLySeO\\/wAeyLCoDrPRCZWT\\n1DxzxYVAcT6Oc+MoWBwA9QgjrXEnCq1sTJENVeX8lq0u0pFOr0mhtM\\/Jk6ykNuE5JnpILUVL\\nk5klI1nFS7kq+vbJro+aZ2kzoCVGTtetocxYwGU+WmrYqc\\/MiTprLzpcU5ZdfW1OTdl1Aq2j\\njlCm5ect6cddnHkUtc4+Kwz2KpZPDcPHH7IZzctKTsu9KTsuxNysy2pqYlZllD7D7Stym3mX\\nUqbcQobilaSkiNk6um1ajv4ZxZR5PFGGJo3dpNRCiZZyygJqmTiCJmmzjedRaflXG1tlSy2p\\nC1lYk+GcX13CVQYqNFn5iTmGD6C2XMqggkFbZCgpt1lwgdrLvodl3QLONHeJFOilyhGBmk1S\\n5b9Tq9JaZr6ZZLlSw2ux1ii4i0UNtbWY1KY5MPityMoj9lqlBma5R2gEMKn5d\\/WbTn3TLipV\\nWKRLzAQ+cs5V8hp\\/M5EJQgnVePUytYGfXEDu7dHGU+cW7lwyrc3ZlwyUyiekGGpuaZk2J1le\\n1ZfplQlCmqUOYbdGu09Lqm22lBHkzLABUnKXCDlR9MHRsmJK38dqCcabKZW3Lt1K45gyN3IZ\\nbSUN\\/NuJFMl5+Uqrh3zMw3ddMrdYmiENOT9OClrTyfj3yNJWrqfqmyHEDU8pYW6cIYheYp9c\\naUbKDMjPqLdMqoBJAL6qcppAHbTsy6So9k4J8pKi1VLMni+UVTpshKFVWmtqdl1k2HazdMCl\\nzDVhdTi5Bc4FrUAiWYQAImeQRqD0cOVc0ZscDIUmSxCbsa65rYMCxsWhL23PPTTyUIEtRrhc\\nm3rbrDjz5cYkJSSrrtVeKG1Lo8up9ps7NqbfNInAhMypUgtYBSpZD0qsEZjVmG0jIH8ZxDCO\\nPnZceK8V7O8Y4Jn10zE9AqlHnE5ilmekn5dbraCAXmA4gJmWTcZX5VT8uoWKHVA3joqlVSl1\\n2VE7Q6lJVeU9HM7IzDbxaUoXCH2kntpd2wJLTyEOJ4pBjsaCOKaeZfQl1l1t5lZCm3GlpcbU\\nR0LQSlXgb4ViFqSU6HQ63BBBFuBvx5jhGdHIQRx8EJgjkII4+CCCOdptSn6PPytTpk09I1CR\\neTMSs1Lq1HWnUZaqkqzIUlQJQ60sKbcbUttaFoW42e6sQ7J0etOfDxOEWkXa8oaujbOW7X5N\\nbNKrdEqz7aWlVixLkdamHKJV3djL+WUedbmqXWAywxOyVZlteTYx4gi5dj22\\/F2xyrOzFGLN\\nVoFRWj6ewrUlLVS6q2EdkXUEBapCopZ\\/Jsz7CFGyW25ticlm0y8RTFeDqPi+QXJ1NlOfIpDU\\nyEJWtsEhWRaF+i8wVAKU0u1lXW0tpyzgj6acvJP6QGh89V7xosnNYvYFyy1Ps4j21TnTUrXk\\nnFhLDWIdtsLmZu31NKUJddwSq5615lapYu1GnT843R2dURJJJJ385ifphvpEV62Eoo12tu3X\\nbikeTqMytLtWk5ZaS0Wmnn826jLBvMCRn15qSQlqbZaQGhhBpX8jjo16WtOqeJmirXKBglic\\n+XJudoMpIuM4XV+fdC1KYr1pyEuqo2BPuuhAFWtWTdpZR5TMOWlV5mbTUE\\/T\\/ZxtE2e7ZZQP\\nYGqqZHEaGlPVDAtadalq1LBCQXXKYpS+yqsik2ImJZxxLaFI86Mo8tMqniDH+xGuYXdcmZBp\\nU1Tiq6FoUVtEEiyG3l2La9bCXm8jhyq7J6Z0iHKpWe4cPf48dSKlZbuf3fb1eDkTpG6KuPmi\\nhdyrNxxw8rNnzzrjvzNWFtioWpc0s0ojy22LnkttRqyzqJS48zLzXl8jrJZqcnJzALAxxJ5z\\nExdlnpVxTD7LjLyDlW06hSHEnT6yVAEXGoO4jUaWilHGnGHFMutracbVlW24lSHEKG9KkKAU\\nlXcRfjxihIAzMIqOZzP6BFVHM8OHD08\\/phq65xQPSfh49ENgXNh6z3afbu6t6AEC53nh9nzP\\nRtdc1tw+qOfpP2Q2UrLcOPuiqlao6zw+2ESeKlHrJMZLaN2mg3d5698CRmOY7vj9w6vrFCdU\\nE+DCBOeZMVUdY59HDPm+0+M4auuZ+Yn\\/AIx+Hf6unPMSmw13nq0ORa6vXOQ+qOHWenu6u2G6\\nzkMuc+6LiQB7h0wgTxJPbDqE3N+A95gHv4W5xRRyHXzQgTlmSeskxVRzPVzQ0dXn5o4Diek9\\nHoh5Iue7jHqRc93GHVOp8\\/W6nIUilyz07U6rPSlOp0kwnN+bnp59uVlJVlI3KeffdbaRkcit\\nW7MmPTuw0tCmYRYSWDYEqWm6Phjh3atnyqmswymm2VbUjRWlNFYbcDSZWmAo2mqrV+tvJjz4\\n+TVwxcxf08dFuyxLCblW8WKBedVl3EhTL9EwzTMYj1pmZ1lBOxmqXas3LOZqBXt9mjWcWhKv\\nQTxirJo2G11zQIDkxTvmtvgFFdYfbpiwjdkVIam3XTvH7Hx3xX20muN0Kjzc+4oBFKpFTrDo\\nvYFEpLLeSDa6gP2O4NB6VxYEgAXXsopippyaWB\\/Rk7I01tViLHNmcCTu184Zv+iADuMajsfc\\nSn8PsJsZcWHXGkTln2BiBfiXHghSFVCi0Gq11lvZu+Y+t+dl22mZchRmXHENJStSiiPPfG2m\\npga61uzEw95y1qUtbjry\\/OW4tRKlrWtWalEkknWI3xMw5XTEY2DoNYmyjDqmahiHVbQw8p7i\\nVgaoqtdlaxWmlJIO0EzbNv1+UKApC0B\\/aecltSFw3bdl\\/Ka3TkZZhD4eVvOQEsC+M8uAzbA3\\n5gk6uWajlUfkK0VcpgPHGL5lJMxiDEyJMurALkwzQaemZ7YrNypCpyuTze+\\/atu6WNzMPKBq\\nKHK\\/RqU2q7VMpC5gpBOVDs\\/MFKkZbAJV2EjLqKhfMlSBvSY7rQhLTaG07kNoShPUlCQkewQm\\no5nP1dnNF61cw9PdDZ1eqNUfWPsHT2+OaOuUjeo7z1745zj7PDSx6tiniZh5hlQW3Ha1iJfN\\npWHRmmQFOu1W7q\\/T6BIIbByCnFzdQaShJ3EnrJj1maLRaZblGpFv0WUbp9GoNNkaNSKewF7C\\nQplLlGZOnybO1UteylZRhphsOLUrUQPOJz1vNw5F3CoYu8phosUd9gu0+0bzqGKtRe1FKRJn\\nCu26zfNFfd1AdVLl0UWgSTTihqomJxnPcI9KiOh9jkl2dMq8+UkGanWZVKiNSmUY7U5TfVJV\\nOHUAaptc20mGGGrNTT9vrOoaB0NuzSVqA0vr2qSRexsnTSCCCCLkiUQQQQQQQRD8+U3YVuSe\\nImi9jawwlbdw2Xe2FlWmkN5Kll2ZXJO7rfl33CnIpm\\/u8uZcm3rkjyKdUUDcVzA40VfKFMJn\\ncQeT6qN6ykml+fwTxUsK\\/nphDSVzbdDrL8\\/hrVGmt5e8lXNX1SKhPtNlaQ1S2p15KWpJbzEH\\n2j076SwXXWQkqcYlRPt2GoMg63NrI0OpaZcTbiFEabxqK8z29KmwASppKXwQLlPYrStZ3j+p\\nhY7r34RBGac1vNV9bm6\\/tHP0+uHCVZceB5+jrjjQcsiD1giHja9cfuhxHxHjcfRHExFxY8Yq\\n6HoJBzEbgOSkvMIquLlgPOkmcp1vXjTmdfINppczNUWtu7PeFF752oHnpy1fJvP19ZATp5Qr\\nLceHuPd46YzQ0Br1+4zSdsMOvliRu1us2ZPHWKdp89U552ks6oI19pcMjRUhKhxOeRWlMVbt\\nkoRr2zPGMilGd1qkOVNiwJUXqO61VkIRbXO55mWgBqrtCjULIM82YVUUbH+F51SgltdTbkHl\\nE2SGaohdOcKydMqBNdoSfqlGcWKQYmt6Ftf2tFvS2VblSNUp9cl0n8MVOVXIzZQnIZBo0iV2\\nh\\/8AnhoDPiIpnym3B9Vp6XWD+McpIKlaXjHgymizs5qKDVSvHC24p2RrDiXdbIuy1p3ZYEs4\\nyB9GhDKyoh8askDRNuL5nxYlqY45qs3NRarSAFABHlDCG6xLqK+ZZNNcYbP4zwb3l0A4JfKY\\nsHPuz0MsN8X5OU21TwVxkp7M7MlOfkdm4mUibt+sHX3FO3u2mYftZDMKz3ZKCdavvJYxJ2tJ\\nw5LrdKlSszUsPvjUg9opU3JIOgtlTMyTfIhAN73MdA7ZKXcVNwJ+s3KVNrdvbKWHyL3P1UTC\\nrgA3UQfRiJHhzUPnCzaK4VEuS0uqQXmd6PIXVyzSeb\\/5XQyQN+SVAc277xKtbt5\\/HjfHQ+Cd\\nTU5TazTFKH61nGJxCfwtSdZ2K9XPfklcmCocAV\\/u47yB5x6I6PrLHm1UnWhu7dTie5LwDyQO\\n4JcA9UcgzKCh90W0zkjwV6Q9x6sYdJUU78swebm9nDu9ELg8FJPYejj1cYaJVrcePvhRKsuz\\nnEalSb+Px667sVSb6jf8Y5FtwKGRyCvVnwGcOELKD0g8R8R1xxgOe8GHTboOQVuPMeY9vRGK\\npFtRu4jlHgN\\/RV7evjuI39\\/KpUFDMHMeNxisMUqKDmPSOYiHaFhY3cecc4hEJUm3hwPzi+CC\\nCElIPjwMJi9K8tx3j2wqDnvBhv2xUEg7vsPuhogjfBDsL\\/G9ff3\\/AKYUB5x6IahQPUeiLwop\\n4ekQ2UA7tPh90Hh111aHYX0+v7IUB5wfSIahQPUeju6YvCiOHq5oaItoYQUcRoevZDtK\\/wAb\\n1ju8emFAeceiGoUD1Hoi8Ejhughu1tDp18PC8Ogs8+\\/r5\\/HqhQEHgc4aBY593X4+2FAecH0i\\nEFAO7Trl+qPIvmZeXnpZ6SnZdick5ptbMxKzLSH2H2nBktp5pxK0OtrG5SFpUkjmjEy9dHio\\n0Wryt9YK1ieti46ROIq0hT5WqTNNmpKoS7u3YnLYrjTzUzS5tlwBcuy8+htK98vPSqEJZVlm\\nFnn3jq490KBQPA+jx8I2VLrNRori1yjoLTySiZlHh20lNtKBStqZl1eg4lSFKRm9FwJUoIWA\\nTfKlJyYk3EuS7ikkKBKQTlUQQRdIO8fmqFlJ\\/NUDHeuh7ywlx2ZU6fhfpgS1TkpuneT0uRxe\\nk6U63VpMpUGmxiFbsrLhVQldnkpVx0OVXMPIaDlQotSXMTNWTJFw7xgtTECgUa4qPXaNXKFX\\nZRqcot0UCflqlb9Xk3FFKJiWnpV16XSCtK0LKHCyh1t1tZYWjZIiGXxhvaOIUiJS46Y28+22\\npEnVZbUYq0gSc\\/1rOBKlbPWyUqXmEPSjigC5LuFKcut8K8QtKHQcrsxcGD1xOXjh1MzQmq\\/Z\\nFSZmqjb1QYT5y11S20TCX6XUdiA390ltTUvOajQE66mTCpFdGbTPJtwLtLTMVfApk8D4vcu4\\n7h+YUGsM1Z7efouZS2foWYdUfRllNqp61ltlqXlbuzkdP7OfKCnaZ2FMxMXZ+TGVCJtSwqeY\\nHoi6nFlKZ5CbaB1bc4ASQ\\/MBKWTOSSpKkhSSFJUApKkkEKBAIIIJBBBzBG5Q9Bj6m1rqrtn1\\nWXq1Bn5iSfadZcfZbfcTLT7TSwsys+ylaW5mWc11JLTqSBrlbZQ5qrGlXQx5UDB\\/SKap9tS9\\nSTYuJTqQmawtu6faSak+E6zjli18pYlLgaKUrUJJlqVrjKG5h+Zt5MohNQc2v0S5qXXUhMs9\\nspoD6SSeIQ+kgEqLYz1X292ttGVHJOrtUtK8yPn5iXBmOtleIxL1aRquHK5Sn0TMu+A5LTDS\\nkLPYzcrMMqUl1hZSQ1OSjz0o8MwbfcBjsOkVqhYrpvnFPmpWoyM0gtrQMriDmSCtl5pYC23A\\nCM7DyG3kXBUhNxfrvlmtHeRxnwCsbS6sOnIeuDDaUYpN9CWbSucnMOa5USy07OKQVOTD9hXb\\nMbJaW0FLFNr1wTsy9sKc2RFqCxz5iJzmANZoN1Ue8MDb8lWKxal+0WsU8UqdK1yk9K1WmP0+\\n5aC555KWarSXHXEoa2SQ4xOKQfKJpOvDn0sdH6uaLmkDiRgrXfKH2rUrbq7bq77YSbhs2qpF\\nRtOugoGxL09RpiV+cWpdTrclVmalTSvbSLuX08wVi2U2l4Cw5jeW7NM69LopGJpdnL+w8Q01\\nppmbzISSG25tvs52WSdRKTErmOdZj5+7ccELwvil+YbbUJOeXmQ5awOYFUu5fcVOMpUy5YG8\\nxKTCybrF8fQQeBEVhtmDz58\\/XF2soc59\\/vjblux0JHiNRFIlvkfbC8EJa6uo+OrKK7Tq9v2Q\\nWWON\\/Xf4x5kV3HrvhSCLNcdB9nfFddPT7D3QXWOF\\/V4cut\\/qTlVyPx+EXQRTMdI9YgzB4EH0\\nwZlcU+4jiOvEiCx5H2RWCCCDOf0fj3fP3j1+WPI9frHtgggihIHEgdsGc\\/o\\/Hu+fvHrLHkev\\n1j2xWCKZjpHrEU109PsPdBmXy9xj2x5H2GLoIs1x0H2d8U2g5h8O+D0zblpyH3+Pw4R7kVy+\\nEKQQlrq6h4684t1lHnPu90GRR3n4mPQg8SB74WJA4kRaVjmzMI5gc+XP1xbrgdfu7OYwoNjk\\nTw7r9d8KCBxuYWKzzbvb49UWkk8TCJWeYZe2LcyeJJ9MOBvwHvPDrfwhQAG4QqVJHPn2b\\/si\\nwrJ4bvaYTJA4mLCvoHr8d0OBAHf1yj2FItKwOvs74SKiePq5otKgOJ9Hj4woDkPZBF5WTw3e\\n\\/wBf6IsJA4mEys824dfHuiwnnJ9JhYQTv0+P3QReVnm3dfE9w9vxiwnLMk9pMJlY5t\\/WfHdF\\nhJPHfDgAG4QRepf4vrPd49EJk85PpMWlYHDefHPCRUTx9XNHsKCSe4c+t\\/wi9S+j1\\/ZDaYYY\\nmmXZeaZZmZd5BbeYmGkPMPIUMil1p0KQ4gjiFpIOfDKLyoDuEJFRPH1QtKVXBBKbEEKGhBGo\\nI3G\\/EH3w6ABa2hHHjcEHf6uFvbHQV4aOdhXHtZijsu2pUFZqDtKAcpq17\\/2SkvLDLaP\\/ALHI\\nOyAGrrapGetyWG2Lum9onllrCzEWrXLZMlqZWhNkXfbAlWsiJZqz68l+bohd1EbR2zXJOaKE\\nNtme1Ds47oUoDdxPjjCRJPGN47WFVCQVSMQyFMxVRnLByl4jkmKrLmwsFIMylbjbqAfyTgUe\\nxNi2kERvqRiWuUKZbm6ZUpuUmGrBD8vMPS76U6XSH2HG3rGwunOUHQFJGhzSwN5ci3RMsUbH\\n\\/DWv4f1dK0S85c+Hbr1ZoBeUtWu9VLSrT8vcFHlGEBKVtytQu6cdWQsS7aPMRujwV0zcHMcZ\\nFubw0xIs3ERCWdu9JUipokLpkWAvVL1VtSoNydepqMyNQT9Gpwc3amsN8RYLksq1LuZLFxUK\\nn1MlOomZdY2c8ykjhL1BgszsuMs89jMISVBOYVqgR0DV9GxuSnmqzh9ddTtyqyjwm5Hyl58m\\nTfQc2lyFXp6pepSCmjvbcKJx5O8B0lIJpDFnkz7GcZhx+kKquzqquXKUNlzEGHitVifyD7rd\\nWl8yxolmoMyrKVECXKUpSnoTC3lM4kkA3L4ilJSvS6QlJdfSJKfATYAJnpNotKunRSpinvLU\\nbKU9fOVTvqfdtCqBSlE4mWcV\\/epzKXVmfwQtSiwvf+Ah5avXH0W4hJCgpKgFJUkhQUFDMEEc\\nQd3vGecQpsPNPDT70dC1L3BVjjHaMqENmWv6XevIpYQC2t5u7qbMyV7y7pGrsl1ypzUq24ht\\napFQddS9sywL5bzBmvpkKfihRbwwaq6tmiZn5QLvyxNoUjXmFu02UZuKVDz3nCX+5KfRKoWE\\nu1N8treVy9jLyOdqNAbensPMSWNqUi6kzeF5kVJ8JsVJS7SyhirJeIHpNSsnPJQQU9sr0Sro\\nfDm23Z9iINoXUl0KaXYFqrpQmVzEC+Woy63pNKAT9aaclVkXJbFjEiaCMVcKNK3DXFumJq1h\\n3tZuIdOS007MTNn1+RnZ6QS6c0pq1JTMOTlMmSRqmVqDFOmEKBSphKgYyBp94UCo6qWqiiWd\\nVu2M8PJlncMglbitg4rPmacV0745jqmHK3RZl6TqdNnJOal1ZH2H5d1p9lQ3peYcQh5gjeQ8\\n22ba2tFsS62JthEzKTDE3LOjM1MSrrcww6k\\/nIdaWtChfS6VEd8fUwRRJCgFAgg7wRvBHj1R\\ndmek+sxpCCOHt05d3L7OcOdn3+774pHO0OvVq26izVqDUpuk1FgfRzcm6WnCkkKU04B5j0u5\\nqpLjDyXGXQAlbauA4PM9J9ZgzPSfWYflJuckJqXnpCamJGdlHW35WclH3Zaaln2lJW29LzDK\\nm3mXW1JzIcbWhaVAEEGxCHGG3W1tOpQ604kocbcQFoWhWikrQq6VJI0KVAgjeIywXixhfjZa\\nM5hXpL2Dbd42rWkoYnlVijMVSgzD2TjbE7OUt1pyZpFSlg6VStboyxNSLxMxJpkVNh2NL+mD\\nyBjFVkp\\/E7QVvGVrNMmmnqm3gxeNcYeS+1quuGUw8xEmHfJphWuGmJSiXy5LFtImHpq+HXg1\\nJKzwzPSfWY+zsvEW78P53y22aw\\/JIW4HJmnvEzNKnQMhlOSDpLLisgEB9Gzmm05BqYQDme5d\\nlvloVeSZlcP7Y6W7jSkNBDDGKZDsZfGNNa0SFPqV2MpXG2wBcPrk5xxRU\\/NTU+4Etmj8c7DM\\nP4kS5M0xLdPnrHK0QoS5N9zLwC3ZXUkhspmJW9kpl2xdUQjsTMNcQ8HruqlgYo2XcuH96UZS\\nE1O3LrpM5RarLNu+dLzKZacZaVMSU439NI1CVU\\/Iz0sUzMo++wtDsddkgD3Dpj0G8QGNFTTR\\ntSXw80p8Mbbnn2kON0atVBL8u\\/Rp6aRquz1r3rT3JO4rOmHS225MNGfZp8yG2GKjNVFsFk6A\\n9MnkAMXMOm6jfWiNcbuOliJZfn\\/uBrr1MpuKtKkwFvBukzrAkrYxCYRLI2gckEWzXpp51mRp\\ndsVZ36dfdOG5zC2P6R+EGzfEkhi+kpCTNMyauyrdLWsApl6pR3g1Pyj1gcqXZdpbyUl1posl\\nLh49xZsxxLhOZW1OST62gVFCgi61oFrqb7MramUJuApyVddI17RtkggR2iSTmYQUrPhwHP09\\nccxctv3DaVcqlsXXQqzbFxUSbep9aoFw0udolbpU+wcn5Gp0qpsS0\\/ITjKsg7LTTDLzZzC0j\\neI4FxeoP3R4D4nxvPpjJDZQSFApUm4KSCkpI0KSDqCDoQQLG9xeIBa2hFiNLbrW4W4Wi11zV\\n81P1ufq+0+z1Q0JyBPRFSc8yT1kmEVKz7OYd8OJTmPcN8HXzihJUSfAhFSs9w4e\\/9HjqqtXF\\nIPbl7u\\/m3c8ILWEDPiTwHT9nXDwHAeA8O\\/rdHo104nTw69w91jrmqNUcTx6h9vqhoTkMzzRU\\nnPMk9ZJhFR1j1c3jrjIQjhw3kw8BYWiQJ8nZwnVdmlniTivOSa36dhHhJNyklNhoKbkbuxFr\\nMpSKQpbi0q1DMWtRr6YQ03qOukrVtgyy6w9Kh0oa35LbFAoiXCldWrDs6tKcs3JakyhC0KHO\\ngP1GVcOQ4tDPLgdR\\/wAnYwk+5PRSxLxZmmdlUMXcWX6fJOagymbVw3pDNKproey11FFz129p\\nctAFDQY1kEl9wDYnpM1xM\\/fkpSUKzaoNFlW3EHM6s7UVrnn1HfkAuUXTiOcaoIIJ3cjeU9iT\\nzHCGJWm3FB2eMhh+XG4Hzh1t2dRvFwZVuf0BIP1jdGeOrditIytUdakfW86qr2nEktyyu\\/Tz\\nXf4aG0RXOXtxIDVC0fcJZWZKhP1e8MRK1JBaQW\\/meSp9tWxNrbAzJf8Anu7mm1kpAEu6jNYX\\nmiPTY7W0qMzMEbpeUKU9Tj7iUpJOX4iHRl0mNi\\/LGYlG\\/wDTZuuisTKZmn4WWhZ2HskpsBDe\\n3Ei9edWB4a8xL1q8KhITLygFlUiiXzUzLsqjAGx5fZ06ZmSMjMzOqD0tsIAB7A446OPNHQvk\\n94c\\/BTYJgORW32czUaOmuzFwUrW5iWaerTfaiwOduSnGJeyhdKWUoOqTFT7VKoKrjXEkyFZk\\nMz30azYkoCaa23IKLepGRa5dxwEaKUsqt6Vo+1UoJBJ5vb1emGJJUSSd54nxzCFHV66t3Abh\\n18Mz7IbLVzD09nR6fHGLNAzW7\\/d4xWcSfvkvOEiri0lNIfGuYlkOyeGOEFFsWSddAIlq5itd\\nLdTZmZcEAmZRRMM65JuKQ4NlKVJxKx+uW1Jm7RHL+TP4PpsrQbvXFSblnWqljbjVcU3IzRCQ\\n3NWhh\\/TKXaFJQ2NUrcMtdbN+B17XCCXUMJaSphxyYkaR1ns9kfMcJUlJFlzLbk6s6el526t1\\no3G\\/9jlkXJJ0sbWsLCojPZU1i4sp3O8rvzrOU6gf1MI567iRaCCCCJpG2gggggggjGzS+wiR\\nj5otaQmDiJRM7O4g4Q35b1BYLZc1LqmLfnnrSm0NJ3uPU+5maRUWEADWdlmkngTGScEMzDDc\\nyw9LPJzMzDLrDqf0m3UFtafWlRHrhDiEutuNKF0uIU2oafVWkpO\\/uMeTHvQopUkpyJSQQQQo\\nbjmDvz6R6utUEggg7xvHjoMZf8oTg9+oLpu6T2FTUgulU238XLpqVuSCwdaXsy8ZpN72QgEh\\nAWg2jcdEW24EoDjag6AEqjDpKstx4cx6Ps93Zw4EqMk7Izs5Iuj8tJTUxKOi1vyku6tlemov\\nmQdLnS2u6KddbU0440sWU2tbahxCkKKVDXXQjj845JCwodBHEdH2R9JZ9yztoXVbN1U8lM\\/b\\nFwUW4pBQWUFM5RKlL1KVzWnJSSl+VQQpIzT0bo+PSopII4jxkeqHiFhYzG4jiOiNW8y1MMuy\\n7yA4y+2tp1tX1VtuJKFoUOIUkkEcjA244y4280oodaWlxtadFIWhQUhYPApUAQeBETNsML4l\\nJKt2JiDS3i9S0zdv3NKvNZ5zVHmVSs8pISkklE1TH1NOIRn5rpGZ3k7AeUTwZTpFaDOlBhNL\\nS66hULlwfuarWtKsIEwqdvCzWG77sdhtIz1kzF3W3Q29o2FKCV7VhK1JSI0VaDd9\\/dzoy4az\\nDj5fn7YkJqyKgknX2KrWmnqfSmVKBJUTbooz+asinbagzy2ipKGCFy\\/dXhTY9XU4XXxQ2KXO\\nOKV56p2iLXRppxzocfdkVTWeeeTwW0NmpMcG7HJiYwdjHGWEnHFJfoVZ86lc2mZyj1BUk8\\/u\\nIIfSZBxKwkApCTYhdo7sxUpjEuGMP1xIBYrNKbQ9l1CRUpJEwGiATlUyozKFJJuld03Bjyxs\\nIqomTu1EopWSKpIzUoAdw2zQTOtnPMDW1ZZ1pGeeanQlPnFJjKxKinflmDzc3s4d3ojr7TJw\\ngc0W9NfHvCVEo7I03DXGm5mLdYdQG3HLEnKuuu2S+ttBUG\\/nGyKrRJrZoUrJE1kFZZKP27Tq\\nVBOagpJAKFA5pUDkRvzIKTnmCdxHqj6E4nQ0+5IVOXJUxUJJp1tVvrCyVpX4ll1rTTde\\/COI\\nKqwZaZU24nKsFbTgPB1lZQtJPcba8N40McgCDvBz7OY98KpVnuPHx7fZDMKI+MLAgjMRFbff\\n3fd9vqvqVJKe8c4dAkcPHbCwUD29ENEr5j6D3+O2FAcsiO0GEqSD48\\/nDakhXjzh826R5qt4\\n5j0dvTDoHgQesGOMSrPcePvhdDhQekc47ejojGW2b6Cx5c\\/Dq0JBKdFDTdfreOu6OWbdCtyt\\nyuboPdC0calaVjMH0HiIcIdKdys1Dt3j18ezOGo8KOKdRy+Xy3w6gigIIzBzEVgIvoYRBF6V\\n8x39fR3++LIO2GlI4j2cfVz63wQ4Bz3iLwsjjvHthoDlkQesEQoFjn3dfj7YbIB0Igh2CDw9\\nI5x2xeFEdY6Iag84PpBhQLPA+v8ARx9Hthsotu17uP3x4RfQi4h0FA9R6IvBI4boagg8N8Xh\\nShz59u+EQjJ+ifUfUbH5H9ToL6fX9njsi8EHgYahYPHd7ovghBBG8Ede\\/wBsOgpQ58+3fF4W\\nOfd7fHqhoFnn3j1H1xeFg8d3jp78oSUpPC3hpHkdN39gRZ17OqqskhdrXMlaZhmt0RIZ2k0h\\nWu09PSTZbafcQ4NoJlhUrPleSjNKCQiMlMDOUJ0lNF1+n21pA0yqY34USimJeXv2mTK5q\\/ra\\nlGlKSh9dYmywqvbJGqpUndrkpPuvBKZW7NgyGXPkgecH0iDW1gpCwlaFpKFIWApKkqBBSoHi\\nCMwQcwRwhdXYpWKKSKBjCjyeJ6MkKDDM\\/mRP01SgAXqPVmrTtOdASlJDTimFoSGnWXGlLQqW\\n4YxtiLCU4ico9QfYUnKFt5szTzaTo082vM280NcrbyHEIPpICVgKEknRh038OcYqfSr4wpvq\\nQuxujzMhPPty7pkrutaeQ5tZaUua3Jsy9QlFlxh1tCphluXqiGn35Cfqcrk472hyveDNv6TW\\njfZWmThcy1U7rwiZRbWKclTW1PT8vY9VmRMPioMEeWA2Hc06qcYKmG0G3Loq9emXvIJJtSYi\\nbmGTdCuNi\\/cKLkruEOIEiFrk7ksqcfkGlrdAL7M7TpV6XadlZrIInJdhbEvOJKkTzM2jWbVt\\nR0TOV2xT0f56oWZpbYes4hYT3lS5y0cRrysaSdmbdu60avKTdMqTd+WHIS4mqZNfNs5NtKr9\\nsSbLcumZXIytvTso\\/OCbgGAtnA2YVetIwlNzGIcB4rabbq+HZpLbOKcOzzCryVbpks32chiN\\nMqbtzrFKMrVp6V7MNUaYflmkuXtWNpWHtrGHU0TERZoWJGG1CQn3Afo2adOVSWXXjndkip5K\\nVNKdU8wizvazMu08tKcEYrrKHOff74+wxIksO6ffNytYQ33S8SsLnao9PWBelLmmZn52tGpB\\nE\\/QxV2milVNuin0+ZYpl10V9DUxRrjkqpTHW1GW11fEBShz+vfE7fZUw64y4BnbWptQsdCk2\\nOhANiRoeMcwPMuS7zrDqcrrLi2nE3Csq21FKgFJJSoAg2KSQRqCQQYc66uo+OrKK7Tq9sNto\\necD3d8XbQc4Pv7oYyp5fZ8Ibhxrjr8emK66en390N9dPT7DFdZPSPXHmQd\\/XqghxmOkesQZj\\npHrEIZg8DnBHnZjmeuj0NSHEEN4IOz7\\/AHffBDiKZjpHrEIQQdn3+6CF8x0j1iKa6en390I5\\ngcTlFNZPSPXHuQczBC2uOvx6YptOr2\\/ZCOunp9\\/dFNoOYH3d8ehCeXvP3QQtrq6h4684t1lH\\nnPu90Ilw8wHp390UK1Hq7I9sBwHsghaLSpI5\\/VvhEknjFCpI5+\\/1DOPbE7heCFS50D1xbrKP\\nP8PdCJcHMD6d3fFpWo8+XZ4zhQQT3dcoIWJy3kxYVjm3+zx6oSJ5yfSYsKwOG\\/x092cLCBx1\\n90EKlSjz5dm6LCQOJhIrPNuHrPri0nnJ9JhQAG6CFCvo9f2eOyLCSeO+EysDhv8AZ8IsKlHn\\ny7N0ewoJJ4WHXr+zlaFFKA6z0QmpRPUOiLCQOO6LCs8B6z9vD0+yPQCdw9fCHAkDvPPrQfGL\\nyQBmT6Oc9kJqWTw3D2xYTzk+kmE1L\\/F9Z7vHphxKANTqfd11aFQoTlvMJKXzDd19Pd74sJzz\\nJPWSYIcAJ3D18IIIIIIdCQO884IIIoSAMych1w1W6Vbk+an2n1cB1e2FR6ATuhVboTuTvPTz\\nDv8Ad7o69uTDiybr2i63b1PfmnAdaoMIMjUdxzBVPSRl5hwJJzCHnHGt6gpCklQV9spYSMye\\nwQ0W4pZ6BzDm7T1xkSz8zLOB6Vfel3E7nWXFtLHGwUgpPqvbnDqVlk3bWpK9PSSopI7rggi\\/\\nXCMaJnAKp25VGbgwwvms2xWZB0v06YXPTlOn5R\\/NK0Kk7goa5WfktmQEpUiVedyCVl1SkK2m\\nStgcoFp54CbCTuqcl8YbWlPo9nfFOVcsyGFEKceTd9Bfp92JfzBS2\\/ck5UGW17jJlKkIVYpQ\\nHDefHHu\\/TCRJO8xsKo5TMTyyZLGWHaDi2UQkobNZpzDs7LpPGTqLaETcq5v\\/ACzS+0sSArXS\\nVUDG2J8OPB+kVedkVEgrMrMuy\\/agWsHkNKS1MI0F0zDbyTa5STYjZXgry3ODdaTJSGJFBvjB\\n6pOOtNvz0oRf1lNaw1VzLz9OlZS4Gkheaiy1Z84W2v8A5YdUg57b8JtLjDPFymtVCwb8svEK\\nULQdeVatwSbtWkWyrLOq0XaqqNNfzyHk1QlKa6AUrU1qKbK4l9w2DZtzhZrFv0+Yec1s55pn\\nyOfzP4RnZQszSik+cEuOLRnxQUkhXTs\\/gEaVPsVqwrvq1u1eRcD8i648+iYlZgJKQ7KVemqk\\n5+RWNZWTiG33AFKyVuziicUeS1sdxV2jtDnKzgWfcuUsvpOI6MgkXSlKluS1aTdXoqdeqLra\\nE2PYqN737hvym8QyhbaxDT5GttCwU9k+jZ5R0GsxJtrlCLX0NNSSd7gBidxIXzQKgUpTUDJu\\nK4MT5VLKB3AAPKKpYk5\\/VRMFWW7KPqkvlxKVNulaVeclaV6yVDIfVUFaqkk7xuzHAZ88KKw9\\nNrT5wK2TM1cy8XLblAhJkb6lVX2l1tCUtlw1uWmKdiClSW9+vNVjydKs3nGnFbQnYDg7y3Fk\\nLcYp2LWHt4Yb1FCEtzVas2fRddAcmkqAddnKLOpotYpsqRrKEu23cj7awlpSlJzcTzfizyNd\\npdHQ7N4bFNxlT2wF9th6dZmphKPzQ5TppMnUO23AsyrM+pJ0K1AEi+MP7d9n1dCETE7MUKYV\\nYdnUmM8sVG1wmeklTDKUWuQua813EWBKQqS5tHP98X\\/GV3wbRz\\/fF\\/xld8YFYM6eOCuMiWEW\\nDijY98TjqGlpoqKkLfvEpWE5LctirtU+toCdYJUo0RtCXQpoKK\\/NTlnTcR7dqBS2++\\/TXlHL\\n9eIUWdocgdV9kuISknL6R4Mk5EZcI5nrWCsTYdmnZKs0eoU+bZ\\/bZWbk5iVmmxzXKTLbM0gd\\n62UjfxBtbklPSNSYRNU2ck6jKrtlmZGZYmmFfVuA6wtxs99laZtY7C2jn++L\\/jK747Ww9xlv\\nvDZ5pFGqzk3Rw8HJm3qmVzVKdSV5uhptwl2nPOnPN+QdYWVpSXg+gBB6jBCtVaVApy4g7iM+\\nbdlv9vNwzi7I9J9ndGPhrEuIsHVaWr2F63UaDWJQgsVClzTspMJGZKltLU2pIflncoS\\/Kvpc\\nl5hu7bzS21KSUT0hJVKWXKVCVYm5ZzRbMw0lxBIAAUApJyrTqpK0kLQTmSoKAMdZcsvoOUXS\\n6wLktMrAqiKmsXsMrZW\\/edGpraDUr8w0pSXpmr0+blGd01eOG6zOVCmqZ\\/XtVt\\/53ozXzu+1\\naUpLwxiSSSTvO8+OgR6DWjXi6qwroFu1uaUi07nmW23lOrOypFZXqMSdTBUdVmWfBRKVNZ3b\\nES826tKJDVXGJ5afk+zohY6\\/qpYc0Qymj7jnVahVLeZk2gJCwcQFByo3PYCksoS1IUuY1nri\\nsiXUmXbNFcqNDkWn0WhOTTv2Q2Z7RpDbXgCTxxKhiXxLTPN6Tj6ksEDzWroaSGqtLs3K0U6r\\ntjziXJ9BCu1lAt16Sm3I4A2zbPXcJ1t2blm1qp02e2ady6KZUoJQtagAC80oiXmrWKl9hMFI\\nEzcaVVKz3Dh7\\/HjqSUrLcOPu6+0+N2UClZdvMO+ECchme0nj7fjEtAtoP1xSHQiilBIJMM1K\\nKzmfQOYCKrWVnPgBwHx7YQUviB2Hu8e\\/hkIR7Tv7h11uh5KbDXeerRRSs9w4c56eyG7iwkZD\\n6xHqHXFy1hAzPHmHjx7csh9DzBxzSE0p8A8HFy5mqffmKNp0u4W0ILim7Ql6mzU7zmUs79qZ\\nG05GszmzUUtrEuUuusoUpxDrjjcuy684crbDS3nFHWyG0lSiba6JBO7hDzLS33mmGxmcecba\\nbHNbiwhI9aiBE\\/Xk+MIDgRoUaNOGD0uuUqNGwqt+tXBKLb2apS7L5Q5fl4yikk6xMvdVy1do\\nOKCHHggPFppSlITjTiZc8rVbtvG5pqbYZppqNTmzNvuJbYYpNP12peYfcc1QhpmmyrbjiyoI\\nbSlf4O+NlWIVd+5qyLorQcDbslR5zyVZOrlPTLfklOBOW4qnpiWRlzg+iI6vKFYnfqR6GuPd\\n0NTCWKjP2TNWRRlBwImE1PEKZlrJZfkciCqZp7VdmKsgJJ2aJBx9SNm2uPnBt0em8Z4owHgS\\nTcJnMTYibedQAVFMzVp9ik09woASMqHJmokqUlKQEmxAC7dzYKbl8P0Ks1ZY\\/Y1FpPZNk3AL\\nVPlDMPI\\/OIKktS4ABJureSReGJjViFMYs4wYo4nTKndpf9\\/3bdraHs9aXl69XpypScokH6jc\\nnKTDEq03kA00yhsbkxzdGZ8jo1PlwAFGWS64Ohb+b60k556wU5qkc2WX1Y6dk2DNTctLD+\\/v\\ntNHqC1pSo9gBJPUI7v3JGQy1QAAOAGQyGQ6uAj6jzctL06QptKk2w1KyUuzLSzKdzUvKMolp\\nZsdyGk5BpuTpHFtQfcfdU68suOvuuvurOhU44oqUojmpSlHxJ9Vqlao6+aESeJPpipOZz8CM\\njdDnBhWkZpXaPGB+wW\\/I4lYvWLbdeDaC4tm1X69Jv3dPag+uin2tL1ioFO4KTLqOslPnJYlJ\\nZyZfYlmhmdmXmmUDmt1xLaB\\/jKAjBSkrUlCRdSlBKRzKiAB6yY9I3k4sG14B6CWinhc\\/Krka\\npQsGLPqtxSTiA0qSvC9ZL7ub0lVJCUFQlrsuSsNbVxKHH9QOvth5xcZuwQR2pKy6JSVlpRrR\\nqVYZl2xa1kMtpbRprb0UjS8Wk02Gmm2k\\/VabQ2nS2iEhI08BBBBBD8OQQQQQQQQQQQQRCF+U\\nm4KKszS3wwxqp8ktikY2YUM02oThSCmevjCypqo9YWFgApSzZtew7lwysKXrMOL2y0rLUvHX\\nSrPt5xE575RlgkrEPQeo+KtPk1v1fAPFG3q9OTKGtqqXsu\\/A5Y1eZ1UgKQhy5KlYs6899Vpm\\nmr2qCk7RmC2lXBST1giOPtqtL+jcZVBaUFDVSQxUmtNCX2w3MEG+uabZmFbkkXtawBNZYgl\\/\\nN6pMWFkPETCdN\\/apBcPAG7oc9mpveHaVZbjw5j0fZ7uzgslRScxx9\\/UeqGiVZ9vOIVSrLceH\\nMej7Pd2cK0Um+o38Rz+\\/4+O\\/SRul5KfEBLshiphjMzGqqWmaVfdHlczmtE20KBcbpOeSUMql\\nLXSnV+uXl56moNaU1oV3Qmati7LSdXm7RqxLVmUCl7zKVmWMu820nIFLcvNUwuuZZjXqGZyK\\n98IbQQv02FpN4fLdfUzT7wfm7CqIS4W9v90zKWaPLqyzCwq5maEvUP1ltoKPP1Il26Kt0\\/c7\\ni7TJN1zZyt0U+et5\\/WOSA+4hNSkFap1s3XJ6nsSbZH\\/10CMkF0xwxtPkzg7b5I1VH5KSxbJy\\njrpACW+1mmlUZ9BJBGYTspKzzutgXsxUAs27J2WT\\/wCEGyd+nKVmmsPTc1Lpvcudi04mpsKt\\nfVJYmnpVsADRm2uXWN38pdwLXYmmXh\\/jfI012Xo2PeFEk1UqioEtz9+4WTSbWraG155Ayljz\\n+Gbamss95WFKSvdqLsepirWrRZoqCnUyaJN855K20kTKOLXvJCnNiHTwBCyUpSkpiYh8o+wG\\nVifoJ0\\/FmmU8zFc0dsTLduebmkELmGbGvtxOH9yyrTOsFrQ5cVWsWqzjjaHVysnRH5l0JlWp\\nl9mFTg3UyuRqtJUvzpWYanWQeJbmkbJ4J\\/ctuS7alAgec\\/mM8zl23hecFc2eU17OFzFEmF05\\n4jeltkpSygjeB5pMSRP9oTawjnTaBTfNqvOKSnKh9bc82bWumZTZ4+BmQ7qL7tbnNHe7bpGQ\\nUcxwB5x29W+HQORzHr6R8RHGJVrdvR09njOFkOFG7iOjo90YqkG99x61\\/VFeBRGihp9n2iOT\\nCtbpz6Off74vSrLceHuholQUAQd3SOI+0QslYOQO49PN6eg9Xqho+zn4\\/Z14QKRxGo5db4dA\\ng8IVSvmO\\/r6O\\/t4w0BIO77D7oVSoK7eju6YSQDvhsgHQw7BIIIPqhyh0K3KyB9h7jz9GUccF\\nEdnOIWBB7ecc4hhbf3Hl4jr2mEWUnUajrh9o+EcklRScwcvce0Q6Q6FbjuV0cx7D8I4lDqk7\\njvHt8d+cOUqChmD9nbDBSRv9sHor7j17fj6o5KCGiHVJyB3j2gdR5\\/T68ocpWlQ3H0c49EeQ\\ngpI3+3hF0EEEJKQd\\/t4x5FQSk7vsMKBY593u8eM4SghsoI3a\\/H2frghwDzg+kGLws8+\\/390N\\nQSOBi8LHPu6\\/H2wggHeIIdhQPA+jx8IuBI4GGoIPA5+\\/1ReFEdfbCC3yPt+f3QeOsOgvpHq+\\n2LwoHgYahY590XAg8DnCCCN4PXfCChPDTrv+yHMXa6uo9o7sobAkcDFwWRx3+z4R5CchG6x6\\n79PfDoLHPmPaO3hnF2sk8493vhsFg9Xbui6CE2I3g9deqKSspKyLa2pGWl5Jpbrj62pRhuXb\\nW+8rXeeUhlCEqddVrF1wgrcUc1kqMO9dXT7BDXMjgSIu11dvo7soFEqJUo5lE3JVqSeZJuSe\\n8wE31uSe\\/XXTjx15\\/aYdbQ84+HfFdcdB9nfDbaHnHw74rrp64TkTy95jyHOunp9h7ormOkes\\nQ21k9PviuY6R6xHmQczBDnMHgc4IbwR52ff7vvghxBDeDM5ZZnLo5oOz7\\/d98EOIIbwQdn3+\\n774IcRTMdI9YhCKZjpHrEHZ9\\/ug9R7\\/d3afq9a+unp9h7oprjoPs74Q1k9Pvimunrj3Invg9\\nXf8ADrSF9oeYfHui3XV0+wQjtDzD490W66uz0d+ce5UjgPj8YIWJJ4kntihIHEj4+qEcyefP\\nn6opCoPaevXCpWOYZ+yLCtXUPR35wmVgdfZviwrJ4bvb8IIUEk7hbvPq6uOZ4QrFCoDiYRJJ\\n4mLSQOJyghQRzPs+Z+UKlfQPX9kWEk8TCZWObf7u\\/wB0WFRPV2QoIJ7uuULCQNw9Z3wqVAcT\\n6PHxhMrPNu9\\/dCZIHE5e\\/wBUWFY5t\\/WfHdCwgDv+Ee9dfr8bwoTzk+kmLCsc2\\/3ePGcJkk8T\\nFIcCSdw+UEVJJO\\/7B74pBBDgQBv1+H39aQQQQRapaUjefRzn0QuCLoTW6lG7iroHxP6YQW6p\\nWYHmj2+vr6oQUpKRmT3wQsJ4q0Hsi9Sio5k5+4dghBboG5O87+wdvX454SW6VbhuT0c57TCJ\\nIHGHEovvv4cfXHpVfRI6+zxPOLiSd5Ofb7+iE1L4hPrI93Hu3c+6LCoq3c3RCalBPb0d\\/RGQ\\nlFt\\/qHAdeyPUotqd\\/wAPv674uJ5yfXCKlZ7uA9\\/b3RQkk7\\/sHvhJS+Yevu8ZQ5b2Q4ATu68Y\\nuUoJ4ZE9HfuPuPvhEnPMqOQ58+AHjj09cUUoJBJO7pPE\\/aYaLcK93AdHT74UkE9w4+7Trd8V\\n6I7z17Pti9x0nNKSQnn6\\/wBHv3x81WrZt2vtlFao1PqJI1UuTEugzKBlkNlNJCZlnIE5Fp1B\\n35ZxzilAdvR3wiTxJPWSYzGFOsrS4y44ytP1VtrUhYO\\/0VJIUPEHw7vUFYVnClJPNJKT6iLE\\nDvEdD1nAS3phSpigVOoUJ9J12m1ny+VbcQdZtSC4tqdbIO7WVOOlJCVpSSFBfdWEWlrpRaKV\\nyW5UKze9wYnYRy08zJVyzq1WZuuSC6K4tKHJWkzddbmZ+06i2gqfpL1NfbpgqDbTU83Oyrz8\\nnMuVKz3Dh7\\/HjqYT8vKTkq\\/JTrDU1LTTS2H5d5CXGnWlgpUhxCtxSeHSDvTvEbKfclMQSC6R\\niynSOJKQ+2407KVSVZmHm0PIKFvSk2pHnMrNoBC2Zlp1LzLiULbWhYChJKJiiuYfnmJ+l1Ga\\nk5hhxC0uy7qm1nIoKCXLEJeaJSM7L4cZdTdDqFIUoGWTo1aRlk40WBa93WhXk1e0Lllkqok8\\n4lLU9S5xtwszlu1yX1nFSVSps2Fyb7LhcEu+2EMuzEi7KTEZW7Zz8dX8RP8A7kQk9GjSGurQ\\ngxOVPpFQuDAe+Z2Xlr0tppwvTNOcCVNytbpCHlJZYuKkIWFNqWUNXHSWnaTOvMzbchUaZLuw\\nWxft3Ei16BVaFX5K4KHXqZLVS17hknQ5KVmmvta7KddSErTNMJCkOszSG5tDjbstNtNzrDqH\\nPmBt\\/wBhc3szrIqdJ7WpYPrK3X6PU+zGZIBC3qdUOzAQ1VZG9pkAIbnGbT0ulIVNMSv0P2X7\\nSKftCoyXT2MvXZJtCarIINgb2QmelUqJUZR9WikEqXKPHzd1SgWHpjv7bOfjq\\/iJ\\/wDcjLep\\n2FYmnrou4gaL2Lro+c3qG2ijV9DaHqxR52nFK7OvymbRSC5VLYqyZVipMpcQip09xUhUHVS1\\nenW14dbVf7n+Ij\\/3Y+xsS96xYF10i66O4ryqmTCXXZZSi2xUZJw6k7TZnVSomXnZcrZWdVZa\\nUW5lkJmGULTofJ72uzGx3H8pWHy4\\/hWsIRRsZU1KVOpm6LMOJBm22BcOT1KcV57KWstxImJI\\nLQ3OvGN7jvCMrjDD81TXG2lTSUOOyC12AD5RZTDihYpZmkEsO62QSh6xWyiIUuOGDd+6PeLN\\n\\/YMYn0r5nvfDu4Z23q5LJLqpSYVLkOyVXpcw6yyqdolcpz0nWaJPBttE\\/SJ6TmkoQl4COoHH\\nCs5D6o4dfWYmNcupoW0jSKwOt\\/TtwXpRnLyw3t1hjE+TpzA8ruXCll95S63Oy7LZcma9hdU3\\nplFSfCdqm0pirrnJlcpatKYahvqVl28w74+uk\\/KS7LjExT5hqepVSlmKlR59hxL0vO02caQ9\\nKzDLyPQdQtlaFBxHouJIcT6C0k\\/NCuUaYoVTmqfMtuNqYdWlAdSUrypWpBStJAKXW1oU08kg\\nZXEKFrakUrLdznn6B09fZCBOWZJ3e0n4kwKVkCTnkMyfHSf0w0WsrPQBwHjx7MscAAfE841M\\nWrWVnM+gcwHQI36fJ4cGFXxpfXpjBNyS3qPgZhjUDJT6WipEle+Jjztq0VsulJQ0Zuz5bEUJ\\nGYdc2CtQLZS\\/q6BVq5h6e7v9XTE275Ppgl+p1oV1TFSfkQzWce8Rq9XpaZUkIfesyxFKsi35\\nZ1CkpcShq4KfetQllKKm3ZWqtvNDZu6y4njmoCm4ZnTnCHJ3s5Bm9te3N3QP\\/wDWQ9a27S8T\\nDA1PM\\/iORKklSJTPPL\\/i+bgdir1TK2BrpbW97RtG0o7hEjZtLoDasn7gqwddSSBryNHbD72Y\\nPROv05W78UgxEe5dnFMUvDTBfBqTmgmYu67qvftal2llLoplm0z5mpLU0kcZWfqV1zkyyg6w\\nXNULabjLoiTXpN3CatiGilMuqMvbdKlZJSAo7Py6eBqM04nVyGsZeYkmHc88nJbV3KBMQZeV\\n1xYOJmmfeNIlpwTVGwnt+3cNKaWypLIm5GXduK5ApBIHlctc9x1ekzMwU67qKVLtha2WJeOM\\n9jNLOPvKjFRUO3pmAZCdnTdPoJdpjCKSwjNYpzt1+qrnGk+iVCWWoA5HDHUGPZwUDZYJVJCJ\\nnEEzLsaaLKJhfnrqrE5sipKTSw4bWHapBsVJtrttOW29WQ4R5sqy69v4aygGUDdzgulY\\/wAQ\\nx2apWe4cPf8AZHxtny5blZuZIyMw8lpJy37NhJOYPQpbqkkDiW\\/RH1qlao6+aPo7UFBc2vW4\\nbSlCe4gZlexSiPV6hx7MKzOq\\/igJ9mp95MUWrLcOPuHf46IkF\\/JsME\\/1RNPypYpTsspdMwBw\\nju+55OZ2YcbRdt8iXw4o8kskgNLmbcuK9Z1pzeQqlhKUZqK2495OWZJ6yTE5n5MPgabM0R8X\\nMdp+WEvVccsWhQ6U6pjLyuyMJKWaZTJpEyoJUsm87nv+UW0grbZNPbe2pddcYZlezunGoYqp\\n103aki5UHTwAlU5mT\\/4lTAPcfC+fRmO2qMvp6Lau2J5FoZ06XF7rCR3XuQQLGTPBBBHVMWHB\\nBBBBBBBBBBBBBBBBBGPmlVgxJ6RWjbjpgdMssuLxPwuvG06WuYVqNSNx1GizSbXq+ZW2gOUS\\n5E0qrsl4hnbyLYfQ4yVIPlszUtOUqdm6dPy7spOyM0\\/JTso+koelpuVdUzMsOtq85LrLyFtu\\noP1Vpyyz4+tTHm28rngP\\/Y8coRpGWjKSiJS3bsu9WLVppYY8mkfmTFRhN6PylOZ1EIbkaFcF\\nUrdtMIZAYb+ZVNM+YkZ0TttpXaSlHrLaLlh96nzCgBcomEiYlidL2Qth8A3sFOgW1iIYql7p\\nlZoAWBXLuHS5zDtGhffYZXeYuRax366Uq4KSesEQslQV2jiPiOr9Eca24UbjvT0dHX3w8B4E\\nHsMc3qTl8OB+fXyiEKTbvHD7+vhaOZpNUnaLU6dV6c+uXqFJn5SpyEwg+fLzsg+3NSr6P3TT\\n7Tbg\\/wAThEvLCPEZFwW\\/hzirbziUip0+173piAtSky8w8zJ1hmVcUQlwKlpg+TTCClKkusqQ\\npCFAoiH0lWY35A9HdEhDk18Rvut0fzaUy9r1HDW46jREtqJLholacXX6RMLVvBT5VO1inMpO\\neozTEIzCdTLlfyqMPrmsL0HFMqkiaw7V\\/N3XUCym5OrJQlLylf8AZVCUkW27\\/VVMqKSLqB6F\\n8natplcR1bD7yh2FcpweabVYhybpilL7NKTb68nMTi121UGEg3ABTKJx5wvoOlDo2YpYSzjk\\noii43YR3JbElUJtovM0x68LZmWaDXkthCj5RQ5+akK3KOIbUtqbkWHggrQmPLytJmqWPiNOW\\n1XpR6m1aQqNVtOuU9\\/JL0lVpCcck35J5OeqHpeqyXky95yUF6utlkfTy0U7tFy4S0yRdcLk7\\nas7OW\\/Ma25SpZChUKaoJzP0SJGdZk0HPeuUdI5gIF\\/Lc4BzGjrykGMsxTJF6n27i7OUrSAtF\\n5xKUpmV3+uYmbvmGtlkkNtYoUy92m28m3G2WWElJCkuLsvyeMSt1uTqFKccSE1yjy9VYRqkN\\nzbKEszraRuzpL7ZUNbCSURoDHm1eiGXUleU3lZmZp7iiNVNOZnJVw77JHZrINrXeSN9hGOQO\\ne8fohZK+Y7uvp7vdHC06ebqEhJVCXILU5KsTKMjrZJeaS4EKO7zka2qoHIhQUk6qo5NKgrqP\\nRFmutFJUlQIKVFJHFJBsQfAix\\/VHPCk30O8H1gw8QtSDmD2jpHQYdocSsdB6M9\\/o6RHGpVlx\\n3j3QqDwIPWDGKtvn6jDfpI7x17D1raOTSvLcd49sKg57wfT454YIeG4L3H8bm9PXDgKy3g90\\nMEEaH2+73e33R6QFap38fv8AmO+HaV8x9ffCgPOPRDVKgd3A9HNz8\\/wi8KI4eqPIQQRoYdhf\\nT6\\/s8dkKhRG9J9IhoFA9R6O7pi8EjgfXwhCkA7tO7gflDZQDqND17PVHIIeB3K3Hp5oXByyI\\nPYRHGhYPV7vX35Qolak8D6OaMdTdu7x3e39ceZiNFC469R61jlkPcyx\\/xh8R3eowuFBQzBzH\\nj1RxSXkncfNPXw9fN6YXBIOYJB6obII3iDKFapPq8fh7+UP4IbJfPBYz6xx9I4erLshdJSR5\\npBHVzejmjyEEEbxF0EEEeFIO8evr7Y8gGfNnu6IvCyOO\\/wAdPfnFkEIKOR9vXyghULB47u3v\\n\\/RF4POD6RDeDMjgcoQQRvEEOgpQ58+3xnFwc6R6obBZ58jF2uDxGXtA+MIKUngPh8IIc6yTz\\nj07vfF0NgQefv9UXZkcCR6YSW+R9vXjB7+uuUONZQ5z6d\\/vi7XPQPb3w2C1Dr7Yu2h5x8O+E\\nlCu4+v52jzKOQ6\\/VDnaDnB9\\/dBrp6x2juzhvrp64rrJPP8PfHmU8j7ITkT36+Pdz+3mfU5zH\\nSPWIrDbMdI9cVjyPMg5+7w69Y9biCG8VzPSfWYIMhG4\\/ZxHf0QPUvFcz0n1mG+Z6T6zBmek+\\nswQZDz6069Q9S8EIZnpPrMGZ6T6zBBkP6Xx7vl7h6l4IbwQQdn3+774XzHSPWIprp6fYe6EC\\nQOJA7YprJHP8fdBYncCYMg5n3QvtBzA+7vi3XPQPb3wjrp64ptDzD490KCVHh7YUEp5e2\\/jx\\n64c4VKlHnPu90UhErUersimZPEk+mPQg8SB749AtwA8IVKkjnHv90Wlwcw9cJEgc\\/f6otKwO\\nAz9gPxhQQONzHsKlSjz5dnjOLSecn0k\\/GEisnhkPHXu9kWZk8TnCgANwghUrA4b\\/AB0\\/pi0r\\nJ4bh454sghYQT3ePyggOfPnv6YIIIWEAb9fhBBBBFqikDziAOvn9HPC4IuihUEjMnIePXDdT\\n54IGXWePoHD159kIkknMkk9cELCCd+ndx66tCynzwQMus8fQOHrz7IQJzzJPaTCKnkjcPOPV\\nw9fP6IblSlEZnsA5ubcIUEk9w5x7dKdwueuP2DSF1vAbk8enm+OcNySd5PpMWFQHWejv6ITK\\nirLP0AfCH0N+rvPHwEeAKVqTpw6+3wi9S+Yb+vo7On3dsJE85PpMWlQHcISKiePqh4JA3e3j\\nDgAG7rxi9S\\/xfX3fbCZOW8n0+OeLVKA3cT0c3NxPwhIqz3k90e9WhaUk79B8eucXKXnuG4e0\\nwitwIB51cw+J6oTW8N4Tx6e6GxPOT2njDiUE7+6w59e2FFQGide\\/refdFylFR3n0dHj9EIqX\\nzD1xRSs9w4e+ElKCes9EZCEbrjwHz68YEo4q9nz68YqTlvP6YSUoq7OiKEknOGy3hvCN\\/wC6\\n6OwfH3xlJTbXefh1zhyL3HAjcN6iPQOs93r62hOeZJ6yTATxJ9MIqUT2dHfDgSVeHOCGlTkJ\\nKryM1TZ9hExJzbS2X2V55LQoZZhQyU2tJAW04gpcacShxCkrCVJ710HdLGq6I1\\/MYTYj1Saf\\nwIves+U0K4X3iVYdXBNvISKsHSAGKNMO+TpuiVSUMyZ1bokG23BVZSpdIKVluHH3ePHX87cV\\nBp9y0qZpVTSSy8nNDyT9LKzCQdlMsqI3ONKIKQrNLic21pU0taVMVWjUfE1EqOFsRSxnKFVk\\nBL6E5fOZKaR\\/Q1VpzigrsZ+TcsttWVSHm88u+hxhxbZk+EcVVXB9bk61SZgtPyzgK0G6mn2V\\nWS8w+2CO0ZfR+TcRcEiy0KQ6204iavZN5N3JINJcdYXPMstuKWhQUidllAFqfYUnNCkuApKy\\nhagFlKkbnkx9tru9KfV9kRluTP0zK1atbpWi5izVgmqUsBvBe7Z15Zbqkg2HCzYs6+84Q4lL\\nKCm1krUFqYD9sLKVy9Hl1yQqBX2K\\/Tmp1kIS4MmppgKzXLvDVK2zmdbUVnrsrzzU0rjra6U\\/\\nJ3a9sqq2y7FM3Rp5CXpNeWaplSZQRKVKnTCleaz8tfNlaeCVIdZKlKlJtt+UWpRaSpf0wwRj\\nCl44oUrWqYQkrAanJQrCnpGcSlBdlnSkDMBmS4y7ZIfZW26EoKlIRnToq4oSUnU6jhPeCZOo\\nWjfLcxLScpVGGZynfOs\\/LCSmaPOSs0h2XfptyyazJvy0wlcu9NIZaXLkVGZMQ5OVZ0GZ3QW0\\noa9alFk5tWDOIqJu+sF6u+VPJTbk1MhNYs+YmSCF1Wwqq+aK4HHXZyaoL1tV2aDa66hpMlNq\\nafYeafYcWy+wtLrLzS1tutOoWlbbrTiFhTS21hK0LSpJSsHI5Zg9+aYOjpReVA0Ha9ZqG6e3\\nj9hkhVw4d1eYSy07LYg0mRe2FPfmllpUtb2J9IZdotVUT5DIVR9isGWnHbXk0K7a8j7aj+Fe\\nG5nY9XpoKreG2JirYEmHl3dnKOlQcqeHg4s5nHKepfnci0CVeZOOoSluUpFooLyg9nnnTCcU\\n01gdoVJROobTumSkJS6QBYInUJDSybATbTBKiqaXHn6uOFZyG5I9vWe6EFKy3Djzno+2ORrV\\nLqdv1Wp0GtU+cpNao1RnaRWKXUZd2TqFLqlOmXZOekJ2UeSl6WnZKaZel5mXeQl1h9pxpxCV\\nJjiCQBmY6qDZBIVe4JGUixuNNR48PbyjjFKNfSG7gft+XPfHJUekVKv1ek0GjSjs\\/V65UpGj\\n0qQl0lb87UqnNNSUhJsIAJW9MzTzTLSQMypwAcY9NDATCyk6POAWFOEck5LJpmE+G1s2pMzz\\nAWmXnpm3aJLy9arato224V1eotT1XmVqaaK3514llBOoIMnI0YEKx35QDBxM5IKnbZwien8b\\nrmUk5CTTYPk71nPL1s0rQvEifsqXdY3l6VcmE6pSlUTmsfrmFuYY13ZuhubrwZt2VO7f8563\\nlw3jd\\/uSzUDmct4G8Exz3tzxO1SZdLRcSW6TTJusTLd7hx5SFCVZI\\/rhSwsIG8iaRa4UIvDZ\\nJRlTKpiaykLnpuXprCik3Q2gpcmHAeKCp1vMbWBYUNSCBrGxXxGkKPIYj4r3M4uXo1Ep11X1\\nW1goUZOj0eTnq5OoQpxaG\\/1nTpZaGwtaUhDQ1lpSd3n13zeVYxBvW778uBwP129ror921p7N\\nRDtWuOrTdYqC0k5ZJVNzjyk706oKfTLY5XfGFOGWhzdVvyk0JauYvV6h4cU4NPBE0imPOruG\\n6Hw1mVOSMxb9Bm6JNnIoSquy4WvWdbQqIXSpYTtRlJYZFK3kqc4b2m83Hd2f+9oVnGi8h\\/DC\\n5XCmM9oFQQTN4lrSafLvuAZ1yVGaXNTcw0sAANzdRqTzLoG92nC4slN5Nt6q6F1ej0BlVmKP\\nT1TTyEk5UvzxSlttadxUzKSrS0E3smaUAbqUI7WpEuJKmSbKhkpLIW4OfaPEurBz3khSynee\\nA6BDwnMkn9A6PRApWZ6t+Xs49Z+ENXXDvQD\\/AIxH\\/wCSPj17uGYjrckuLUo71qUpXio3PvMc\\n36rUTxJJJ8TrFFqU4oIQCcyAAkElaiQOAzz\\/AHI4n3eqLoA4DL0ZtC7RowQmJJ2mVmycJrYR\\ndkg+EJdlr8uGWN2YhIUlKU6gF716vqQhWs6hCkpdcccC3HPOs5L\\/AEfzpN6fGjFhO\\/IfOVAm\\n8SqVeF6SzoSmVcsXDdD9\\/wB3Ss2tQU0yzU6Jbk3Rmy7vmJypSsqyDMTDCD6jEXnshpmVuq1Z\\nSfrqap7CrcEATE1rxCiuV3aApN9QAJZhuXsZiYI0ASwk8ybOOi9t4s0fA6jdBBBBF1RKoIII\\nIIIIIIIIIIIIIIIIiM\\/Kd8AilzRu0oaZIq1VCu4E3lPpaZCUqT5bf2HLCnEBLylLScTCrabR\\npKGGQ3slFXlEuaNa\\/K26Pf8AZJcn\\/pD2RIyTU5dNsWkrFeyFFJVNN3Lhe8m71StPzOz8uuKg\\nU2uWiyXgprUuB4FxlZTMNRXG1JNawvWJFKczxlVTMsLEqMzKKTMspRa5zOqaLO43DhBBBIjW\\n1eX86p0y2BdSUdqjnnZPaADvWElHDRR1G8ebalQO7gejp93X4zyVQ4UHpTzju64ZIWFDMbj7\\ns+uF0qz3Hj7+6OLFoFtBpxH29bvhWJHA9dc45IKCgCk7vaD8CI2PcmXiUbWx0qFjTThTIYl2\\n3NSbKC4G0fdBbDcxXKW6sqzC8qWm4pVLeaVLenmdRZI1Fa1ELKDmPV48eyPucPrzn8P74tG+\\nqSc6jaVxUe4JdoqIS8ulzrM2qUeyyJl5xptcrMJ4LYeUk\\/WiG46w0jFmEMRYdUEqVVKXMsyx\\nXbK3PIAfp7q77wzPNS7x1F+zI0veN9hKsrw1iaiVxJVkp1QYefCPrrlFLDU60N9y7JuPtaA\\/\\nXOl7RO10MrxFLvqtWhMPFLF00jyiTaUcwurUIuTKEo8\\/JBXSpiqOuLRntPJWNYZp+i1O\\/Kdt\\nHdu48GsCtKCjybZqeGd4VDCu8Xmw6ZmZtTECVXWbanZpRBYTI27c9uTtPaCS0+qcvoBQfR50\\nplXhRiBKSFXsDEqhTBm6Yp2g3TIvNgoM9RJ9EtOlOqclAT9LmlNKTvybmcuffst05MApHS20\\nOMecEJVMvPzeI+GlTXZbuuz5Ob5oyGLtw3n1OvZNiUavKjUCafcDjOtKpcAfYDm0Txf5P+LX\\nMOVinedLMuKFWQ1OIcuhTdNqKly88hSFa5ms86opOiHOzvlUAT1\\/tRoqKnKPuy4DoqVPDsut\\nHpJXNSgQ4wpC06ZXUCXSCLlSVKtmFxHm7YV1jyu3BIuK1nKVMusZcV+TvlUxLqPSnWW8yj8V\\nLGrnkmO0wc8iD1giMZMM56YpF0zVGn23ZV2cQ\\/Ivy0y2th+XqMgtxYZfadCHGXmtnNSy2XEJ\\nWl5QbySrzVZHIWpHDhzg8P09cfQivS3m1SfIH5OYtMoI3EO3K7HcR2oXa3C0cSTjfZvqsLBf\\npj17\\/wDzXjkUr5j6+Y+PVCoJHCGaFhY3biOIPGFUqKeO8e0dOXT2RolIvu9nD1Rikcx7YeBQ\\nV1Ho7unnhZDikbuI6D3+PZDIHPeP0QqF9Pr+zx2RjKb32FxxHEde2Gykg3T94+fW+OSSsKGY\\nPaIVCyNx39mWf6I4wHLeD6RDlDwO5e49I4enohgoI3ajl1v+MAUDooevrd8IfAg8IUC8tx39\\nfOO3phqDlvB6uI90KBY5x3d\\/V8Yb669\\/zMeFBGo1HXt9UOgQeG+L0rI6x0Hx7OENQeceiFAv\\npHq8d8BF9CIRDsKB7ejxx9EKJWpHA7ug7x47MoaZ57+MXBZHX2w0W+Wo5Hq3whBRxSbdc9\\/x\\njkEvJO4+aevh6+b0wsCRvBy6wfiI40LB6j28\\/Tn+jshRK1J3g5dW\\/I+jhDKm7cx3G9vb+v2R\\n5mI0UL\\/bu9RtHKJeUPrDWHTwPqyyPs7YXS4hW4HI9B3H7fRHFpeH4Q9I3+sc36IWCkq3gg+O\\njiIbII3iDKlW7Q9cPlpHIwQyS4pPA7ug7x47IWS+DuUMusbx6uI9seQkoUO\\/wheCLQtKuCge\\nrn9XGLoITBBBBCSlJ4ezSCCK5npPrikEJ7McD17oIv11dR8dWUV2g5x8e6E4I8yK7j13wQtr\\np7PR3ZxXWSece73whBCcquR9kEOMweBzghvBmRwOUeQQ5zPSfWYMz0n1mG+Z6T6zFdZXT7o8\\nsOQ6\\/UPZBC+soc59O\\/3xXXV0+wd0N9dXT7B3Qa6un2DugsOQ9ggsOXXQHshxrK6fdFMz0n1m\\nENdXT7B3Qayun3QWHIezrkIIXzPSfWYpCGZ6T6zFMyeJzj0DkPZBDiKayRzj3+6EII9seR9k\\nELa6e30d+UW7Qcw+HfCcEe5VHh7evsgi\\/XV1Dx15xaVE85ikEehB4kD3wQQQQQoIHG5ggggg\\nhQAG4CCCCLVKSniQO07\\/AEDiYSU+PwQSek7h3n2R7HoBO4GF4sU4hPEjPoG8+ocPTDUuLVxJ\\ny6Bu8emEypKd5IHjo4mCFBHEm3XP9cLqeUfqjVHSd59WWQ9vbCJJO8nPrJ+JhBTw36o9J3eo\\nc\\/6YQUtSuJz6uaFBBPd49fG0e5kp3C\\/f9\\/3Whwp5I3Dzj1cPXz+iEFLUvid3QNw8ducJFQHP\\n6B498WFajw3dm8+OzKHktcbes+rcPt98eWUrfoPd7OPWsKKUBvJ3nmHH4CE1LJ3cB7\\/TFmeW\\n\\/hCZX0D1+O6HggDvPP7oWEgd55nr7++LyQOO6EysnhuHt+yLM+c+nf8AGEyvmHrO73\\/HKFdd\\ne2FgE7ovJA4wmV5\\/V3Dp6e7tz9UWk57yeriPdDZb3EJ9fN6OOf8AxvgIUATu9vs9nq18YXlS\\nnVWp5db\\/AF\\/GFlLSgZk+jnMNVuKXu4DoHxPj2wmTnmSeskwmpee5O4dPOe6HUN8tTzPDr27+\\nEeXUvQaDreevdFxUB1no7+iEiSeMWk5bz+mElKJ3cB44xkob5e0\\/Z14ndCwkDvPP5couUvmH\\nr5vR0+OmEycsyT2kxYtYQN+8ngOeGillZ37gOAHAQ+EgbvbxhUXuOlW4bhz9J7ejshEkDj9s\\nUUoDdxPjjCJPEn0w4lJOp3fHrnB1bh3\\/AGRUkk+4dEJqXlmBx6eYH4xapeYyHDp5z8QOqElr\\nCBmfQOmHQNwA8I9395667oqpQSMz9pPjxnDNbhWecJ5h39Jii1lZzPq8ePbCSl5Z5bz6\\/wBJ\\nh9CN3E8+XXt+EOpSB48\\/lHyd326a5Ky8xT5h2nXFR30T9Cqss87KzUjPMONvtbKbYWh9nN1p\\ntaHWloclpltqZbUlbZC5AvJw6bb2NtpO25eb6ZbGLD2UlqbftKWppl27KKwpuSlb3kpUaiUz\\nC31ty1cblxsZGtuBxsSdNrdPlU6IFKCQVKO7x6yfHPHz1Puu8cHcQLcxyw1mDJ3RaM229UJQ\\nKc8kr9FKdhUqZU2WlJM1JTkip2Tn0bliVUiYlnG5qRlnUQ7aTs5pu1LCb2G5wMtVaUD81hip\\nvCwlag4kdpT5hwArRTarkQ0\\/a\\/m0wmXnUIWtjKq1NlO0ScwBiBqYKnHaNOluXq0mk37SXKvR\\nfaSqyRNSqlqdYJKc5LsupaG5lxYnGS081NsNTUu4l1h9tDjbiDuU2sA55ZDeOBB1SD5qvO3x\\n3fgTitMYUX9T6y6pxdv1EopV0SreurXpUw6j9dttDMLmaW9qz8sEgLdDcxKhSEzKlp1i6KGk\\nhaOOWG1s3za8yFUK5WdV2mvzDbk\\/atysBtFWtmqbLINzMpNKCcyltucadk6rKoVJ1Nt5zL7y\\nk9CP457o+VMs5ijZVjmVqEmJikYkwnWQ+x26SlxickJgodlZpq4S42rK5KzrBJafYW60czLv\\npfRkopeKKKQFNT9JrEikocbV6D0tMtpU060q2ZKglSXG1ZUrbcSlVgtNhrR+UHaCcvhfihSd\\nNPDCnsqw2x1qTVOxNapjYck6Fi07JPT0rcwUwAwimYmUaVdqDj6AtCrrpNbnpybMxcsgzEbE\\nkk+4dEeizh5SLE0wtHHFLQ7xmb8tpNftKcpdMmdZtU9LUlTrMzRKvSdqoZ17Dy55el16jKd2\\njCfJaY0tpyVkZltcA\\/SDwBxF0csdb\\/0er7pjgvqxLsetd5uTZmFNV9L7jTlv1uhNuITMTNKu\\nqlzlNrNDcKEuzEjU5XWbS6pSB9j8O4qpG0PCdB2h0IJakMQywVPyZczro9cY\\/J1amvKAF1Mz\\nKHShwpQJhoJmEISy81m+cG0vBs1g\\/Es7IuoJaW8pTTiU5W3Av8o262NQETLZDyUXJQ4XmRqy\\nQJRXycXARqg4S416SNUlECp4hXZJYYWm+626mZl7XsaVarFxzcmvJLLkhX7kuCSkH8i8sTlk\\nFP63CT5Rtu0rroE1XbftNhwFukSL1Vn0pOaTOVNSW5Rp5JH7LLScquYQQDm3Uc8xxR2DoVYD\\ny2jBopYG4IFpqVqFiYf0pF1KbU3sHb3rQduW\\/ZtDqCW1sTF4Viuvy6td0hhbadu7kFLwqxRv\\neUrlz3letRmm5SkiZn6gqdmlIaZlKDSmC1LPvrPmtIl6TKNLeWrJIDalcdx+cflCYuVVl1BE\\ns4XTX6t5vLJQMyl0umlsM5EpuQpwsyAKECyi65vJIV0bspoIp0rJJdQlH0ZIdvMFfohM7OjO\\n7nKgBZAXMAKV9UNotYCyYqHLf4x\\/dVjtYWDdPntrTcKbPVWazKoATsbvv9bE64xMEZF4y1p0\\ny15qW19YS3zxNoa1S\\/Ma2nuzZTaTUzOKHmsNBlBPAreJKiBwzShBB6nPX9bpDYtTeOOOWKmL\\nU1twi+r1rlbp7MySp+RoLk2uXtymLJJJVSrfYptNT1Sgy5iWVuM+R0eXJA2s3rTSsgBkHMg2\\nTv35tJQR0kknLM5\\/RvZxhH8Xuy3CGEezDU1T6LKN1BKQkA1WdCqjWleiPqqqMzN2JuSlSQVK\\nOp5jxrWziDEVbq4JUifn3fNiSbiTaIYkwb6+jJsspOgFxYJAsmOfdc1fNT9bn6vtPs9UNCQB\\nmYqTxJPWSYRUrWPUOH2xIkI4e09e6IiAAPiecSwPktWj4qt4q6RelDVZALk7EtGjYOWfMzDK\\nXGl12+p9q6bum5BxTZ2NQolDtWgSD7rbrT3kF5vsALamngZq0ah+Q40dzo6cm5gTJT8oJS58\\nYJOfx+uoBKUKemMUG5OdtJTjYKltvs4ZyFiSE026S8ibk30LQwQWWtvEdYYMpv0VhumSyk5X\\nXGBNvi1lB2b\\/AC5Sq35zaVJZ8GxFgUpjzeQYSRZTie2XpY5nPSAI5pQUJP8AawQQQRKI2MEE\\nEEEEEEEEEEEEEEEEEM32W5htxh9tt5l5C2nmXUIcbcbcSpK23EKSpC0rSooUlQKVpO7zYeQR\\n4Rf5aawda9fGPLv09tHp3RS0xNIDAtEq5KUay8Qqs7ZqHNZRcw\\/ubY3Xh+4pw\\/srxs2uUVE0\\n6klKJ1Ey19ZpQGJiFhYz4EcRzjvHjjEpn5Tpo6fMmIuAmlPR5AiRvegVHBu+ZthoNstXHaTk\\nxc9kTc2tIG2qFet6rXPIJWrzxIWVLN\\/UbREVoEpOYJB6RHF+MqR9B4kqtPSnKyiaW9KgDTzW\\nZCZiXSDoCENuhtVtM6F8bgVZUZbzSdmGLWShwlv+5r9Nvu0QoA24g+EcmlfAK9ff47emFQSk\\n5g+npHdDFDoXkD9bgBzHs6OodsLpVlu5urmiKKRfUDXiOHq6+\\/CiRzyeGKCsQtHej0SemA9W\\nsNKlM2VNJWoF5dHaQipW1MFvgiWZpc4iiS\\/++CiPj6yV5SYdF68RduElEZfe21StV162J3Wc\\n117KQDbtKWUq85LXzRNSEulw+Ytcu7qndqtQheTQxS+4\\/G2oWJOTYZpGJ9DckmG1OBtsXRbi\\nJiq0Z1SlDMbSmruCnttAoMzNT0ojXWpDaFywtDS9DRr9qloTTykyd30xTsmlS1lKazQ0vzjQ\\nSgnVCn6YuppccBTruMSrR2v0YT86dpFHOA9sVXbbQGabiUCqygULNBFWUXXQkCyUBqsMzbDa\\nUmyGClIyBWWO2MEVX8LNl9OdUrtJ\\/Dx+jpm5uu9OShtBUr6yiuluyz61HVbySSSUlUQxOWY0\\nen9FnlGcY2KVTjT7UxMrMpj7YOzlkSMm\\/TcRJqZqtwychLMlTDFPo+IUredvSkuwEsokaYxl\\nLMNOJlm8cpOcanZWWm2VBbE0w1MMrGR1m3kBxBOWY3pUOHD2xKO+U0aMovXR\\/wAKNKahSO0r\\nmCd2LsS95qXZTruYeYlPy7VJqFRmdmVmXt+\\/ZGk0umslbaG37+nlbyuIleFtXE\\/bokXF5v0h\\n9UtvOZMs8VPyys+YAqeYQn8VgZx3vgquIxhs3w7WS4l6dpaVUKqKScyhMSQbYQ44q6vyjzCZ\\nSaVe3pTlrWtHLGOqSaZWptCUZGlO+csaG3m80S4kJJ1KWnc7IvfVB1OsdpA5ZEHrBEOW3Qcg\\nrcfxuY9vQfZDAKI7PHCFQQeEZqkkd45\\/PlEGjkQct4P298KhYPHcfZHHIcUjdxHQfh0Q6StK\\nxuO\\/nHOIQUg7\\/bBDsKKeHqPD1QqFA9R8cIZhRHWOiFAoK4ekc8MLb\\/WPt+\\/1GElIPjz63w9S\\ntSOB9B3jx7IcIdSrcdx9nrjjwsjdxHXx9fGFAQeB9HPGOpvmPWOvVr6oR6SPD2j7vdHJAkcD\\n6OaFAsHju93rjjkOqTu4joPw6PAhwlxKt2eR68uvgeBhooI7x3b+HXHnHt0q36H38Pb8e6Hg\\nOWRB6wRCgX0j1eO+GoUU8PSIvCweO4+z7IRCSgjdr8fZ+uHQIPDfFwURw9RhsDzg+kReFnn3\\n+zx6oCOBHqMJh0Fjn3e7v98Xg84PpBhqFA8\\/oMX7xv3jPnhBQOBt74QUA7tOuuMPEvLHHJXb\\nx9cKh5J45g+sesb\\/AGQwCzz7\\/Z49UXBaefMejuhotb9PWPsH3R5Zae8e37\\/ZHJAg7wQeyFA4\\nsfhE9R3+\\/f6iI4wHnBy6CD8RCodWOfPthooPA390GYHRSevXu9scmH\\/xk+kdx74UDqDz5du7\\n28PbHGJfB+sCOzfCgWg8FD07j6jlCSCN4PXfBZB3G3r+f2e+OTBz3iCOPB5wfSD3ReHVj8In\\ntyPtO\\/2x5HmQ8CD164ewQ2D550g9hI9+cXh9POFD1H4wR5lVy+34QtBCe1bP4XsI94i7WSeC\\nkn0jvghNiN4i6CCCCCCCCCCCCCCCPLDkOv1D2QQQQQQWHIdfqHsgggggj2CCCCLdZI4qSPSO\\n+CCLoIT2rY\\/C9hPuEWl9PMFH1D4wR7YngfZC0ENi+eZIHaSfdlFhdWfwvUAPaBnBHuRXh6\\/l\\neHhOW8wmXUDnz7N\\/t4e2GeZPE5xYVoHFQ9G8+oZwQrIBvP2fGHan\\/wAVPpV3DvhIuLP4RHUN\\n3u3+smGqnwPqgnt3QmXVnny7IUEqPC3jpBdA4X67\\/sh0SBxIHacoTU8kcPOPVuHrP2w0JJ3k\\n59ZMWlSRz59m\\/wCyFhu559w+fL2QZlH6otw8N3qhdTyzwyT2cfXCRJ4k8ec8\\/pMJFZ5hl7+7\\n2GLSSeJh1LduFveeurQZCfrH33PXthUrSOknqyy7PthMqJ58ugeBv684TKgOf0CLCs8272+P\\nVDgQB3+Py6PfCwkDh6+MKEgcd0WFfQPX47oTJ5yfSYsKwOG8+z7YVCgCdwi8nPMk9ZJiwrA4\\nb\\/d64sKirj6BCKnEp3Z5nqy6uJ4CPQL7hc9da+6FZQNVH1db++3thUknifRzQit1Kdw3n2eu\\nEFOKVuzyHQPRxPE8ISJA4n0c8OJRffqeQ8Ot3KDNwSLcuJ9n64vUtSuJ9A3D1QmVAdZ8cYsK\\nyd3AdXH0njCZUE8fVzw+lvdf1Addc49COKj13nrxi4qJ4n0cw8ZwmpYHDefZFilE9Q6ITUtK\\nBvO\\/mHOYyEotvt4fOHIuJ5z64QW8BuRvPTzDs6T27tw4wktxS+odA+J5\\/d1QkVAcfVzw4BwH\\nqg66vFSc8yT1kmE1L5h6+6LVEq7PZ+mE1LA4bz6Mh292Xvh1KOJ17uXz+EHXXXsipIHGElKK\\nuodEWkk5kn0nxw9UN3HeZHpPd46umHACT8Tyj0Ak\\/E8ovW6E7hvV0dHbDVSio5qPr4D7IoTl\\nvJhJSid3Ae\\/f3+Oh9COXrPXw\\/XDwSB484qpfEJPUT09nf6umEVKCBmfQOmLVuBA6Vcw74aKU\\nVHNRz+A6uYCHwAN0e9W65xctalnM8OjmHjxzwgtQIKcgQQQrPeCDmCDzHMbjuyI7Yopee4cO\\nfr+yEyQBv9HXDyEbid\\/AfPrxhxKNxPs+fy\\/VHc2hvpFzGibjMik16c2WBmK0\\/LyVypdLhlrP\\nrW5mnXUykZllunLdSxVwgATNuvPOFqZnaLIJTLRsy6E1qmtIcebmJuXbbUX0uoUidlVgKYm0\\nKTucCkkBxSSUqzQ6VFK0RCrr9Ilq\\/S5qmzW5LyCWXcgTLvozLL6RuOba8iQCCtsrbJyWTG43\\nkr9LCfr9CXo\\/3xPf9\\/8AhXJ\\/96kxNzAC7ow\\/ZWiX+akbTVVMTlrIcYlm1BAU\\/b0xSnm21rpU\\n9NL5b8qHZSnEtFVtGo8sDWKQ2wxilppHpTkkkIYka4QAFKclQG6fVFALKpYSk2sIRKPrX1x5\\nO20ky0wMD1h\\/9jzC1uUN11Zs1MrJW9TwSbBEz6b8sLpCZvtm\\/TXOtpTIism9avYV10O76GsN\\n1Khzzc4ylR+hmGiFNzchMBIKzKz8ot+SmQkpUlh9eopKwlYyD0odATC\\/TS0gNC3TeoLtMkl4\\nYXJS57FGnTMo2+q9rPtdqqXVZFMnmQnyabrNoYpSElbNVl5lssz1sXHW9tNPMW7SKZOYeSlQ\\nYnpVicl81MzCAtBz35jcpChwC0KCkKTrKyWFpjN3RJxoXbdRnMLa66VW\\/dry36C+4taxSrlQ\\nkKTLJQSUok66mXalyEj6Kptya\\/MTMTb4oXyetrK8FM40wDWJpUtQsZ0WqiluvKPZUbGrFOdb\\npE2b6MtVNaGaXOOAAdqmmuOrbl5Z1UXltawLLYnpsnVmpYPztFfYmHW0\\/XmqY08l95sEWKly\\nxCn2wCLsrm2kpUt5IjLHHW6vuSw1uCaacCJ6rNJt+nqG5XlFUC2pgoVn5rjNOROzTY\\/3xjPI\\njMCNPypGNSMHNDrEVMlOJlrjxPEthRb6NbJ1abtbmBdC0hJDiNjZUlchbfbz2M49IjXSpYjd\\n9pXXcmfuOi2fLPZtUOUVU6i2FDVNSqiUqYZdTu+klae2082VAHUqR3c8QxOW5xsF2432NglT\\nZgrp2EtsLrVeaRkn\\/vuv9uRqKWHglwh1Mjaklb0zKLUhtba67PtoSEL11Y2y\\/D52obfsLUx1\\nAfo+FXE12phIzseb0JaJ5YcSSQpqbrC6fSnrmxbdG86GtcS1D8FdmlUnEns56tjzCV1yqzVB\\nJYSpKt4W1IImpxojULBII1UNK0nLqm5piWTxedQjd+Cknzlc+5Kc1HqEdypSEJSlO5KEpSkc\\nwSkBKR2AAAdQjry0ZTazr02oZplWilJPM68VJBB\\/ctpdB\\/F1gOc59gKVnuHD3+PHV9V6o6XX\\n0NDc0nXkFLAUf\\/KE29Y3C54xfVdQT+iPedfhaKKVn2cw74yL0P8AAKqaU+lHgRo9UlMyDipi\\nTbdt1iZkklb9KtJU4KhetdaSASoW9Z8lXK450NU5R3b4xvWrLcOPjx+mJQXyXvRrF7aSGMWk\\n\\/WqeHqPgfY0vY9oTL7KikX9io5NNT0\\/T3\\/qLfotiUK4KVUGgc25e9pMqy2qDGdhql\\/S9bptP\\ny5m3plCn9Cf2O1d6YJ4XLLawL6XIA4QuTYMzNMMWuHHEhVt4QPScPqQFH1ROBo9KplApFLoV\\nFkpemUejU+SpNJpsmyGJSQptOlmpOQkpVhOSGpeVlWGmJdlIAbbaSkjo5iCCOtAAAAAAAAAB\\noBYWsBwHICLHGgAGgG4DcPAQQQQR7BBBBBBBBBBBBBBBBBBBBBBBBBGsnletGtOlFoA48WZJ\\nSXlt32Xb6sYcP0Ib2kyLrwxZmLgckKe35wM\\/cdrouW0ZUEpAXcJzcaABjzX0qI3cR44R660e\\nYVykujUvRI018e8FpeRXJWtTrymbnw8JCVNOYc3shF02gyy8lthqYVR6VVG7enHmWWmvnSjT\\n7IQks6goXbNRrml11tFwQqmzZA3EFT8mo211vNIKjus2m+oEQ\\/E8r6bE0BosFhw8lIupo31B\\nUUlwcDZAGo3YSA849EOG3eZfoPf46uiGAJHDx2wsFA9vR44+OmKDUkjXeOt8RFSSO8c\\/ny68\\nI+1s266rYt221edCc2NYtWu0q4Ka4SdRU3SZ1mdYQ8lOYcl3Vs7KYaVrJel1raUhSFqTEu7C\\nXE2Wn5XD7Fi1Hg9KTsvb150fNTalKl5huWqaJKa2SloS5s1mTqDGsdm4XpdeS0qiHEh0p3He\\nPd2ePXujfzyZeLCbuwdq2HE\\/M7Wr4ZVhQkELWjXXa1yuzFSp2qFq2znkVYbrkq4dXZSsqqmM\\n6+a0ITyr5U2FFT+GaTi+Ub\\/ZWG50S064kekKZVFttturIBJEtUUSqGwdEideVxIPQPk+YhTK\\nV+pYamV3lq9KF6WQokgz8gla1IQm4AL8iuZLhGqvNmk2NgRKh0gcJbT0tdGbE\\/B+qusKt3G3\\nC+r0KRqLqS+KROV6jmati5ENtr1VzVtVz5rr8qjNxszlNZQpC066VeYrRaRcOF2KdzYdXjT3\\n6Lcdv1+vWLdFIm0lExSbntqqTVLqFOmUKIKZmSq0jNU9xJTrBwrBGeer6WmiBfSbhw8mLZmn\\niuo2VPeSNBwlTpo1VU\\/N05ZUo70szCKhJoQDmyxKsJHFIiPjyrvIW4141Y8YjaWGiXV7Nr1R\\nv+epdz3LgtVp1NoXCLrl6dISFbrVoXJV5tdrVZ24ahJi5anJV+o2omWqU9UxIzU8lyUlDpfJ\\nt2o0SiuVrDmKapJ0ik4ilGJqSnJxxTcpLVqXUmXUh10hTUqmaacSpcxMKaYQacyhbiVLSFbf\\naphCbmlBclLOzUzJOPSzrbSSt5yTcAel3Ut\\/Wc7JVlBtsKWfOFEJKUnLHPSvLceHT0d8Kg84\\nPYRH3OImDeMmC89T6LjThZfWFVfn5NM1L0u97aqtAXNtpUWnnqa9Py7ctVJNuYS60J6nTE3K\\nrLZKJhQOQ6\\/BI4eO2Or2nWJhpD8tMMTTDoJbflnW32HUgkZm3WlLbcSSNFIUQeBjmJ5l2XdW\\ny82tp1s5VtuIUhaVC1wpKgCCL7iIdpXzH198KA84PYR3w1Cgeo+OEXhRHD1QFF92ndw+6Gof\\noe5l+sfEdw9HGHAOeRB7CI40KB6j0QolSknNJy6eg9ohogjfBHIhZ59\\/Xz+PVCgIO8GGSHgd\\nyvNPsPd6fXCwOW8GEFAO7Q+77oIdhZHHf7x7hCgIPAw0C+Yj0j4ju9UKA57wYZU33W7xu69k\\nIKAd2nXL9UPEuqTuzzHQfgeIhdLqVbvqno5vQRuy9XZHHhZHHf74UCgeB9Hj4QwpvmPWOvVr\\n6oT6Se8e3l6x8I5IEjeD3Hvi8L6fZzxxyVqTwO7oO8Qsl8fhDLrHDvH8ruaKDw1Hsj26VbxY\\n8\\/v68YfAg8DFwURw9XNDUKCuBB7D7+iLwsjrHX39MJt6vH7fjxjwo5G\\/XXKHQX0j1eO+LwoH\\ngYahY5wR1+Of1xcCDwOceQkgjeD13w5zPSYvCyOOR7fsyhrrKHOff74v2h5x8O+PCAd4hJAO\\n8A+MOQsc+72xcCDwMNgpJ5\\/X4yi7MHgc4SUDhce\\/r2wkoT3j1\\/O8OQpSeBIi8OrHOD2juyhp\\nmRuBPoJ+yK66uo9o7soQW766HdvFjw6I5eyPMhG4\\/Z84fB\\/pT6j3xeHkHpHaO4mGG06vb9kV\\n109Y8dWcILXcR4G\\/zg9Md+7l+vuPRjkNoj8YeuLsweBB9McfrJPOPd74rmDwOcJLfeR4jw69\\nY9ZnVxT8Ry8eiI5DMjgcou1lDgpQ9J7447M9J9Zi7aLH4R9efvhPZngR17YM44p+3l3d3uEc\\nhtF\\/jGK7Vz8b2J7o47aL\\/GMXbZfSD6B8MoMh7uvVBmT+j7hD\\/aufjexPdBtXPxvYnuhhtl9X\\nqg2y+r1R5kV3e3roHuv5dH6J69fd8eZh\\/tXPxvYnug2rn43sT3Qw2y+r1QbZfSB6B8c49yK7\\nuuvd4R7mR+j7h84fbRf4ximsr8ZXrPfDDaL\\/ABj7INos\\/hH15e6DIeY9\\/wAoMyeCfcO7r1D1\\nPcyeJzimYHEgemGOZ6T6zFI97Pv90Gfknr2eqHu0R+MPXFpeQOk9g7yIZ6yekeuKa6e30d+U\\nKDXifh1693tgzLPD3H7TDov9CfWe6LC8s9A7B35w2Lg5gfTu74prq6oUGu72nr16cx3QWWd5\\nt67fCFipSuJJi0kDn7\\/VCJUTxMUzA4nKFhu3EDwHXwgDY4n2QqVjm3+7v9kWlZ5sh7T49EJF\\naRz59njKLdoeYfHuhYQkcL+MKCUjh7dYVJJ4mLSoDiYR1lHnPu90WkgcTlCvshXhCpX0D1+O\\n6LConj6uaEyscwJ6\\/HP6osKyeodXf0wQoIUe7xhUkDiYsK+j280JFQTxIHafGcIqfH4Iz6zw\\n7z\\/J7\\/QCdw9fs6tv14wqyU7zc9bwL++HBJO8nuHdCKnUp3fWPRzekndl6+yG6lqVxO7oG4Qm\\nVAcT6PHxhwN+JO\\/Tq\\/wgKydEj3a+zh74VU6pW7PIdA+J4mEiQOJHjq4wmVk8N3viwnLeTDyW\\n\\/V3DU\\/r9sAQTqT9p69sXlZ5t3vhMkDeTFhXzAek+ngO\\/1QmTnvJh9Ldu4e8+PWnKFgAbuvGL\\nyvPhu6+f7IsJyzJPaTCK3gNyfOPsHf6PXDdSlKOajn0dA7BDoAG4evjHsKqeO8I9Z+A78+wQ\\ngTzk9pPfFpUB1nohIqJ4+qFhJPcOcEXlfR6+77YTJ4knrJMWlQHWfHGEiSeMOgAbh6+MEXKX\\nnuG7r5\\/shJSkpGZPfCa3QNyd539g7evxzw2JKjmTmYcSgnU6Dlx+6FpQTqdBy4\\/dF63CvqHR\\n3wkpQTx49G\\/wPT74tUvmG\\/mz6Ozp5z0QiSBvJyHOT43xkJRuvoBw63fGHQLaCLiSeMN1ugZh\\nPHPIniBl0DgTv9kWOOlW5O4e090N1KCe3oh0DcAPCAC+g3xcpX4Sjx5+kwipRPUOiKFRVxPD\\nh1DqhNSstw4+7vh5CNeZ9w65+zvdSi2p3\\/D7+u+KqUB1no7+iESecn0xRSgkEqP2n4mGi3Cs\\n9CeYfE9J93Nzk5CUgd54nrdC4ucdKs0p3J9p+zoHHp6B8+3dFz4U3vaOM1hTKpG67Iq0rUAp\\nBcDE9JIUWpmSqDbCkLmKbPyjszSavLlSRMUiefaU4hDesOYUrLt8cY+xw\\/wrxDxmuOXsTDKw\\nrrxIueqtuoatq0KDUriqb8sUHyl5ySpkvMuMyTLWsubnH0tykowFPTDzTSVLC1OSjDEyqoiX\\nVTXJZ9ipNzhbTKP099pTU4zNF0hrzd1ha0udp6Fjc7tMuQmJmVnJaYk1PImmX2nJdUuVB5Ly\\nHEraU0Uel2qVhKmyn0g4EqGoESltGLHS2cZ8OLUvy2XiqhXnTUzzEqt9LsxRK0yVStaoE4rU\\naBm6dUGJmQdWG2233pUPy6FNzbZVtn0UbOkzNV\\/Fevt7Gj2jKTjFNeeQSg1ASan6rPAHiml0\\ntWxAz1VPVDWQQ5LbtMXJRckbpkYJy9+U\\/SKqlrYZYW16ep9eti0Za4JK9MQ5S4EsSaZ2oplr\\nefmbRoslUqUpim1J5+5pyrIq1vyrjVCMiUzU5v3xlFHwmwco2G9tLdQirH5tQ9MONKn5uRlX\\nkVCuVKbcYbYbXNVCadlWpstMMtZVBxDCJaWZaaT8n9pOHcN4UxxX3cOVin17D8i8qbpE3KzS\\nJpp5L6G3pKXcebUUuvyankSk06lWR2Zlu1F0u5U\\/QmlY5m8TYQpMhMS8zI1+qNtylWbcl3GO\\nwabKkTswhK0pCUzrTZdbYSCWmH3G1lKm0lWDuKOIdPZ+7zE+65xNOo1OlK\\/eNcm3NZ1FKoVJ\\nk5mpzajs0Fa2aXSZUoQEAqU3LZblZZwDsZcTqxjNiviHirXgUVO\\/7urlzuy2trt05ipzz78h\\nSWVHWJlqPIGWpcoCpShLyrWstSgFKlEcsPjmMLdFtzD+nzQauTHKuN2kyhClJebtCieT1u8Z\\n1tQBbWhzVoduTTKiCqWuVwo\\/YlasTenS3l07LSqcyHXUheWeYaTmp1WZ50tpUrjzdMdfeRJg\\nlVPwvibaLUGz51iafNLprziRm+iqOtTk\\/MtLAuUTtWdcYeBvZyjosBx5\\/wBu9dQ9VKXhuWUB\\nL0aVEzNJSTZM3NoQGGljgZeRbbW3xyzq73um3ZNuyxlaUxrfXmSqZWcsjk5lsgefINJRu4BR\\nVl0xzKlZbhx5z0ePHVQlKAEJAGQAAHBIHD1cw6oSJyBJ7THXjiy44tZGq1FRG+19wHcBYDuE\\nc6KOYknibwE5Ak9pj0meQv0Y\\/wCxm5OjB1qpyS5K8cb25jSAvFLrOxmEO4iydOVZ0q6glb7C\\n5LDemWaxMSj+o5L1MVAKZYdcdaEBXQP0bZ7S\\/wBL\\/ALR4lWJlymYhYgUtm7npPVEzT8PqCl6\\n5sRKq04tbTaH6dZNHrszJpW42XpxEtLNZvPtJV6sMhISdOk5OnU6TlpGnyMtLyUjIyUu1LSc\\nhJyzSGJaUlJVhCJeXlWJdtDLDDKG2mmkJQhISABcGymk5nqjWHEkhpKJGWVw7RzK9MkfxkNh\\nhN9+V5Y0ubyPDsvmdemiNG0hpBtcZ12Kzu3oSEg8LOHfHIwQQRdsSyCCCCCCCCCCCCCCCCCC\\nCCCCCCCCCCCCCIlnynbReE9beBel\\/b9NJmqBOzOB2JUwy2lbpo9W+cbsw3qMwGZYLalKZVmr\\n2pE5OzUyttc3cduyEultRyflpxinpsaOFM0ttFTHDR7qaJZM1iJY1UkbWnZ7IS1Gvyl7OvWB\\nXH1hp1aJWj3nS6HPzgZAeekGJqWbcbD+sY7iujiu0CpU0JzPOy5cldQLTbBD0vqSLBbqEtrP\\n9bWsbiQcGpSvnkk+yBdZTna59o2QtIHH0rZDbWyjv3Hyzkr5jv6+jv8AfCoPOD6RCtXpdTt6\\nsVW3q9IzFKrdDqU9R6vTZxBamZCq0yaekahITTRJ2UzJzbL0u+gnNDrakkdDRKiOzojjdbRS\\noggpUkkKSRYgjeCDYpI3EEaHQ2N4rWHaV57j6++MttC3G6SwMxyoleuCoKp1lXDJTtrXjMFp\\n+YblaZUEomKfUlsS6HXVfNlclKZMvutS70w3ThUW2U\\/TrSvEMEHhF6VEcd493Z3RH8QUGRxJ\\nRKrQak2pcjV5KYkZlKClLiG5htSA8ypaVpQ+wopeYWpCg26hCwk5QIzqRUpuhVWn1mnqCZum\\nzbE4wF5i2pbDiV9m6EqSVMugFt5GZOdpa03F4mYYSY0bJmSv3B+\\/abVKZUG9RqtWxVJCuUSq\\nMtrStyUm\\/J3JunziWXMg7LTKFuyjwKClh9Pm5\\/Ye6ZchMeT0\\/EiiKpzv0bZuG323JiTUfqre\\nnaQ4tU3Lo1RrvLp788tbpAakWm48+uzLzxNwouNV44NYiV7Du4HVJXPNUx9L9Arim1AhNft+\\nbbmaPVm1qQgrbqdOn5dS20vGVLwDo2d4McrlVaKqUoWk9hy5LtDZsHErDVlU1T3ckIbS\\/WrU\\nm31Lly44FvTUxSKolZU6USdstIRqr4exh5LmNaGHZ3BM8zjGnAFw04BEhiFgXKin6Pfc82qI\\nQkgJcpk0ubfUCoU5g2QOsaDtjwZilLUtiWVVQakpKUec5lOyalEJSMk2hAeZSo5iETLK5dpK\\nhnfVYkTb61RMG9Iaypy37lpFi4s2NUtXy6h1+m0q5aWHyh1DTs1S6mzMGn1OXS68qVdWxLVG\\nTJL0suXcOsNKek3yBmB9+qqVyaNd6VLBW4ni9NN2XcBnLxw2mXikqTKSMzMTBvC1m3n1Fbk2\\nKjdcjKtDyan0CXZCNn8ZglpGWHiVKNXngTipTK8JZLanpu1ay7KVqmJecUlDFapKzJ1yjmZL\\nKs5Cs0+UVNNp1tgtiNhFh6Y100jYyV+Uli6JJOqlVVpwaplbbTkj6RxhKBS58pAIS0Gqa44V\\nFT04omKYo2NMc7Pai7LSM1VMPzku6Uz1Kmm3mm+1GXMiepFQaU32v5v5aW7dsEhC0kgxJq3s\\n+omJZRMwluRrkq6g+bzbbjYmQg8Zafll2WlJ1sh5KFEAKaXa0RF9JTk8NLbRVXOzuKGFNWmr\\nOki6sYk2QVXjh+qVbdLCZyerlKaU\\/bbcwtJMtK3nT7cqTqSFiSCVJVGFQWRx4D2Dx0x6RVj4\\n0Ya4jIRL0G4pQVGYQUKt+rBNOq5K05LYRJTSgioEJz2i6a7PS+RALsYV6SHJNaF+kd5dU5zD\\nlvCu9ppa3lXrg+qSs6eemVpWpb1VtxEhN2ZWlTUyW356bnbeFbmSlWxrUqt99aujsJeVLLO9\\njK40opYV6KDVqES60b2AU\\/TJlwOthIGZxcvNvqUSeylE+ik0HiHYtNSylqos4q6bq8wqiCy7\\nbS4am20hDhO5KXGGk2AKn1XKognAg8PHbF4WRx39vH1\\/pjd7pGchDpPYYLn61gfXLex+tZna\\nvtU+UWxZOIsvLtpU8sPW7W6g9QKmWG\\/oWlUW65mpVF5ClNUCWLjbEaa72sK\\/MMbgmrTxIsu6\\n7DuaSIE3QLwoFVtqssJVvS45TavKSk2GnUFKm30s7N1pSXWlrQpKo6Uw5jPCeMGe2w5XafVb\\nIC1y7L3ZzzKTbWYkHg3Oy4ubAvMICrEpJGsU\\/VcP1mhuFuq06Zk\\/SyJccbJl3DoSGplvPLvW\\n\\/wCydWdL20j5sEHgfRzwolakcDu6DvHjsyhmCDwhQLI47\\/f9vjfEjKDw17jv69kabrXXr1xy\\nCXkq3HzT18PX35QqDlvBjjgQeB9HPCiVqRwO7oO8eOzKEEcCPUYOvlHIBZ59\\/Xz+PVCgIPAw\\nyS8k7lDV6+I7x7e2FgecHsI74QUA7tOuX6oIdBShz59u+Lwsc+72w0C1DrHt8euLwsHdwPXw\\n9B4Q0Wu71jr7ISUpPC3hpDsHnB9IPdCqXljjkrt4+uGQJHA+PjF4Weff7PHqhktnuPjv9\\/zh\\nGRQ1B+w\\/L3w\\/DyTxzB9Y9Y3+yFQoHek59YMccFpPPl2+Mouz5wfbzQ2W7c08uj84M6hvHt0j\\nkgpQ58x17\\/bx9cXBzpHqhgl5YO86w6D3jfCiXwfrAjs3wgoV3HrvtHt0HeLfD3Q91knnHp3e\\n+LsyOByhoHEK4KHp3euL8yOBIhJBG8W674MgO4\\/b8OvjDrWUOf4++K7Q84Hu74bBah19sXbT\\nq9seac\\/n16+HCE5FePr+cOdcdBiusnp98NtdPWPHVnF2sk8493vgtHljyPs5w4zB4EGKw3iu\\nZHAkemCPIcZkcCR6YNZXSfXDfM9J9Ziuurp9g7o8sOQ6\\/UPZBDjXV0+wd0Gurp9g7oQ11dR8\\ndWUGuege3vgsOQ9gjyw5D2dch7IX11dR7R3ZRXXPQPb3w31z0D298Guege3vgyp5Dr9XVzBY\\nch7BDjXV1Dx15xTXV0+wd0Ia56B7e+DXPQPb3wZRyHsgsOQ9ghfXV0+wd0U1ldJ9cI66uoeO\\nvOKa6un2DugsOQ9kFhyHX6h7IXzJ4kn0xSEMz0n1mDMniSfTHsewsSBxIHbFNZI5\\/j7oRims\\nkc49\\/uggsTuBMLFY6z48c0Wlw8wHp390I66R0nx6IptOr2wQoJUeHt0hbWUef4e6LcyeJzhE\\nrUersi0kniSe2Drrox6EHiQPfC5Ukc\\/x90WFzoHrhBS0J4qHvPszhMvpHAE+z4d8e5SdwPXs\\nHh9se2QN5v13Q5K1Hju6QPgePjhFhUBvUcusmGqnVngdUdA7zmYSz5yfbzQsN8z7IM4H1R7e\\ntYdF5I4Zk+oes7\\/ZCSnlnhkns4+uECtI58+zxlFhWebd7fHqhxLe4ges\\/H7wI89NXMD2feR7\\nYVJ5yfST3xYVjm3+yEiSeJ9fjdFpWB19nf3Zw6G78ye7d136QoIHE\\/Lr2QoVKPPl2bosJA4m\\nElLJ4buzv4+rKLSecntJ74eS3bu7h8+ft8YUABui8rPNu6zx8euLCc95MIqeSNyRrdfAd59n\\nbCClqXxO7oG4eO3OHAANw9fGPYXU8kfV84+oeuEFLUvid3QNw8ducJkgcT6OeEysnhu9\\/wBn\\njfCgkndB118ehChIHE+jnhIrJ4bvf6\\/0RYSBxiwr6PX0+PG+HQgDvPwg90XkhO8+zieyEisn\\nhwPtHjoi0nLeT6TDdb3EI\\/jH4A+njCwCdw9fCPQCd3t5de2FlLCRmT2CGy3VK3DcPb6YSJzz\\nJPWSYsK+j19Hr4+OuHko5C558vl8YdCQO884uJCeJhJSiocMh0cfX0+iLSeJJ6yTDZb2e5G4\\nfjc59G\\/KH0pA7z8PCFQstxKOO89HeeaGillRzJ7BFpIG8n7YRUonhuHv7e6FhJPhxMehJPhz\\ni9SwNw3np5vthInnJ9JihIHGElKJ7OiH0N8vWePXW+HgkDx5xVS+Yevu8ZwitaUDfvPMBx7e\\nzrjl6DQLhu2t062rRoFaui46vMNydIoVu0udrdZqk46cm5SnUumsTU9PTLh3IYlWHHVnIBEb\\nftGzkMNMzG9dPrGI9PpOjpZU5sXnKhiITUL5ek3cgpdOw3o8x85sz7JUQum3nVLHdAbVk4NZ\\nna6LEOL8LYQlhNYkrtNo7SklbaZuYQmamAnQ+aySCqcm1Ag+hLMOq0Po6GNnTaPVKw72NMkJ\\nmdWCAostKU23fcXnjZllJuPSdWhOu+NL6lqWcyfRzDsEZR6O+hXpQ6VlQRKYGYQXRdtKEx5P\\nO3i\\/Lt0CwqW4hZQ+mfvWvO063ETLAS6pdOl6hMVZ5DLglKfMup1ImBaM3Ik6FuASqdW7vt2d\\n0hL5k9R1ys4rJlJu0WpoKOuql4ayjYtlUoobPVlbrF4zUu8jXYn0a2Q2hVu9MPMMqZK06eqN\\nGt2RpsmzLUu3aYwyh2XkpdpDcpK06hUxorl5RpsNNS6WpZmSZbyAdaZyjmLGXlZUqT7aWwTR\\nVVJxIKU1eulUlIJOoDjNNaWmdmW1fm+cTFOcSoEKYVwtag7Hp+bU2qszfYZrHzGnJEzNkcUL\\nfKVMNKH\\/AGSJpJ3hQiPFot\\/J2bHofzfcultijMXzUW1MTD2GWFbs7QbTStB1nJOs35UJeVum\\nuSkwk7J5uhUiypuWdbUWKxMpUCnf5hdg3gLowWUbcwrsWw8IbOYDBnk0SRkKP85Py7bgl5uv\\nVl7WqlxVUNKdSmo1ufqVUcStQMy4MxHQl5aVk3MF6TsajCSQrNKaxXEpmJrLIefLU1lapSXc\\nB3oXMzE4hSMtpKpIjCnF7HOgWvS5i+casTaRb1Gl1LSazeVfkaVTm3dVbokqYzNvy8v5Q7ko\\ny1MpTG2fUAmWlFryTHKeJ9q2ONoE63K1GfqNacmHkolKPJpcbke2KgGkS1KkkBt55JslCwy5\\nNOADNMOEkm+KBs4pFAZMyJeUpLTaCp6dmVpdnMgAzKdmnl2ZbUL5k9qhtBOjKQAI2J3rpR27\\nSi\\/I2XIruGdSC2KjOJdkaK0vdktttWpUKglKgQpsop7agNo1NOtGMK8SMT6lcS5q7MQK\\/TpK\\nn0iSdcdnZ96To9DodNbUXX3FvPLZlZOWRmFvTU28pxQGb77hb3aCNInlscN7YTO0HRxs6cxI\\nrTanmEXvebM9btkS6koyYm6bQwZa7bgaUsEOM1BFn6qNRxt+bSsojRNj1pZ6QGkrU1zuLeI1\\narlNE15VIWjJu\\/NFk0hxA1WTTbWpxYpaX2GvohVJxibrD6Enyuozbri3V23gLyTtqeOyxO4r\\nU3gOguZVlupMqerTrZKT+RoLbrbjCx6Sf\\/jMzIvNEhxLLyCEnW1falgzC2dmhNKxFUkjIX2l\\n5ZNCrC+afWhSVgjKbSDDrTibpU62oaZO8qTpJ0fSK0mJ37jK5J1\\/DjDKhSVk2jVaTNpnKNW5\\noqVV7ouGnvNKcl5hucrM6qjsTso4uWqFMt+mTjJUl8qVglZ0p50xPqTmUgSzJO\\/JR855Qzy3\\nhOzSM9+qo8eKvjJWVnZ1eylWHH1njqJBSgE5ZrWfo2weOayN3AR23S5QU6ny8urLWQ3rOkbw\\nXlkrcyPFXnKKUnfmlIMfSeg4cpmBcI0LB1GKvMqJTpamsFZQZh9LKAqYnJgNpQnziemC5MzG\\nVCEKffdKEJSQkctYhrEzWqlUKrOKSZqpTbsy8lF8jYWbpZbCipQaaQENNBRKg2lIKibk8iTk\\nCT2mGjjhWchuSPb1nugccKzlwHR09Zi1pqZmpmXkpJh+anZp9mWlpaWZcemH5l9xDTDDDDSV\\nOPPvOqS2002lTjjikpSkrUEnKbbJIAF1HQAa2v8Ab+od8fAv1u7zEvL5LPosCoXLj3pk3DTd\\naWt2SlsB8MpqYlkutKrNYTTrtxLqcq46M5afpVHZsajS03LBanZK6a\\/IF9hBfamJnkYKcm3o\\ntsaHGhPgDgI9Jolbnt6y5WuYjlGzW6\\/idejrl236h2ZQpZnGaXcVYnqFTJlS1EUSl0xlGzZZ\\nZZRnXHVOFaUKNQpCSUnK8Gg\\/NXFj5zMflXUq59kVBkH9FtI4RYNNlvNZNloiyyO0cuLHtHLK\\nIP8AaiyNP0eZJJBBBEhjOggggggggggggggggggggggggggggggggggggjzzuX50Uxo56eN0\\nXxQqaqTsHSXpxxhoTjbDiZJi8pmZVTsUaS3MKSlD06u62\\/uymWmvNk5O96YwckhMaRkOlO5W\\n8dPOO\\/3+6PSH5Xbk557lF9Hu37NsiuWtaeMeGl3i78Obju8VRugvy1Qpj9Iuuz6xPUeSq1Qp\\nlMuJk0ipKqEpRavMNVa16K35MiUdm3EwHtKPQl0odDO5hbOkRhJcdjJmpp2Xod1hlFYsG6Sh\\nO01rZvejrnLcqrxly3MP0tufRWae04lNWpshMZsJ5f2hYVnaXWp6oMSjxpM66JpEw22VsS70\\nxYvsOqQLM2f7QtBeUKbUhKLlKrV\\/WJByVmnnEtqEs4vtELCTkSV2KmyQLIKVlQSkkXSBbkMY\\ngQd6Tn1gwsFg8dx9kcYlakHMH0cx7RDpDiV9R6D8Dz+\\/qitikHfGnh6CRvEXkocSUOJSpKgU\\nqSoAoWkjIhQOYyIzCgdx7YahRHWPHCFQQeHjthhSLG59ShoefXrtCSkHuPOOLkqNM29W5W6r\\nFuCu2Ddcg5tpCv2nUp2jTsq7nnrNOyExKvM6+WSxKPy2sdzhWjzVZ\\/4Q8qDpG4ViWpWMNuUz\\nHK1JcIbNfp+pbl+SsulCW0Lem5GTdpdVTLoRtVifoKJ6aeDqpm5EhYWjBcKI6x44QqCDw8ds\\naDE2GMM4ylRJYuw\\/TsQMIQW2XpxsoqMog2uJGryymanJAnUoZmktqVqpCxoZFQcX4kwu+HqN\\nVZqUBUFLaS4VyzxFrdtLOhbD1gLAPNLAH1QIkm4Faf2jDj05KU+2cQGbVu2YLYbsrEFLNpXE\\nqZcWhtqUkHpmZeoNanFOkpTK2\\/XKpNbtdbKU6uW0CxtIrFGyNjLsVw3BSmtVPzVcmvVGUsoB\\n+jYni43VJUIScmm2p1Ms35ubLmqECClV7UoNc1lT8g0X1A\\/ruXylpsE85ebA2pGfmh9DyAc9\\nVMd3YT6S+lZo\\/GUZw1xUnLqtSQCEN4fYhFVxUHyRrzkU+STPTKZulS2YJJtyr20veU62qpRP\\nLmMfJKps6HpnAWJDJrN1poeLRnZvvKJWvSLPoDehlE5TUHUF6e0K4vvD+3+WmkNymMKM24nR\\nJnqelNwTYZ1ycwvJf85brM0zaxLcvcgD0ALK0vbEruylLukZ6z55XmGYJNXoaljIDOblmUz8\\nvtVEnUfpqmZdGW1nFDNUdtXlh9glpEWn8z35aWHeLtoPB7YMV+mUS7JCTdfSgOPyLz7U07Sa\\nikNNKTNSLsnUJZ1plSHGX5dCkw2MIOWEw\\/qD0nQdIPD2v4WVk7Npy5KA1M3RaDzmvk9OPU\\/Z\\nt3JS5UJU2G2ZFi69bzlKnEJCArbNg7pB2Zfcsi68EsVqNX22m2XH5uy7kbNQkUuKVspesyEr\\nMN1GmKc1F69OrMpLuuBK0rlshmeV8V7K9oezmZTNVihVeidg6FStZllLfpinMwDa5WuU5b8m\\nlxWhSlM0l9IIC0JVdItinzGC8YMFNDq8nMF9F102Ysp0pFipK5Gb7OZKAQcywh5k2ulSknMf\\nusfuQQ0cr7VPVjAe9bswNrbu0daoE8XcRLBKwyS1LS8pWahJ3hTRMzCc5ibcu6sMyrTpMrR1\\npYRKL0j49ckRpv4EeVT6MNk4w2xLKWoXJgxMTd4vBlIC0rmLRVI06+mSGiVzLkvbc1TpZxp8\\nCoOtpbeekvWbpe37Q0sy100+nXhKICUqfVlRawEpCUBPlkow5T3ghOX7LSzMOLGbs39YnKuz\\n9J7Ci6dizNVd+1ag6Egylxs+Ry+0ITrBFWZVMUsNax8xc5NSTjiR+wp85IkOG\\/KK2rYULbM6\\n6ziunNlKS3WiqbmQgaKKKkwGamXFC1lzjs22i1w0dQYHiHYnQ50uOtSLlNeJJExSFDsCeGaR\\nWFtJQN5DTMve9s9gLeeXP06fpM9N0yqyM5TKlIPuSs9TqjKvyU9JTLJ1XZeblJltqZl32lAp\\ndZdbbcQoZKTmIahZHHf749EvFvRv0ddJGkobxawqw\\/xNlX5QsSFcqVJk5iuS0orMEUO8aX5N\\ncdJQcj9JRqxKKOWRVlmRp6xy5AfBC6ROVTALE67MKqm7tHmbYuxhGIFnBQH0UjJTbkxSLtpb\\nKlZh2cqFXuqZbyJTKrPmx0JhTytcB1jspfE9OqeFJpVgt8pNZpSFaDWYk2m6igqVuBpRQlOq\\nnrAmKYrOxrEUiVrpcxK1hpN7N38xndN92Zhapc2HKczEg2RewMTwKB5\\/QfHui8KKTmCR45xw\\nPpjZ1jbyPmnJg0ubm5LDaWxgt6WKlCuYO1E3W+4jIKQhNoTcrSL7cmFIzDiZG156XadQttM0\\n8Cwt7WpXKDXrXqk3Q7ko1Wt+tU90sz9HrlNnKTU5F4bizN0+fYl5uWdG8Ft1ltQ6I6IoGKcM\\nYqY85w3iCk1pkJC1\\/R09LzLrINrCYYbcL8svUXRMNtLFwCnURWNRo9VpDnZVOnzkiu5CRNMO\\nNBdt5bWtIQ6nkptS0mxsdIbJfPBQz6xuPblwPshZK0q4KGfRwOfUD8M448LHPu93f74vzB4H\\nON8QRvEa2ORBI4HKLg4ecenx9kceHFp4KJ6jv9\\/D0Qql8fhDLrG\\/2bsuniYSQDvA+32wQ+Ck\\nnny7d32RcCRwPj4w1StKuCgergfUd8XgkcDlCC2Du98EOgs8+\\/3+PRFwWOfMePHNDULPPv8A\\nf7N0XBY58x7fHqhstb9PWPsH3QkoSeFvDq0OgQeBHx9UXZkcFH0EjuhqCDwI+Pqi4EjgT46o\\nbLff6iOvhCSjkfC\\/zHyh2HVjnB7R+iFA\\/wBKfUe+GWurqPjqyiu0HOPj3Qgtdw9Wnygssbj7\\n\\/nD4PI58x6Iv2iPxh644\\/XT1jtHdnF2sOkeuEFvuI+\\/2\\/rgzLG8cuB6+\\/wBkchmDwIPpi7M9\\nJ9ccdFdZQ4KI9JhOTkq3q+\\/nBn5j3xyOsoc\\/x98Gurp9g7oYbRf4xiodWOfPtGceZDzHv7uv\\nUPUZk\\/o+4dc+tz\\/XPQPb3wa56B7e+GO2X1eqK7dfQn1HvgyK7urd3WvPUujl7vDv6156vdc9\\nA9vfBrnoHt74Z7c\\/ij1mDbn8Uesx5kV3e3roHuuXRy93h16jz1ea56B7e+DXPQPb3wz25\\/FH\\nrMU26+hPqPfHuRXd1br1HuuXRy93h16jz1e656B7e+Ka6un2Duhltl9Xqg2y+kD0D45wZFcx\\n16oMyP0fcPnD3WUef4e6KZnpPrhjtF\\/jGLdZR4qJ9Jj3IefWnXqHqM44J+Hd3c\\/gPU+zA4kD\\n0xbtEfjD1wyzJ4nOKaw6R649DfeT4D9cGcncPietYeF5A6T2DvIiwv8AQn1nuhrrp7fR35Rb\\ntBzD4d8KDX8U+v1eHV4LrPC3u5c+jrDkvLPOB2CEypR4kntJMI66uoeOvOLSSeJPjqhwN+A8\\nPVfrugyKO8+8mFiQOJA6vG+LSsc2Z9nj1QiSBxI+Pqi0rHNmfZ49ULDXcTu7uXXgfXHoQONz\\n111rCxWebd7\\/AB6IsJJ4n1+N0JFZ5t3t8eqLSSeJzhwN25DTxPr\\/AFwoADcBCpUkc+fZv+yL\\nC4eYenx9sJKWlPFQHVxPqG+EVPj8EZ9Z3ezfn08RDgQB39co9hySTxMWKWlP1iAejifUM4aF\\nxauKiOobvdx9MWQrwghdT5P1Rl1nefVw98IlRUcySfHMOA9EJlY5t\\/s8eqLConq7IUEE93XK\\nCFCoDn9A8e+LCsnhu98JkgcTl7\\/VCZcPMMuvd498OBAHf4\\/KCFCQOMWFfMB6T6eA7\\/VCZPOT\\n6SYRU8kfV84+yFgE7h6+EegE7h6+ULE85PrPjKEVPJG5PnHp5u+G6lqVxO7oG4RYpQTuPHo5\\n+OUOJb3cTy4deOndDgQBv1+H39aRepSlHMnuhNSgndxPQPieAhMrJ3cB44nx0QmpaU8T6OeH\\nwjn7B18PbC4vKirj6hwhJbiU5jiegfE80IreKtw80c+R3nd083PCBIHE+jnhwDgB6oIvUtSz\\nmT6BuA7BCRWBw3n2fbC0rKztTm5eQp8pMz07OOty0pJycu5Mzc2+4oJbYl5eXQ48884o6rbT\\nLZWpW4DMxsUwN5JrTrx4XJTNJwVq2HlvTgbUbrxheOHVNYl39RTM2KLVWV3tUJN5pW3bmqJa\\ndUZcZAWhZ2jId1FcxFh3DEt57iOuUmiSpCsrtTn5aSS6UgEpZD7qFvua2S2ylbiiQEpJNo2E\\nhSqhUnQzISU1Ou3ALcqw6+pNzoV9mhQQm1yVKKUgAkqABI1wkk7zFqErdcbaZQt151aG2220\\nla3HFnUQ22hAK3HFrICEAEnPzdYxK0wH+Tv2JSlSdV0kcba3d00kNuzFnYU09q16Gh1tWa5W\\nau64peq1ysyLwOSzI27aU4gE7OZQcnI3Q4E6EuifoxpTOYN4JWRZ9Vl2wpd3TUq9cV4pQhoI\\ne1r1uyarFyy8u4lJdel2KqxIa+s4ZdGUc6Ys8rnZxQu1Yw7LVTGE4i4QqWZXSKSVpsClc\\/UG\\nfOyEkmy5alTTS7EocKSCbLo+yPEc\\/kXUFytHYNrh5Ym5sJOoKZeXUW72tdD00ytJIBTe4ELb\\nR\\/5KvTg0i1yc3beDdXsa15wNOIvXF0TGHdvGWf1CzPSkrVZVd1VyRcQouom7btutMFptRCz5\\nqVbytHv5PJhJbfzfWdJTFm4cTakgMTE3ZOHrCrHsxDzbub9PqFyTK6hd1fpzzSdXyulosKfT\\ntTqBGprq3lXTjrhtapcaerqKzOtEpVIW8lNUdzSM1IVNtrRTGVgjUW29PodQrPNGaFAY33Xp\\nVXLPF2XtOjSNCYJUlM\\/UCmrVIp\\/BcQwpLVOl1EHz2nmainMea6RnHNGKfKm2pYnDjFMMphKn\\nLukIo4Ini2Rp2lVm0uzSXEm5DtPRIfmjKLHNceH9ilIl8jr8rMVR0WPbVJQZlAdDmRKN5ErQ\\nRple86GqjvAtkDhDo7aOmjBb7sjhBhdh7hPSW5NEpU6rSKbIyFUqUu0ULQblu6oKduGvuJU2\\n3lNXBWKi\\/wDRpzeGoIZXbpLYfW6HpejOTN2VBsFKUUtPk9NSscztUmUBCkfiuyMtPoIzz4xr\\nPxVxupNuUp278ZMS6TQKLLKXnWL2uWSo9KZc2anPJ5I1KalpNMwtIUGpKntB+YUQhphbiwiN\\nQ+OfLPaPNgmbpWENCuDGqutJLbVSaD1mWM27qDIrrFakXLhnjLvZBbcjbPkM4htXk1YSgtPq\\ngGG8CbS9qNQceoNBr2KJx9203VnS89KJdOUXn69UltSTTnG03OJcVrlSqxtYE0jCGEJdtNbq\\n0hINtoBbp0sEtOFOmjMjLJcnHUaWC2mUIGYZiDaJA13aRWId0baXk5xFsU5wFIlqIVtTZRlk\\nA9VnFqnSv62apRck25l+xZZZa5se9NzRu0ehUDinipSE3S2HFrsyhvLum+pqZW3tENTFDpap\\nuaprkyFAtztwuUinrKhrzyR50ReMeOU50s8dRN05y+v1M7TmQ639yuFqZq2G3ZZwLbLVSuPy\\nubuypJeYUGZ2WdrjdJmlFSxSpcKDaNfpL0y6pSi6+++6palErdeedcVrKUonWW44tRUpSiCt\\nRJ6DHX2AvIdnHizPbScUJlW7pWqh4Ys\\/NEaKKJmtTzJl5dYtkcblafOIUCS1OpKQTW9a24yc\\nohcrhGioFgUioVNPZouNM6JJhwuO3GqHJiabIsO0l1XKRvT0gOW2xCuIztE0dLHkcPKaVOtM\\nXve7clc94PNBWbM1JW4EO2nQX8vNcYqSrzZKc8ltLOsnTXiNiviPi9cDt0Yn3zc99153aBNQ\\nuWrTlTXKtOELVLU9qYcVLUyRBSnZyNPYlJJoJShlhKUIjg5C0arOBK3kCRaORzmAdqQd+aZd\\nOS0qyy3OlrM88fb0+1KVI6rjjZnHk79pM5KRnx82X\\/YwOGWvtFg5+dluPZODdnWzXZkx2OEM\\nN06Rmi32b1SQ357WJkEDMJmsTanpxTajdRlkzCZdtSldlLtpOWKNxDjOvYjcK6zVpmdSFZm5\\nVKw1JNHgW5RkNyyFAWSXA2XVADOtZF464kKRUamQZSWcU3nveX9Gwnfv+kXklRGWSkt66xwy\\nHGPtZGz5ZnJc88ZpYyOybzbYGXEFQ1XXN\\/A5tD8ZKuMfZEgAJSkBIASAAAMhuAy3bgOaLFrC\\nBmfQOmJW\\/U5h70W\\/yKTwQbr9bhAI53SEWiJrmFq0T6A7t\\/8Ajb\\/ZaEm2mJZsIabbZbQMkobS\\nlCd3EAJyzJ4EneSMzCK1lZPMOYd\\/X0xRSis5n0DohFS+IT2E93s3xhgHeo3Ud5Ovv4nmeiwA\\nVG3tMVWrLMD1+Of3dvDcbyEGiUdKrlCcMn65SxUMOsAUnHi+xMstvSMy7ZtQkkWJRphEwFS0\\n1864hTtuvzdNdQ8Z+gU2vp2KmGZh1rW5gJo0Y\\/6Ud4t2Do+YSXvixdKlS5m5K0qK\\/OSdFl5u\\nYRKsVG5q64WKDatIL60NOVq5arSaSyT9POIG+PQR5ELkz7u5OzAa+DjGLZex6xruak1u8UWx\\nUDWZC2LQtumKlrNshysGRlWp6q0uoVe66rXJmlvTNFXOVliSp83UJemtVOcnWCMPTFVrEnMO\\nS7qqbKvCYfmFNqDC1S57RpgLNkLU48EJW2kk9nmURbQ7elySpiYauhRZQoLdXlOQ5PSCCrdd\\nZsnLe+Uk8CY3cQQQR0hE4gggggggggggggggggggggggggggggggggggggggggggj5W7bNtG\\n\\/wC3apaF+Wrbd62pW5cylYte7qFS7jt6rypUF+T1SjVmVnabPy2uAstTUs62SAdXNOcfVQQl\\nSQoFKgFJIIUlQBCknQpIOhBG8budxpAQCCCAoHQhQuCORG4g7iDwiNjpjfJvdGrF5dXu7Rau\\neoaOF8TSnpwWbPInLxwdqMzqaxl5anzMwq7LJE3MkrcmqPWa3RKYyfJqTZbbCGWERUdLbk0N\\nMvQompyYxtwfrSLIYmTLy2LNlpdvHCyeDky5LSbi7tpTBbt1+pLaUunUi9JS2bhmGsnBRkbh\\nHp+Qxm5SWn5aakZ6WYm5KbYdlZuUmmkPy01LPoWy\\/LTDDyFsvS7zK1NPNOpU282pSFpUDFeV\\n7Znh6sZ3pRs0ecVc9rJoSZZSuBdkiUtW1\\/qCpcqJusrtaNHN0CTmLqZBlXDrdsXaPi0SABwA\\nbUgdxjyJEPEZBW8dPP6uf3w5BBGsk5jmI8bj1dsehDpecgloNaTZqlx2RbM3oz4mTxffTc2E\\nErKS1mTs84UlLlw4UzWztV2Wbzeedbs5yxKpPTTxdn6vMpa2Ji66XHIQ6dui6KpcdtWfL6Re\\nGlP2r\\/3XYNNTlWuGSkUIW5tq\\/hjMIF5ybjbTUw9OP2\\/KXZQqay2HJ2utF1CTS9c2dYkomdwS\\n30jJpuRM08KeypFtXZYDzlqwN1qDa2k2\\/bTEXm6PPShJU0XmwL9qxdxNt\\/pJAC0WG8qTlB0C\\njYmNNgX0+vv+yFOyEZhmZkpqZkZ+WfkZ6SfelJuUm2XJeZlZqXcUy\\/LTLDyUPS8ww8hTT7Dy\\nUuNuILbnngxQKI4eqICpsgkWKSDax5jeOYI4g34erVw7C+n1\\/Z47IUB5x6IaBYPHd29\\/6IUB\\nI4GGFN91j7uvCEFF92ndw+6FZhmWnGjLz0sxOS6hkpqYabeQrdlvQ4lSSRnkCRmMvNVuj5eW\\ns9VDq0tcdhXHcNiXHIObaQq9u1Sfp83Iv8Q7KzMnMylRknAoJG0lJ9oJOeqlRCRH0wWOfd1+\\nPthQHnB7CO+FNzD7CVtoWQ06lSHWVhLku8hQyqQ6w4FsupUk5VJWhQIJBGsetPvy60racW2p\\nKgpJSoiykkKChbS4IBBGoO4xlJhjyjmmPg8ZWSvBdGx3tWUTsyi4ZfY3Q3LbUOkMXLSG5Wrv\\nThG0T5XXqdc4QlRQNZDbITsiwf5W3Rpv8sU7EJq4cFrgWoMOs3LJv1+2TMLVqhuXuegSjkwy\\nlJBD0zXaDQpVnLznAk6x0fpeUNyvOHTz90cdU6DQ66koqVOlZpWWrtVo1JlII1ckTLZbfQBl\\nn5rgA83oOdVYo2KbKcYFx2fwumgVFy5NWwe6ijO5jclblLLb1EeUtRzOrMg28s3\\/ACqSoqi0\\ncPbZMa0Hs2jUDU5VACfNqoDOJygABKXlLROISlN0pQ3NobSmwyEJFpjmF2NjFQkGrowexPka\\nvSJhQUmq2PdEnWKLMrySotTXzXNzVOmFgpzXLTSXCjZ6qkJUkkZe2npg31SdmzdlKpV1y6cg\\nqaYCaFVFbslqU7KMu0xYA89LTVMl+f6Xhs4AtFtu6LDrCbkwqv8AuqwK83lsp2h1qpUqaCQQ\\nsMfOVImZKdTLk5a7LxmkODWS4haMozNw95S\\/TMwoDUrfErbuNVBZDaNvW6Y3K1xplBO+Wr9r\\nppkztD\\/fZu4aNWnSkg62YKo5rxb5G1Re7R\\/CGI6JiNs3KKfWmlYcrYB+qwzMZpinzS0j6zip\\n2QQqxIbB9GLmo+3bC9VCGsR0Z2QeICTNSpTNs3sn0lA+bzbKTuyNedqB3k65Z4dq6U2FdxbN\\nqfqM9ak6sBOwr0osSxcO5QaqUj5bJJaSeDk65JlWWYQI+xvnC\\/BHSAt9EjiDY+HGLdvLbebl\\nFV6i2\\/dsvKF1B2jtKqEyzOuU2aTuW3NU2ZlpxlxKXmX0KQhcREcKuWI0c7uVLyGJFDvLCKqL\\nWhD8xPSRvK2GFK1gUpq9usCuktrTqrXM2hKNIC0rUvVLpb2ZYS6QeH9\\/Ibr2C2Ldv3A6GW3n\\nXbIu6XVVpJtZCkIqUjITbdWpbgUQVStTlpR1Cstownn5gxRsV2g7P5pM3UqJibDDssvMzUux\\neVItuj0QZWuU5ZkysaekzOvKF0q3EXsWTfwdilpTVIrdPnu2SM0jMKbcdWk5TlXITQZm0oP\\/\\nAGrKhcFO8G3f2M3IbaHWIapiew7XfWB9ZdCltNWtXHbntZT6yorenKBeqqvUEoKidnLUi5aL\\nKs5FLLCGvMGqjGHkFNKCzlTc5hFe+HeMtKZP6zkX5l\\/Di8Zvn\\/8AkVX3Z+0mAjfrKcvxKs\\/q\\ntnPdudtnSnxWt8IanajI3RKNlKNjXpFKplLe8EIqFOVJTTi937LNuTpJyPVGQtt6Y9rTuozd\\nNt1ihvKKU+UUuYlq1JH8ZxxLvzbNspOZ+jalpxYH4StxGxoe3Pbrg3I2zXF4mkWbAStdDVaz\\ngFNkqm5gS9cIy3TlbqAAB1USEqiJVvYvhqoZ1\\/RLcq4rXt6M6ZNQuD9WUsZS+oOkqrUb7GIS\\n2LeidpL4DmaXi3ghiNZVPk3nJd24KjbU\\/NWmtxrPaJlbxpSJ+157IJ2gMjWJhJb+kBLZSqMe\\nwsHju7e\\/9EejXbmMOGt16iaJedGemF6oRJzcz81T6lK5kSNWTJzTpTl52yZcTuyzMdLYq6C+\\nh\\/jXt3cRdHrDOrz82pxyZrtHoaLNuebU4clGZu2ynreuOZzJ1mg9VF7Jxbi2tVa1qNyUHy2k\\ntKalscYAnJVzQOzlAnQVk6X7OkVZMuU2+t6VYVobWH1jVFW2DTDRUaVWgD+bL1aVWyRu+tNS\\nwcJ32uJEAaHUHSABF4cWngo9h3j28PREtDFTkDNG65lPTWFOJuJmFc8844pMnVk0nEa2ZZGe\\nbSZWQnEW3cZKTmHFTd4zxWNTINqC1va4sTuQf0tLTMzNYdXXhdixINrWJWUYrE7ZVzzCEJ1m\\n1u025ZRNty20\\/Y9T7sX9VwbyWwXYvjDnlNbGMRhtCcWt0OZXa8riSTmqSW77u0nlodpA1uCU\\n1FVtL2BBiuqlsuxrTSpRo655pN7O011qdzWtfLLoUmbO\\/QKlk3NwLkGNKAfP4SR6N3vz94hQ\\nPIPOR2juzHrjJ\\/E3Qb0v8HTOLxA0dcUqVJU9RROVyl21M3bbEuUEJzcuqzjXrbDSifoXk1VT\\nTu\\/ZKXkcsV3W3GXXGHm3GX2VraeaeQtt1p1tZQ4240sJW262vNDjawFIUNU7+F1UusUauS4m\\n6LV6ZWJUgETVLn5WoS5zWKbPSbrzZzA3TZWosRxtCJqSnJFwszspMyboJBammHZZwEGxBbeS\\nhQsdDpodDD0EHeCD2b\\/dFwJHAn17vVwjjovDix+EfTv9+cbGMWH+urqPaO7KLtp0j2wx26uc\\nJ9o+Ji8Pp50kdmR+IhOVPL7PhBDzXT1jtHdnF2sk8493vhoHWz+F6we7KLwpJ4KB7CDHmQd8\\nEOcweBziuZ6T6zDaK5kcCR6Y87Pv933wQ511dPsHdBrq6j2juyhtrKHOfTv98V11dPsHdCey\\n7k9er9ceZRyHshzrnoHt74Nc9A9vfDfXPQPb3wa56B7e+POy7h1br1Hnr5lTyHX6vjzMOdp1\\ne37INp1e37Iba56B7e+DXPQPb3x52PcPaev1HuuZE8vefnDnadXt+yKa56B7e+G+uege3vg1\\nz0D298e9l3D2+HXqPrMqeXxhxrnoHt74oVq6h6O\\/OENc9A9vfFNdXT7B3QBruHr9Xj1fnr7l\\nTyHXXVzDjWV0+6KZnpPrMIayjz\\/D3RTMniSfTCg34DwHh4dAeosOQ9nXIQvFNZI5x7\\/dCEUK\\nkjioDtIEe9mOJ+z5x7CxWnrPo78ooXOgevu+2G5dQPws+wE\\/ZFhfTzBXpyHxMKCEjv8AGCHJ\\nWrqHo784oSTxJPV43Q1L6uZIHbmfiITLiz+ER2bvdl7Y9AA3AQQ8JA3kgdu73xYXUDnzPQBn\\n7dw9sM4prJHOPf7o9sTuF4IcF88yR6Tn7Bl74TLi1cVHsG4ezj6YR2g5gfd3xYVqPV2QoIUe\\n7xg66+PLfaFosKwOG\\/x0\\/phInnJ9Ji0rSOfPs8ZQoIHE9ddCDrwhUrPNu9sWE85PpMJFZ5t3\\nt8eqLSSeJzhYAG4QQqVpHDMnnyPX2d8JlZPUOrxn6oSU4hPE+gb4QU8o5gDLr5+70wsJJ7hz\\nPX3d8KCSeFhz9m758dbmHJITvJA7YRU+PwRn1nh6uPuhuSTvJJ7YsKwOG\\/s+P2ZwtLfrPu68\\ndO6FhAG\\/X4ff1pCilqVxOfVzQmVBPH1Defs9OUJlZPV2d\\/dlGRuGuh5pUYwiWcw20fMWbpkJ\\ntSEMVuWsiuSdsqUs6qUruipykhbjG87y\\/VWkhAcWSENrUnGqFSpVGlzN1ip0+lSid8xUZyXk\\nZdNrXzPTLjTYsN\\/paDW9oypeVmZtwMyku\\/MukaNS7Ljzh4aIbSpVvAd0Y5lZPDcPbvy5z9mU\\nJlQSMyR39Q5\\/VG6XDLkIdNa8y0\\/fT+GGDskSPKGLlu9N1V5I3Z+SyFgStzUOYUPwg\\/c0mCAf\\nPGQMbIMK\\/k9mB1DXLTeMeN+I2Icw2lpxdNsuk0PDmjLmM0l2XmnJ833WJuTSkKaSqUqFDmnV\\nhD+1YBVKxTGI\\/Ka2J4Z7RDuNJSrzKL5ZXDcvM1wu2ANkTsk0qlDQ+iXag2FH6pNlETSnbNca\\nVLKUUV6UbNszlRW1IhF9xUy+tM0e\\/JLqKdCbAiImSnidyRkOnn9HRzR3JhTo44+Y6TCWMH8H\\ncR8Rkl9Ms\\/ULWtKtVWiyTpWGz8519qUNEpTaHCEuPVKoSjLRIC3EjIxOewm5N7QfwW2DtmaO\\nWHczUpdDJRXL4kJjEqtImWyCZ6Vn8QZq5HKVOvLTrqco3zc23tXGJVpiWPk8ZS1e\\/MPrMl2p\\nKqXJQKQiSZRLs0th9pUxKyzDYZaYYpEgHplphptIaaaalghKUhCRuyigcQ+XNIFTjGCcBVCf\\nWrRmcxBPNyuXcApVKpKZ9bwVfTLVWSkWJuSQmwqVsLnXSg1WstIJ1VL0uVdmVkcQH5gMZSNN\\nfNXAToDuJiC4O8g1pmX+uVmsSp7DvA6kLca8rauC4UXldiJZ3JSn5Gh2N87UF9xCSNeWqV5U\\nZ8E6hSMlFG2XBfkBNE6x1Sc\\/i9d+I2ONUYXrTcg7ON4b2VOBITuNHtaZfu5hW01iVDEBbZa2\\nbeyGqpbuy64NK2zaeFt2\\/SazcD6SdVx7ZUeQWOCSHnxNT28\\/grpqO0Ex0bcGk7iJVw41SjTL\\nbl8sgafKCbnSk5+YuaqRm29bL8OXlpVYyGrvJzo\\/EPlG7dMYBbSaunCki7cGWw+03R1JBAAy\\nzxM5XmyBcDJPpGu64BFqUXYth2QyLVTfPXE2s\\/WHy\\/cgg+lKoS3LEaAWXKG269iqMpcKNHPR\\n00cqYtOE2E+G+F0s1LlmbrVFoFLptYmpZSgpRrV1zSF1+qj8HaVerzagkBvWCEoAfXJpB4Y2\\n5rtIrpr822VAylvM\\/OIUpOYOrPKXL0tSQoAZtz7iwf73zxqmxRxttu1ZL7o8ZMVaJbtPSXCz\\nVMQLwkaRKlSAFFiRVXJ5hDiyAA3KyQU44ShLTalLSkawMW+WH0T8P0TMnZD92Yx1loBDSLUo\\n71Ft5L41ipM1cN1JpThZABAmqPSK2lTikZFSNotqK4d2WbRdpM8uap1IxTi+bfc\\/ZFSQzOTM\\nv2l7Wna3PKVKt+lcFc1NMk2IuALCZzKMJYVYSirVemUxttIKJBosS67BKSQzJMpcmXU5SD+Q\\nYB1Tuum8hW59Ky4JwLYtWhSVGaOaRPVN1dUntUZ6q22ECVkZZYz3IfTPpz3HP8HGXEPGCpu0\\nubr+Jd\\/tU235IGYnZ2461JUC25BIIVtXtu\\/I0SSTu3urQyMk\\/W4RE\\/xf5Z\\/SSvYTchhhQ7Sw\\nbpTy3djPScsm9bvRLrC0JZdrNxSwoAKW8iX5O0ZOYQ79K3MtDVQnWNiNjDili9VfnvFHEG8L\\n9qKFrWw\\/dFfqNXbkQ6c1s0yUm5hcnSpYnMplaexKyqASlLSEjOOrcD+QvjKd7GYxbV6LhKXN\\nlOS0qDiGtixBWhfYusUxor3BxuqTgSr0lMLCEpVBaptqwtTMzeHaNMVN5NwmamP2BLEm1lpW\\n6H55xNwSW1S8tfQBaSSUyrsZuVo0SMKROSFvXNVsYbilto03TsOJATlGEwlJ2PlF41Zym287\\nJLOQdm6FN3A60jzkSjqjqxqPxp5ZvSRv7yum4VUa2MFKG6Xm0Tcky3el5lh1GzU27X7hkkUV\\ng6hUpt+mWpT56WcUFszpUlDkajZGl1KpKCZGRmZgH++IbIZG\\/LznllLSd\\/MVg9Ufa0\\/D2ccA\\ncqc21KoG8ssAPvauXAulSWkKz5xtxuz\\/AAsk9ZYR8mHYpgUtTE7SjiuqNWV51il5FTT2n1lZ\\nKKw0xSchXqjzmQmXUABPnCjmUqpK\\/tfxhWM7f0mmjyytPNqOlUq5YWABm87s+TYAKCZhDaiS\\nezAsBxl8YiX7iZXHbkxEvS6r4r7wKFVe665Uq9PpaKitMuzMVKZmXJeUbUohmVZLcswnzGGm\\nkICY4OQodUqZBlJR5TZy+mWNixlv\\/vrpSheXOEFav3Otq5dwSNtUSnBJZlEvvJy\\/XE3k+4SO\\ndKFJDLZ\\/dIaQeyObzAHQBu+wReQqsrKMNylLkWZeXZQlphpLTcuwy2mwQ2zLMBKENpA9FAKQ\\nNBltpFXvTy3VrcUVuuOKK1uvKUpa1KNypZJKlKJ1JUq5O\\/WOuqfYSRqrqc2VHcdhKZhI6lPO\\nJzI4ZhDSMt+S9+Y+ylKbT6anUkZRlk5ZFwJ1nlDnBeVrOqz38VEDmEPlKJ3cBCalZbufxxjX\\nuzUzM\\/tzqing2DlbtuF0JsDw+tc8ybmMNbi1\\/WUSOW4ewaRUkAbz3nx6oRJJPuHRFCc95hBb\\nuWYTv4ZnmHV05\\/b0Q0ATu68YRF63AncN6ujo6\\/HwhopRUc1H18B9kbXNEHkXtPfTFVS6za+E\\n03hZhrUFNrOKuNiajYVsPSK0h4T1ApE1Tpm9Lvln2w4mTn7YtmpUR2abMtNViRyddalRaH3y\\nbjQ3wJcpdz6QlTrOlVf0mETC6dcUq5Z+EUhNgBaTL2FSqjOVK4PJ1Fcsv7sLorVEqTYTNuWv\\nIO6rLUxouCa9WMrjUoZWWUR+y53Mw0Um2raCkvPA30LTSkE6KWnfGwlaXOTeVTbRS2SPyrp7\\nNBB1ukkZlix3oSoDjEK3Rg0G9K\\/TNr4oWjhgreGIMszOJkavdrMm3RrAt55WxUtFw37XXKba\\ndJfaYdEymmzFWFXm2Ao0+nzjmTKpWmhd8l9w0tByk3lpwYmOYqVqWcZm3cH8KJyrW1h0HEFt\\nRkblvuYl6ZfVzSjqVLS63bklh86y8lJRVZ+WzS5Kpte07XsagUu07Ltq37PtWiSvkdEtq1qL\\nTrft6kSgcW6JSlUakMSdOp8sHHXHSxKyzbW0ccVqlRJP00W5RdnNFpuV2evVZlNj+WSG5VKg\\nATaWBVn13h9x1JFiEJMSWVocswEqeJmFixsRlaB\\/tQSV2Ol1Gyh+YN0dUYQ4J4R4A2XT8OsF\\nMNrNwtsmmHWlrbsmg06g05Uypttl6oziJBhldUq02hlJnaxU3Juqz7qdtPTT7xKj2vBBE\\/bb\\nQ0hLbaEttoAShCEhKEJAsEpSLAAcAAABwjdJSlKQlICUjQJSAEgcgBYD1QQQQQuPYIIIIIII\\nIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIwY0qeTi0NdMyVm3cc8E\\nraq92Py62ZfEy3G12fidJLSwiXlHVXnb5kqpWW6ehDfkVKuZVft9vU8+kOtqcbXGl0rPkyOJ\\ntsmp3Jod4wU3EqlNLmX5bDHF8Slp3w3Lh1IlZGkX3SpdNl3LUVIWVuu1uk4cSDaGFuJffeWi\\nWE0GCIvWsG4dr4Uqfp7XnCt05LfsabB0spTrYAeItoJhLqRwTfWNfN0uRnMynWQlxX9Va\\/Ju\\nX\\/SJAyrP90Ssd1gI8pbHbRf0iNGK4Ra+kBg5fuFNVdeeYkHLqoMzK0StGXceadetq5pcTFt3\\nPJpcYeSmet6q1OScDSlNvlIzjooKI6x0Hx9nVHrZ3fZln4g2\\/UbSv207ave1as15PVrZu6hU\\nu47fqbKgdZmo0asys5TZ5kjMlualXW94IB35aO9J\\/wCTw6DWOJqNZwnaufRjvSb2jzT+H7xu\\nLD5c26pSlPVDDi5JtTbEugHVYptnXJZck1qpybOSgupKzsen2c7lEnmp5sXKZWdtLTNuCUPp\\nBl3Vn9JYlUxHJrDcwi6pV1D6d4bX+Tc4aBR\\/Jq46lTfKx3mAoFA9R6D8OmLwSOBjeJpOfJ9t\\nPXAYVGtYeUC3tJayZQTMy3UcKJxbF7s09lbiWlVHDS4jIV6ZqcwhCVil2PM36UbVATNOlLpb\\n0rXTaV22FX6hal8WvcVm3RR3zL1a2rrolTt2vUuYACjL1Gj1eWk6jIv5FJ2UxLNryVmRFU1S\\ng1ajuFqp0+akiVZUl9ohlwjX8k+nMy8ORbWsab9CY0D8s\\/LqyTDLjR4BaCArvSojKod6SRe4\\nvcGOHCxz7uvx9sKA84PpENQsHq7e+LgSOEaUt+I8R19sYpQOGncevnD1Lyk7j5w69x9ffnC6\\nXUq58j0H088ceF9I9I7v0ReCDwMNlJG8evr7YQQRvB674a1S26FWQRUqXKTK1ApD5aDc0ARq\\n5JmmiiZRzDJDwGYyHNHwjuF7UjOsVW1a9Vreqcm4JiRmWH3S7Kvoz1XZSclnJWflFgE\\/Sofd\\ncQdbV1tbVT2Qlak8Cew7x6oXD4y84ZHpHDq3cR7Yy5eoTsqkoZmFhsgpUyuzrKkkWUlTLgW0\\nQoaKGTUaHSHW5h5ogtuKTYggXuARuIB0G4ai3jH39haZenRg0WWaXiXP4iUKW1U\\/NF7Bi+2X\\nGmglDLPldZS3eUs0ltISlml1mXaSnzVBX0ZjNrDnlqJiUeYp2N+Bz8o6kteWVjDqqLaeQjPV\\ndUxaN3KbVrZBSm0u3kgKP0alDUDka7AoH6pz7Dv9m8Q2m5KTn2ixPSkrOs7yW5yXamU7wQcg\\n6lQCj+CUgFOfqgmINmuy\\/FhcViDAVE85cvmqNCS7h6fKzb8s65S1sNzbv99IcQoAJUlQFon1\\nF2pY0oeRMrW5xbKLAS804J1gJBF0JZnUzCG0nW\\/YFki5KVJVrEiDDPlIdD7E0S7MtixIWXVH\\n16nzTiRKTNmOMKUBq7es1BCrUOsolILFwP6qgdfVSUqXsBsXGCttU6Wq+HWIr03RHgFS0zbd\\nxN1SgTWqEgltEnNTVImkpBAyUh05HgdYxCjqeFto1DWUzLzVJeVv15CZXswrPMHyeZEwylJ+\\nrqMoaGX1dVXnDi6JaWJWHlQNawvxJrts1NtSVtTdBrdZtOqeac0pE7RpwF1SchmXVNIV52aU\\n62rFI4h8kTAtVDhw3jGqUcruU0\\/FFMlqzKKJ\\/qQnJJUgWGbkZXHWppxIBzBZNxa1J8oecAQ3\\nXKJJTiNEqclXHZJdha61NvCeYcXvJSky6FEi2QAgz+aBpbYnUvZt1hmh3IynV2jk5Iqp08tI\\nH4L9KclZRCiB9ZynuZZ5nduHdlA0x7Um9RFyWxXqM4rJJdpsxKVuVSrLepwumkzLbZA4ty0y\\n4CdXM\\/ssQNrM5QjT0wpDbNQuo4gUmWWlQk75tymXW2sBQK1TFwUZNPupbToCUq8puFOp\\/e0s\\nPLVr5e2Dy2061spPFbAqXdWlwJmatYNzuShQkLAWhu2bjkZtRWBmr6S6msyNVSc1ayefsT+Q\\n\\/jpgOP0mmUDEzIUSH8LV5uUdDWhCjJVU0xouAC5aZRMm\\/otqXfWwqftb2d1UJEz55R3VWzF+\\nVWtkKIGiHKaucSUXJAW600NMykoibnQsecJ7g1USV7UqVfVwarKpihEL47Pa1dmSl1k56o2D\\nziVq81krO6LL3wXwJxpl1TGIWFuFmKDL8v5Iio3RaFq3Y6llLezSJSqVGQnZiWWwlQLExKTD\\nT8s4A7LrZcQ2oRa7E5VvQ2vVUu1UryufD2cmMktSt92hU2AhxR\\/Y36naxuqiSgA1iX5qqS8q\\nn6pe1lJQvN3DbSFwuvV5qYwpxosq4J57ZqS3Zl90iZq6MirUS9J0ypGpSzqTmdlMMtOjiExz\\n1XNg+PcFTCpt2n41wo6wSW52cpVRl2xZQJUzVpZMs0UAgErZeWkFIuCL2lzDmEcQN9jIV2kV\\nFLlv2IuYk5pZJNgFyqlJdSTc5Qtm51sDcXzRxD5HTQMv4OOSWGFaw5qDillypYdXtcVMUraZ\\nBAbpFfm7ktmWSyQotiUoUuTrFL+1CWUN4PX98n0sSbcmXsLdI276A2CVSdNv6yqLd7jgzGq1\\nM1m3anY6WjxzfaoToJG6WyJ1ctqNj\\/i7Q9REve1SnWk5JLVYRK1rXSPwVTNTl5qa7VofQ6cx\\n9Jlnn2tR9MG+ZUITW6Bb1XQkAFyVVUKTMunn2i\\/KZ9jWJ\\/3uTbA37hluepm0Xyh8LZRR9oVV\\nqbLRAbZqk+3W\\/QuPQ7PE8pPNpTYWCUPegLBCkgXjR1HZJhWfKi7QKWVK1zSIcpq81gM37CVK\\npKt5OYqCj9bMTeNC998hPpi20HJi0K9hBiRLhL5ZlaTdNVtysqLIzaS9K3Xb9JpDSpoKyaCL\\ngmEJcC0vuMICHncOr45NnTpw\\/ccbrejNiTUtkUjaWPISGJbbgcb2qVtKw7qN0a6S3uOSQ4y7\\nmw+hp8FoS\\/aRpi2nMjVrdrXDS1EJzVTZiRrDKVK3q1jMOUd4Np5loZcWvnb35js2laSWENT1\\nUm6nKc6sn6GrUuqywbAKR58yiTekhxyA8rJ37wdxNg07yv8AbvRMrdcwdQa+2gHtHk0udYm1\\nWKbHzijVEyKE2vc\\/R9txFhcRBKhsBoLhUZZytyKtLJbeYnGUAWv6Lkut49xMzYbra6ef9dNi\\nXvY80ZK9bOuuz5xKw0qUum3avb80lxaVrS2WKvJSjoWUtOKCCgKIQo5eaY+Wj0aZa9bBudhc\\nlLXRadblptpbD0kir0meD7Tmo24zMSSph1a0LC0pUy8zk4Fp80giOpLv0P8ARTv5D33W6OWC\\ndZemR9JUXcOLSlq0QWw0C1W5GlStYaCmktpBZnWyQ2wd+yQUzqneXvJoUhnE2zGqSKhbtHaZ\\nXG5lSr2zFEnUKXTii19EKnXL8XBpELndgU23fzLETKzqUtztOdlrHSwU41MzJVe2qg0m28JO\\n6PPyBI4EjsOUV11j8JXpOfvibZd3JDaAl2IdU3gq\\/as88dY1G0L8xApa2UkP+axTJm5Z+3UD\\nXfS6CaMXApmXY1\\/J0qYONN1cgpoqVRDy7VxHxytSdcLhYbmq1ZtxUhgFExqJEi9ZNPqjuzfX\\nL5lyvAuMMKl9zz6ZlqyKV5b+xefCRPNYwoaiQFmoUOWmG0brqC6RVKktSAbgEtJWbftYNwIv\\nNbE8ZsX7FVInRa483nnGyeSbTctLAK3aZikfpGIle1c\\/G9g7ortl\\/uT2juIiSdcnyfFlWu7a\\nOlI8jzxsJC5MJUP5tqdH7LVaZiDL6qmmvxaOUvO7s5dJzRj\\/AF3kC9JyUQtduYuYF1nUSlQb\\nqs9ftAedGydUtLQl7Jr7IdLqUNNbZ9ppzaKU8+wG8l2FTfKl2B1MDsdokhLqNgUVGl1+mZSb\\nXBXUKVLMqtxU24tH8a5tEfmNl2PJY+nh6YcG8GXmZCaBt3S804odwKQe6NGW3VzhPtHxMV25\\n\\/FHrMbWq7yK2nlSFOCQsywroShbaUuULEi3ZdDwWwHVOt\\/dK5byg204fJnQ6hp0vnWaadlv1\\nwenK\\/wAlnp+24lw1DRuuaYDTTDy\\/mG5bAuslL7wZbDaLXu2rqecC8lPMshx5hr9cTCG2PpBO\\nJHbJsjqRSmT2nYCdWvLlaViuhsvnNa1pd+eafvrYjs7gkAgEiNG\\/g\\/FkvcvYarqEp3r+ip5T\\nen\\/aIYU333za2JvGBO3\\/AHH8r7INv+4\\/lf1Yyhqmgvpn0hSxNaK+PrxbfMsr5rwsvGtjagLJ\\nKDRqRPh1jJs\\/rloqlidUB7NxvX6wq+AOPVACzXcEcXqKG5oybhq+G1504InBttaUWZuitBMy\\nNg9rMnN0bF3zfo1ESqUxVhWft5jifD87fd5pWabMXva1uxml77nde9tLxq3qVU5cXfp0+yOb\\nsnMNjTeCVtpGg38uPd1bt\\/3H8r7Iptz+KPWY5iftO7aUuZbqdrXFTnJJJdnET1FqckuVQlra\\nrXMpmJVssIQ39IVOBA2eSidTfHzm06vb9kbxtbbyQtl1t5JAOZtaFpspIUNUqI1BuOYsdxEY\\nSkqQbKSpJBIsoEG437+UOi+rmCfTmfiIoXl\\/uR6O8mG206vb9kU2h5gPf3Q5kVy94hPXw69v\\nrc7Vzpy9A+IMWlaz+Er15e6ENc9Xj0xTXV0+wd0e5Fd0HXW6FySeJJ7TnFIQ1j0n1xTMnic4\\n97M8+ur9biF9ZI5x7\\/dFNdPb6O\\/KENYdI9cc3JW7cVU8mNMt+uVITjjbMmZCk1CcE06tzYoa\\nljLy6w+4479ElDWuoueYnzsoSstNDM64ltPFS1pQm++11EcLnfuBhSUqWbJSVHTQAniBw17o\\n4kuDmB9O7vi0rV1D0d+cdoU7A3HGsh1VIwYxWqqZcoD6qfh5d08GC5rFsPeS0d4NlwpVqa5T\\nraqss8o7Rp2g5poVZYbldFTSCZJdaaBqWEl8UZsrdJCfpKzRZJvUBH0z2tsmAdd1baY0s1if\\nC0h\\/R2JMPyVhqZys06XFgEk\\/t0ygaBaCeQUOYvms0upzH9D0+eetb9qk5hzU6fmNq4pPfobD\\nQ2xdzJ4kn0xaSBxIHV43xnpQeS40\\/rmcbbkNG28JdTrrrSTX6zZVqt67DJecLjt0XPR22Gyg\\nFLLrq22ph4eTMLcmCG47hoXIsafNXLIqGH9mWsHTLhaq9iZZ74Y2oJcU79zNQuNShKkakxsQ\\n8SSPJhMJzVEXntseyOm3TO7TsAsrSLlkYsobj4F7aMMzzjx1zD0WzqkjfoNoxg\\/FcwAWcN11\\nxJtZaaTPBGoBt2imEovY3+tpxOovqoKwM8gT49fsi3XV1Dx15xvKt\\/kCtKudSy5cWKGA1vtu\\nhla2ZKs33XZ+XCwovtPs\\/cDS5AvsHZpAYqcww6S4RMgNp2vfdt\\/J6ai4lDl4aU0lKuDIOSVt\\n4Svz6Dm0grKKtU8QKeU6j5ebSDRlbRpCHtZhS1MNwmo+VJsCpYPnG0emPEfm06nV6qknklVN\\npU0gg6WUVhG85gBG6l9mGOpm3Z4emUXsbzD8lKgAgb\\/OZlo3F9Ra+h0vpEbckniSe2LFOITx\\nPoG+JaNrcgJowyCQ5eOLOOFzzCACEUqfse16etREwHC7Ku2hcE8dy5ZbIaqjOo6w4XlPtTCW\\nWsl7R5G3k\\/7XGtOYQ1e8ppJAam7uxDvyYKSVPFX6xoVwUClO5tvNMkTNOdITKsKQG3\\/KH5iv\\nar5cGxGn5vM\\/wvrpGiPoygNS6Vm4AOas1KlKCN9zkKxY2QdAZDKbFMZTGXt\\/oqSBFyJmeUsp\\n7j5mxN3PAWNr\\/nDfEJEvn8EevuHfzxzVBte6Lunfm+1rdr1z1AqaSJC36RUKzNlTpKWgJSnS\\n8y6VOKQtLQDZ2pCggRP7s3Qn0QbBS19ymjRgjITDKkqZqUzhzbNZrDZCmlAJrdbptSrOqlbL\\nTgbM6U7VsPEa51o7uFdsCy5JumN1W0bWp8ohewpjU5R6PKMJJ11IYkWnJZtClH+9tM67iiPN\\nzIBrapeX9SSpbWG9mNWqCzcNuVOuy8ioAn0VrlZGmVUuX0\\/JpmkbxZ3SJTJbBJ1ZHnmIJZo2\\nGZElT3pok31SFvTEqQLblFs6\\/mRBHsfk6dOPEQy5tvRgxYZbmwwqXmbrt04fSTrcwtKGHkz1\\n+v21JiWcStLomi\\/5OlhXlSnBK5ujMuwuQo027q2K7pewkwwYVkqYaue9363VG05pCkNS1h0W\\n66bMPgHPUerMq1qpX+uNbUSqV5U9ILCmllSV3Y3Ouo1glqmSVSn9pq55hL7MoqSOZI1FLmUI\\nWTxyScuuqrpa2dL5po9v3HVHE7kqm1SVLl19JS4JqoPnj+HKN8wiBVLyy9uFZCkUHBVAoTSt\\nUPu02ozU0kHcRMVSos09YSNxMgASBe49GJlT9gdDRZU0\\/Wp5Wl0qcYk2FbvzUy\\/ajjqJgD13\\nI0v2B8niorYlJnFTSYqs8tSEGco2H+H8pSksOhQLyJW5LiuGsmZQU5hp5205TVUQpTKvqxnR\\nh3yJ2gTYy2XaxZF7YnzLLaEtv4h4gVhTYfSoEzLsjYybHpcy6oBSFszlPfkSFFSZRLiErR3d\\nVdLa6n9dNGtqiUxCtYBVQmJ6rPNpOerqLZcpLeuP98XLrQQNzXDLrSrY+4qVcqSu65uRazVq\\ntUmXkqblnlwmZdhM7kN2W0mllOZKQPOiuqrtZ8ovFGYVXaDU6S0u4UzSJqVoBShVgUA4Zk5R\\nSwBoO0fJKbBa13VedU7ZFhWRylug00qFrmfU7USSBvKZtcy1e+pACU31AFhbM7DvRp0bsFGp\\nebw1wUwmw9epqApFeotk21TK0kBYUl2duXyIVqZdC1IAmp6pPvJ1WkJXqIQlP2NaxiwzoBUK\\nhelHWtJKVMU6YXWH0qHFLjNIbnltrz47RCMugc+nHEjHSxbOQufxbxete3SlKnzMX9fVMpj7\\nmaVr12TXqo3MPrWkKLbbCVvPK8xtKl5JOC9\\/cqpoWWMHWpfEmo35PtKIVTrBtWt1bIDMJU3V\\nqpLUS2HgopWlIYrri0jVUUobWhR1VH2M7QsezAnG5TG+MJh6wcnZOm1SpA3JJL1UmEzjSUEk\\nkuPrQm+85jcyB1OE8Ot9jPVmj0pCP+qpdkpJQsEizcsFlxZAsCEMFQTbSw0kN1rSwsyT1kUO\\ni12tupz1XJjyakSTg5il5xydnBu4hynJ3b+qOna5pV37P66KNT6JQGiVarmxeqc6joG2m3Ey\\nainfnnTd5IBERZcROXLo7XlEthPgTUpzWJ8lrOIl0StMCB5wBmLZtqUqqXSSEkhF2NgAKBXv\\n1k4HYjcrVpm36ZpilXjbmGVOmUFtyRw+tOnMPBrcRsq1dCrpuGVfzCVKmKdVZF3PWCdRpZaj\\noTCfkM7S6n2Tk7QaTh9lWVXnGJ62h5wtm1yZCjiquJXbc1MSsuSqwcLYIUIrPbVdndMzCXVO\\n1l1N02k5NzIVC4spyfVJslGmrjKXdCFJC9RExy7MXLvqEnNz13X1OtUqXbU9POz1VFHosu0N\\nULdmWWVyNLZaTnkpam0ga31s98YAYmcopodYUqmpavY123X6rLAhNHsETt\\/Tbr4yUqV8rtaW\\nqVEkpgDWC01SrU5LS0qbdcQ\\/qNKh5XzitifibOqqGIuIl733OKWF7e7rprdwrbUMwgMCqTs0\\nmXaaB1GWWEttMN\\/RtJS15g+TkaTVqkUiRkJyaCiRrssuqaGRyOu6QGmwMtUFSwCoZAE5x01h\\njyFcOU9DbuLcZzcw2MpckcN06Uo0uhSQklvz+fVUVOtnVJUmQlFlJ9EoUM0Qaqbe53Kpuh0C\\nRkUahL1QfcmlEEEBYl5YSTbSwLEJU8+kEalY0EiXFDlx7WldvKYNYJ12srOumXruJFckqBLt\\nqTuC1W3bZr8xOMuKBUkG56Y6EgFaULUptOuHFTlTNMvFHymXZxHYw2pEwokUjC2ks2wtgZgJ\\n2NyTDlVvNopGtmW7lQlSlLUtH1dXCiRw3uGZ1Vza5WnIPEPP7Z4Dm1WpbaoJIH1VPpIz87z4\\n+vksNaUzqqnZybnVBIBQjVlGSd2fmpLr2Q4JyfBA54v3DexHYbgstuU7CFKqU61YidrCXcRz\\nJcRbK8g1RczJSzoIBSqTZlgk+kkAkk1dWdp+LqvnTN4hnG2lXHm1OKZBnKb+grzJLKnUa7n3\\nHSdMxNhbq6v3HcN1VR+t3RXq1clZnDnNVev1SerFTmTmogvz9QfmZp4gk5FbpyzVmeELSFs1\\n2okeTU2Y2assnn0iXZI46wW\\/qJUMsstQqPDNIXw78kaHR6YAZKnSrCkgAO7MOP7uGb7uu8T1\\nlwk8+Zjkivo9f2eOyLRVXkMtpZkZNtlptIQ0lQShttCQAlKGWQlKEpAsEpXlAsAABEBcqClK\\nUoJKlKJJW4oqUonUlVjcknUkqJMdRyOGr51V1OottD8JiSQXlkHLL6d4NpQoZb8mHBnuCiN5\\n+ykbQoFPIU3IpmHE5EPTijNL1k7woIWAwlQPnAtspOfUlOX0pIGZUfSTDdbxO5O4dPOe7xw4\\nRq3qlPTNwt9aUHelv8mi2mhCLFXgoqMYqnnnd6yB\\/F9Ee61\\/AkwoVIaAQAAAAAhKQAABkMhw\\nA3dZ35w2WtSzmeHMOYfb1\\/CLScsyT1kmElLJ4bh7Yxko1uNTzPX36x4Ega7zzPX398XKUBu4\\nn3dvdCZOe8\\/oh3TabU6zUJGkUanT9Wq9TmWZGm0umSkxUKjUJ2ZWlqXlJKRlW3pmamX3FJbZ\\nYYbccccVqoQte47gtGHkH+UV0lzTKtO4VM4AWPPkr+63H2bmbIm0sJQp1RYw+YkqriY66+gI\\nTT3Z20abSZ5yYZyq7EsmYmmNvT6RUKm6GqfJTM4u9lFhpa0ovbVxYGRsa\\/WcUlOv1rQ+0w8+\\nrIy046rTRCSoi5sCbA2HebAcTGmwrz+rw6e6Oy8J8FMYMeLrl7HwVwwvvFW7pnVUi37CtesX\\nRUWmSHFqm5tmkSk0KfIMttPvTNQnjLSMrLsPzEzMMsMOOJnC6LXyZ7Q+woVIV7SJvC89Jm6J\\nYtvu0Rwv4ZYXodSlK0Nqty26pO3fU1MPkjaz99pp1SZQgzFvtocdlzv+wtwdwnwPtaWsjBrD\\nWxsLrRkyhbVu2Fa9HtSkKeS2lryualKNJyiJyfdQgGYqM2H52ceG1mJl51a3DZFI2WVN8odq\\n801IN6KMuxlmprhdJWlQl2j\\/ABkuP96L2tupbD8y5YzDiJdPFI\\/KOHjb0TkTfcDnVY6lNt8J\\nbRS+TIaUOJa6bcGlTiBaujtarv0s1ZtuuyeJmK77aUNLQxMfNE4nD2325tDqkN1BN13RPSTz\\nDqZy2zkjOTxok8kBoE6Gy6bV8NsF6dd+INOQkt4r4wOy+Il+iZafbeZqNMXUZOVte0ak0Wm0\\nCdsW1rWfLOu26te2mC7tAgi0qPg7D9FyqlZFD0wmx86m7TD+YWstBWns2VXG9htvvvEglaVJ\\nStilrtHBb8o9ZxQI4gEBCTv1QlJ1te2kEEEESiNjBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBHReNOjdgDpG0P\\n7ncd8HcPMVqYiXflpT7tbXpVZqFHamCnbuW\\/WpmXNbtyaJJUmdoVQp84jIqafSqO9IIbdZaf\\nbU082280sZVtuoS42tO8pUhYUlQNtQQRCVoQ4koWlK0nelaQpJ8QQQfWIjTaR\\/yaHRav41Gs\\n6OWJd+YA1t8zb8tbVdzxWw6bUoFySkJRmsz9Kvqlsl3Wln6lPXtczjLCm3mqZMPSy2pzQjpF\\n8g9yiOAK52fouGVPx9tOWcSG7gwLqrl1VFbbqFOspcsCpSlExDcmAlKkTQpVs1eny0yjZCpv\\noclX5j0R4IgVW2Z4VqmZbcoumPq\\/qtOWGW77xeVWlyVCb7w000SNMwsLaeYoNPfuUIVLrOt2\\nVejfvbVmQB3ICPGPJBuS2rlsyt1C2bxt2u2nclJfVLVSgXLSKhQq3TZlByXL1Ck1SXlZ+SmE\\nEZLZmJdtaSN4zzjhQecH0iPVsxi0d8BtISi\\/c\\/jhg\\/hzitSkMPS8q1fNoUW4Zmmtvk7RdFqM\\n9KOVOhzIWouNz1InJCcadUXmX0LBVGkzSC+Tc6EuJip2p4MXHiTo516Zc15eSpFUViRYLBWh\\nzauOWxekyq6lKXMKbeQ1JYi0yRl2g9KsyaG1sGVrGq7HaxLhTlJnpWooGoZeBkpk7vRGZTsu\\nogXupT7YJGiRuGjmMNzjdyw41MJ4AnsXDfuWS3bvLo4G1r2gkBZHX29\\/fnCgWk8dx3dnXw5v\\nVG\\/nHn5ONp34YKnKhhNO4a6RVAZLq5Zu17jYsS9VSzAQtxyetnEBdHoLTi0lRYlKPe1fmXyy\\npCW9uuXZe0zYv6OePmj9VBR8cMGsTcKJ5bhblRflmV625SoZFxIcpFSqcjL02sy6iy6GpulT\\nc7LO7J0NPK2ajFbVTDNco+Y1KkzsogG3bKZUqWJ5JmW88ss\\/2jitNRprGifkpiXP5eXdZF7Z\\nlIIQToNFWKVbxqkkX3m8dQg84PqPxEKJdWDxzHQd\\/t9\\/TDQEjgcouCzz7\\/Z49UaIoPCx9x69\\ncYpQRu193Xth8l9J+sCOviO+FgoK4EHsPv6I44LSefLt8ZRcDzg+o\\/EQggjeCPGEEEbwR4xy\\nQUoc\\/oO\\/7fbHHz9JpFUGrU6XIT2Yy1pmVZdWkZADUcWguII+qChaVD8DpFyXFp58x0Hf74UD\\n\\/wCMn0g\\/A98epJQoKQpSFDcpCihQ8Ckg8OcegkagkHmCQfaI+CqGFFnzusqXYnKWtQzJk5pZ\\nRrEg\\/sc4mbbSD+I3qDVz1dU8Pip7BSaQraUivMrIOs2ielnGFIIzKT5RLLmM1awA10y6CAPq\\nnm72DqDz5du6FAeg+o90bNitVWXsETri07sr4S+COV3ApY9ShppD6ZuYRoHCRyVZXvIJ98fC\\n2tilpe4TpaRY+LOJdOp8tubptIvio1GhgISUI1bcn552nryRub1qWspTmBqqCExkTbHKt6a9\\nilhq6J+2L0aZTsdlfuH8rT1uJGY+kmbPVZky66lOSUvLdccc1UvP7Z1S1K6yC1DgT8fXFSoK\\nSUrQlSVDIhQBBHOCDmDn2RoKrRMF4hKlYkwBhGsurvmmnKRJtT2v1iJ7sFzSFHiW3UXtzsYk\\ntNxxiak5RI1mpyqE2s1LT800ycpuApjtFsKSNfRU0U6nTU3zus7lvqw0ltnEDAGmzyl7IPVK\\nzr3mqVs8tz626NW6HWS9rDNbDaq8wG8i0tx3X2jWU1o8sjorV5DLdx0bFOyJoj9cLqVs0qtU\\nxpRdSkFiat6v1KovtpaVrqK6PKqzS4hLS1Bou6S521LWqJKpyg0xxZG91Mo0y6ejN5hLbpyO\\n\\/erp6Y+RnMIrMmgfJ0VCnEghPks8txIJ3jdPom1KSDxAUCR+FredFdVLyftg9XKlDDFZw86s\\n3U7RqzPLQDYAFLVQmKjLt20slmTQi4vluSDO6ftxxtKZUu1FudQkABM9ISboFiD6Tsu3LTCz\\nvF1uLOU2FrC0oC1OUG0M7xUymk6QFlySnlpCRdiazY6UKU4GgHl3nS6CywlLm5Tri0tBv9c6\\n\\/k5LkZT2Ljdalwlr9TXFu3q2pQ2jH3DX7TaipWaHHytr5gqr5IDYedJQPqBSvqhUQrpzA5s5\\nqp1wrSOZuckUrz\\/+7sTDfON+Uudx5tU63y83g1dbGZl3aVPJzzAamnWVkZHcpEzLsoSRkeDq\\nhv8ArRX9T8j3Z1UErRRtoNakEqHoorlMkKolJG7P2SaChdr2NinT6pA3TOT8oeo+iKhRaTMi\\n4ziWenJC4sAQDMefgKOt1WUNd2ms+6nY24s0vVMrflfd2ZSR84voq4OWrlrfO7M8HB5uatpr\\n62XDzlA\\/cU\\/Slxbk9TymfotVyA1vL6LLtlWQQCo\\/Na6bvVlmdQoHnq1R9TVgA0S7NJywMl2t\\nfmLdsFoEpFp37cUpkAHCQG6FWslgpccSW0hSXA4tOqsOOIV21RtPbTksnVLGNt\\/p2RUc7spN\\nGugDzXUKLn3ZUCsBeqHnCNqFZKDS8tdhrZVxVfIKmJrP9EYnwDVyfqLnqXMUtxd7WCnJFmsr\\nRzJSXDvtexiTyu3jDb4T59huaaJPpGTmJGeIBy\\/VLgkSo7\\/ROQbtd9p68jph3c3kaladuTR3\\nZ+QzFTp+sd5Or5RMVLLM6mWWuU5K+sVDV+vk9MmnqyFQsWdlzvzVJ19mbJIAAVqPUmSKdZes\\nCnNeqN+srhEFy3+V30xqMtpdRq2Ht2pbUlSmrgsWVlUPAOIcKHfuUnbZXqrSlTStk42rUWrU\\nWl0NOo7ponLZ42MFv7pMH8LatkWdr8xzV22\\/tEhS9sEeXVi5tmXAUBlSg7sCFqUh4qShutKr\\n5AWOGirsKDhyokHRVKxRNSoOotkRUjTU6gXGZA1Mb2X2vbPJgAvN1SSJNrPyKiU95EnMzKSO\\n4Enutvmyyml1h69umqNd0orWVkUydImmgkJBBUU1pt7WUrWTqpYUMxvXxKfppXSfwlmMg9Va\\ntI57MfrqiT68gs+dn5Eic\\/YeLmWeY3tbSIaFG5cSTWhtFwaOE2y4nZB2Zo2KDU0l3NZDzjcj\\nPWJKKY1GykttqqExtV5pW62nzh2pReWywGe2YuDCfF6mZ7TafMqbOrgQeDIbE7ctvBYcHnOF\\nQb2ZzShL2etFd1DyG9pUqFFWBa+kDQGnYgoFQuBqChLM\\/OLNwbgFIIvYpzGw2rO0LZtMkBvE\\nCWlGxs9K1KXCSbaFb8ihvQ8cxA1NyBeJfctpBYQTQSWb2lE6y9X9c06uSfnZbyozVMZCU8PP\\nUEo4+dwjmpfGTC6YSC3f1tJzVqDyiqMyiicgcymZUyoJ3\\/shyQD+FvMRMabyxeiPPJR5VK4s\\n0cqYbeIqVl0t1SXFBJMso0i6KonboJUF6ilS6tRWzmF+brdg0zlWtCOfIE3idWaIFS4e1qlh\\nzf7oS4SgGUV8zW7V1F4BaySlJlsml5TSvow7DJ3yPdokrm\\/+TNo4sdeyor1RN9P3hT1XvuFh\\nc8NxjZtYowE+oJaxXSkk2A7eelmBrbeXg0m99503A7olTNYi2BM64l76s58oA1tlc9Fd1db6\\nusUTqtXMjtgnaxYVelEs1GqWjWpEuB5DE7O0apSanWtdAeQ3MOOsqdbBdQHUgKRmpPOc4xcn\\nylehFPNNOs480lCH1FKBO2piFT3B9IWyXWp60ZV6XQVJzKn20BSMnEqDagpX1ctp86G82+2w\\nzpCYepddOSVTU7OyLIUE5naTU7Iy8qzkBxeeSCfNHnqCYjjvkvY+lFBZw9tDk1NkqzO4NrTa\\n28ls5BMuyUlN9TcZePOMkVTCDwyIxVh9wKsnL9K0twHNYJBHnRvfhvvyMSMJuyMIK1KJl6ha\\nOG9VknNR5LE3QLYnpRxSRmh5Lb8o60rU3hC9XdwB3xxrODGA8wpSJfCjCN9aU6yks2JZzqkp\\n4ayg3SlEDPpyiP6nTX0RnFIbGkbhCFKUlKSq9KO0jNRGRU67MpbaQSclOLKUJT5ylJTH0X9l\\nhor\\/AJSuj\\/8Anlw8\\/pFGMrYTtGlEhtM1juVSslSEKw9XWkn6oJyiabCiBlBItw3aCPQxhR8l\\nSarQXikAFQdprtgdRch\\/TcbDQb7XuY30\\/qGYJf4HcLPzfWl\\/8Ig\\/UMwS\\/wADuFn5vrS\\/+ERo\\nX\\/sstFj8pbAD882Hv9Ior\\/ZZ6LP5S2j+f\\/PJh38LhENHYntJH\\/8AlcbfyFXhy\\/8Ar\\/D1AR75\\nhhf9\\/UH2U\\/u\\/7bw90b33sFsCpfVExhLhKwV56oesOzmtbLjq7SlJ1sics4fU+wsHaKy61TLK\\nwzpMutZefRT7cteQZU4lOqXXUy0ky2VpQlILqxraoG\\/LhoT\\/ALLPRX\\/KWwA\\/PHh3\\/SOOCmNN\\njRIl33WHdI3B5TjSy2pTF9UGbYUpJ37KZlZx6XebJ3h1l1xsj6ilCFp2F7R5pJaM1juZGilI\\nTh+uuptcWUpHnblrXFiQY8LGFGLLXVKAySbBRcpzfiAS8N\\/EA6++JEchP4f2+y+KVPWbRZZx\\nQemRT5miU1hxxPmpdfTLLZbWpKTqhbgOWZJzz3KPYh2FLpSX74tCXSs6qS7ctFbSpX4oK51I\\nUd2\\/Lee2I3s5p76G8i+WH9IfDpbgSlZVKVJ+oy\\/n8AJmnys1LFX4yEuFaPw0pyj5ed5SbQik\\nfKdvj3QXPJdfamTtu+6jrlGet5N83WnM+V55Zo8l221\\/vWvnD7XkxY\\/nFdp+D20OcUvKoraw\\ndWnFLCgkJVm83eK7mwSddLAawn6TwewMqsVYfaCbpyGq0xsJtYFIBmhlI1PDXfcxJUmcXcMp\\nbX2l+WwrZ5BXk9WlZviQPo\\/JlvbUZneW9cZc0cLM4+4SSusXb0kl7LV1vJpCszp84jV1fI6c\\n\\/tMgrz9TX1D9bLVMRk6hyrGg9JONplsV6rVQsFSnKfhxiO0hrI5BC01W1qa4VKGSk7JDqCn6\\n7iVHVjr+ocsbogySUGVRitVioOFSKdZUi2psthJSlRq1yU1BL2Z2ZQpaElKw8ttAQpchkvJA\\n2jTVicFbSNf69Qpim79dfPpBNvqnfzSTvRnx3cT4CYNnMV0lVv6xPysxuy7ix2ydb\\/G1yFES\\njZnSZwnYJ2VaqU7qqyzlqHU0BW766fLWJM6vMAdVef4OXH5ya0tMPWQRLUm75teSSFGSpTDR\\nzPnArXWS6FAcMmFJO7zuOUU2s8tvo\\/sj\\/cDCjGGqENIUn55ZsqhpU\\/tCHGleQ3ZcRQ0loJUl\\n8JUtbilN7BCUB1fWVY5cyjNh5Nv6N9TnCS4lh6s4oytNCRqfRPPSslYtV2mq7kXJZM03rIT5\\nk0hROrM6d5Du06aylGBMROAm16hX6BT9BluVB+ekSnQ6+iCNbC+ka93aBs1lyUuYhS4U6\\/k5\\nSozAO63pSsgtBueRsQRciJbE3pf01skyNkVCZG7VM3XJaSJ88kghmmz+XmEKOWv5\\/mZ8XI+T\\nndLq5nARTbUoUocsx5dM1CfAVqkZqDDlNzBVqkjWTkjzNY\\/WiHjXeW+xlmNr9zODGGNIBCgy\\nK7UrquLUXsAEKd+b6ha+2CZnWdIQllRZVsNZCkmaV0xcPLDaYta2hps3hnaQUVEC3rGM0Gws\\ntlKWzdVYuY6rYQsNhZWrJ9wL11JbU3YVK8gHHr5QX8P4epyja6qril+ZSi9rBSacupoJ11yN\\nqHInhqX9ruzqXBLSKpOEG1mJFQKtd487flkW8cpO4iJpM9pQYpTh\\/W8xQaZmScpGkJdySTmE\\np+c5ioHJPDNWtv3x8VUMbcVqnn5Te1Xa1h53kHklJ\\/i\\/NUtJav8AxMucxB4uTlHNNe69c1HH\\ny55FC0qQlFs0u1bSDaFhxOq25a9ApDwWhLqtR5TpmApLbm12jbak9BXRpA473sXBd+NWK9zN\\nuhYWxXsQ7sqksG1mY1mWpWcqr0szL\\/rqaQiXaaQyhEw8202hta0xaNG\\/9n3Vm8hqVdwPTiLZ\\nlU6lT9ZcRe1wlc7K0lSzr+mnNbfoI0kztzw61m+j8NTz9rZDNuSUmSLDVRa8\\/KeBASXPdE5+\\n9sZKPQkbTEjFWmUZt1KXC5e18StOQtKy4lKyuvVRkLS4pxxKTnktSlZ\\/W3Yp3XygGhrZu1+d\\n9IjDucDIGt9yk\\/N32CAjX+jFjSVwl46o3pZ1zr+Z9fNMQuUMT1QdcW0xNzrzjiluKQ27Murd\\ncOupSylK1rccUoqKlZqUTnu5ualbOuibALNCqOqeCn5dUqDuBCkma2IUkhXmqB1Vf8VUWpS\\/\\nIdwdIJQmu49q0wlNs6KVTaVQU6WPoedvVsJuLWJSrXUg7ojs5t\\/qtiJCgUqTFxlE5NTM5lHG\\n\\/YfRwJPAjKAOB3xKOu7lldEW3xMN0FjFC\\/XWypEu7QLQlaXJPq2YKVLeu+tW5OMMFZ1VKNPd\\nfSQtSZRSdUrxUvHlznClxiwNHttC882aneN9qdSRv3OUOiW8web6yLiOX4pjR5LYW3Y\\/kXWJ\\nKTzOWUzOtqKRmRmfJBNDLIA7tY6p+rrDVH0Mtg\\/NHUM7XJZrhtESsq5M55cUoW67LZbs0pWp\\ns5HztQ\\/VixaV5MOwGjZVTdPn8QON2KV1SvVF26kgC6maKabLLBO9C2FNEn6mkQ6f2141mgoI\\nqspIJVcFMhISxNlcEuTDc28m3BSHEqHFRjPC9eWK0wboUsW9O4eYctecGza1lMVOZShSQlG1\\nevmdu+Xccb1dcOIk2G1rICmSnVbTh3e2mBpQYipW1eGPWKVSk3CpTlMlbtqlEozqlHW1naLQ\\nX6ZSVlvPJrWkTsElSWtRClJU1lMJ7eZOtNTNRnFAZFBdZYazzG\\/Jpna59jxGRO7nT9LK2Pak\\nin6OjSThG8qnA5OkkccxNreSN\\/EBIHQAnOLNpGEtlWGChVAwHh6Ueby5JtmhU\\/zu6bWKqhMt\\nrn1WuSCp1ViSQRqTCKjjfEFTzCfrtZnEqvdpyemBLjMAFAMdqllAIAuENAG2ojGBTk1UZha1\\neVTs28pTri1ByZmXlqO9xas1uLWokKK1Z5nIbhHPSVm3PP5FiizqEqP15pCZFGRJ87OcWzrJ\\nyzJ1AVE7k6+YjKFpMrKJKJVhlpOf1WGkMozGeROohIPFRTkD17otU4pXPkOgbvX0xK3MTukB\\nLEm02AAAXFlwWAAtlQGrbtwUQOfCI0qeUfqtgd6lE6+q3xjoqUwtrC987PSMmM8tVvaTb4HF\\nRKUpZZGWe7J46xzPmc\\/1ElhfRWdUzs1OzyhlrISW5ZhfDPzEBb3HhqzG7j50dkkgbzw9\\/ZCZ\\nX0es93f6o1ztaqb9wH+zSeDSEt28F2Ln\\/nhhU0+r8\\/KOSQB77ZvfHCyVsW\\/TtVUtSZNCkbku\\nutCYdB6Q7MbVwK38QoExzWvkAlAyAAAyGQAG4ZAbhlze6EySeMWFYHDf46f0xgKU44czzi3V\\nc3FqWfaok\\/PlDBUpRupRUeZJJ9pi8niT6YsKwOG8+z7YTKiePDo5vVCS3Eo3cT0Dm7ej39UA\\nF9AI8AJ3QoSSd+\\/4dg\\/RCK3gNyfOPsHf6PXHY+GWDOMWN9dbtjBzCzELFO4FrQn5mw8s64Lw\\nnmkrITtZmXoFPn3JaXQFaz0xNBqWl283nnW20qVG4\\/AL5OryiOMCpKoX5b1h6PNuTKWn3JvF\\nC7ZWfuNcoteooyln2C3dlRZqCACv5uueZtZZSPpJholCV7mnUCr1VQFPp05OAm2dphZYSb2O\\nd9QDKACd63EjnGUxKPvmzTLjpG\\/IhSgN31iBYbxvIGo11jRApSlHMkn3DsHNDiRkp6qTkrTa\\nVIzdTqU683KyUhISz05Ozcw8rUaYlpWXbdfmX3FEJaaabW64ojVB3ROg0ffkxGiTYnkdT0g8\\nVMTsf6sy4y47RKIljCCwphtJDkxKTlPok5cN9TAURskzcjiBRVlguK8kamFtqlt5+Amh1ota\\nMEkiSwBwFwxwucDZYmKxbdsSCLrn2lJWkoq95zzc5d1aRqqWlHztWpwoaOzR5h3WHS9lNZmM\\nqqnMytNQbEtpPnkwkaXBQ0pEuN4FxMqA1JFhru5fD825YvKbl08RcOrHglBybubg4Dw8+nRz\\n5EPlH9JJ2nzdOwIqWElqTqpQrvPHqZVhhTpWWnCSxOi2alLTWI1SkyykzHlFDsmqNbEtKKz5\\nRKB\\/f9o2fJc8FraTIVvSpx2u\\/FGqJbS\\/M2RhTIS+HtnMTIdGvJzt0VhFfuy46ephJPlFNk7C\\nnkvOJCSlDBM3KwgixqXs3w3T8q32Xam8m3pzq7sg31yyzQbaKSNMrwetzMblihSTVi4FzCh\\/\\nXFFKL8LIRlvppZZWCbm262LWjzoV6J+ilINSOj1gFhvhg+1KOSTlw0egNzt71CUdyC2KziFX\\nV1a+a80ctyKzcM+AMgCMyIylggicssMSzaWZdlphpAshpltDTaRyShASlI8AI26G0NpCG0Ib\\nQNyUJCEjholIAGgA3cIIIIIdhcEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\\nEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\\nEEEcPV6NSrgpk5Rq5SadWqRUWDLVCl1eQlqnTJ+XUQpUvOSE809LTTClDNTTzS2yQDlnkTzE\\nEeEA6EAggggi9wd4N+B4jjAQCCCAQRYg6gg79ONxobxqzx05Gfk5se1Ts7XNHG18P7gnQFi5\\nMF35rCmbYe1QhcyKFarkpZM5NPkpXMvVa1ag5MTJXNPlyZWt5enbG35LxbswqfqGjppP1ilH\\naOKptp4y2fK1ttSVb0NTV92U7RXZdLJIQFow8nFvJzUShSMnpasERepYKwtVsypyiyfaL1U\\/\\nLoVJvlV75lOyimFrVfi4V33KBBIOufpNPmLlcs2lR1ztAtKv+kezKQo96grhe9hHnaY1cg5y\\nkmDnzhNSOEFIxjoNPWUmu4MXfSLnVNI1QpDklaVaNsYhzQWMxqMWe4tCkELCddgu6scQcKcU\\ncJKw7buKeHF+4aV9hamnaLfto1+z6q2tOtrJVT7gp9Pm0lORJBZ3Z7+iPWZj5y5bVti86PN2\\n5eNuUG66BUEas7QrlpEhXqPOpAJCZul1RiakpkA55JeYcA5gBuEDqOxqkvZlUyqTsko3siZb\\nanWQdLJBT5q6AddVLdPsAOofwwyq5YmXEHU5XkJdSf4oKezKRusbKItc5jHkma6uo9o7sovD\\ng5wfHqj0lMYeRx5N7Gwz0xcGi\\/ZNp1mdDikVrCZ+sYTzEnMuJyVOtUqw6lQ7Xm5g\\/WWmrW\\/U\\npZx1wvuy7rwDkat8WvkwGj\\/XXH5rBPSOxWw5cc13G6diDbdsYpUxteaimXlnqM5hhU5aUUS0\\n0lc3NVaZaGu8t2a3IEFn9kGJpa6pNVPqSN6QzMGXeItfVE0lpkE2AsJhQud43xqXsNz6L9ml\\nl8E6dm6EG1wNQ6GwCBrYEjkSd0LUKSefv9Ryi4EjgSOw5RIQxV+TW6ddmbWaw5uzBHGGQBcD\\nEpS7rq9l3K7qHcX6beVAp1uMJcCk7It3jNHX2qXUtJS267rVxU5MPlBMFhOO39olYzsyVPK0\\nz1WtO2HMSqBJoSSlUxNXDhs9dtCZlMwEibcqHkpWUJD5U63nC57CGJKcT53Rak0hN8zqZVx9\\nkWAJJflw6zYb759QCRuNtU9T5xi5dln0AW9ItKKOH9UAy8Tx3CMHA6sc+fbvi\\/bnnSPQSO+F\\nKpTKvQp+ZpVbplQpFUk3FMzdMqsjM0+flXknJTUzJzbTEyw6k7ih1tCknm54YbTpHtiPKbWk\\nlJBCkkhSSLFKhoQQbEEG4IOumoEYmVXCx5EEd3Hr5vg+nnBHti8OIP4Q9O73xx+unrHaO7OL\\ntZPSPXCLHkfZzjyxG8H2RyGYPAg+mLsz0n1mOOzI4HKK6yhwUR6THkeRyOsrp90V11dUcftF\\nj8I+w+8Rdtl9XqjzKOQ9kEWzFMpM4CJylU2bCswRMyMs9nmN4UHWl55jLcd4y5o4GYsWzZkK\\n2luU5OYyPk7apQ5EK+qZVbJSfOPDL8HI+aNX6Lbq50j2j4mKh\\/pT6j3w83MTDVuymH2rbuze\\ndRbwyqELC1ptlWpNt2VShb2GPgX8KLJdz1JCblc8\\/wBgqM0rLPLh5Ut\\/6uRyzz4nPW83V4Z\\/\\nBe2l6xYqNaYJzIDjkk+hOZBASPI2llKd6ci4pZy+scxrdsbcfin1iDbj8U+sRmIq9URbLPzO\\nn6bhc9va57w4mZmBudX61A8v0r9X746TfwQlVZmWuKYaGeeT1Naf3ZHIEtzsv52fPlwzyRzx\\nxbmCU+AdjXpNZy3BySfaBO\\/JOaXnvN3DNW8j8VUZA7dHQr1Dvg26OhXqHfGSjEVYR\\/1vNbdn\\nYlz7w0Cee+HBOzIIPaXtzQj\\/ANIMY3O4L3Gk5s1Giup1SfPenmlEjMagSJB1BzASQorRvV52\\nqMlQxXg\\/dyMsjSnM88widcGW4ZE7SXb457ss+EZP7dHQr1Dvim3H4p9Yh9OJ6onephf9syP\\/\\nANVJ91oUJ+Y5oPikD4Edd0YsKwnvNJKRJyiwDuUmoSwSdw3gLUlXPlmUjfDU4X3wCoCipUAS\\nApNSpOqoA5BSdaeSoBXEAgKyy10pjLHbj8U+sRQv9CfWe6HRiupDe1Jq0tq099j4+XdCvpF\\/\\nilo7tSF6buS+vhiUvDS928tahOEqzy1J6mOZZZbjs51eXHdnlnzcDCf6nF7f\\/MF\\/\\/OZD\\/rUZ\\ncbc\\/ij1mLdsvqHo7yYV+FlQ4sSd+5Dw93bnrXx9+kXv0GvUFjl\\/H8fXr44k\\/qcXt\\/wDMF\\/8A\\nzmQ\\/61CiMM73cz1aE4Mv98nqY0TnnlltJ1Gtw36pOUZYl1Z58uzdFpWo8VH1wHFlQ4MSfrQ+\\nf\\/8AuO\\/refSL36Df+Kru\\/j+OnhrGKgwvvglINFSjMgFSqlSckgnIqITPKUUpGSjkCrVzKUqE\\nOBhXeBISqVk0DnUahLlI47yEKWrq3JJ4boyhzJ4nOKaw6R64ScVVI7mpMeDTx+L5jz6QfO5D\\nf+Kr1fn\\/ADjGdGE11rz1jTGwMstecWdbdzbOWXwI362X1t2tvh41g7caiNtP0ZsFOZ1Xp11a\\nTuIBSZFtPUSHCPxdaMiitPWfR35RTadA9sIOJasrd2CfBn\\/1rVHnnsydwQP+78yet0dCNYMz\\n5y21bk0Zg57OUfdyPNlrOs5g85OWXQY5BnBdof8AhFwuLzAOqzTEtZE71DWXOu6w5gdROXHI\\n55R3SVq6h6O\\/OKZk8ST6YaVX6woW86SgfxWGL+Fy2T7D8THnnU0f6oE+CEX4cct9PH43jqhv\\nB2gJy29Vqzh357JUm12blSj+XXxzP4sco1hdaDf1paemDv3vTzqc8xln9AGTuO\\/m4x2CSBxI\\nHbFNdPb6O\\/KGjVaovfOzHL0FBsf5sJ95jzt3zveX6iE8v0QP1H1x8qxYtoy+WyoUodXht1TE\\n0eOt5xmnnirf05jLzQNXIDl5ehUWUAErSKZL5b82ZGWbUTkBmVJaClKyAzUSVHIZmOQKzzDL\\n2xaVE8TDCn5tz9smX1339o84u\\/f6Sjf1mElazvWs+KlH4nuhQaiAEp1UpG4BIAAHQANwihX0\\nD1+O6EC4lPFQz6BvOfo4enKElP8A4qfSruHfDWQDU3J7\\/j1f1wmHJUTx9XNCZcSnioZ9A3nP\\n0cPTlDQrWrio5dHAekDLOLCQOMLAtoBBDhT5O5Iy6zvPq4D2wkpSlcST2nd6BwEJFY5gT7B3\\n+PWtKys7UJliRkJWYnp2acDUtJybDsxMzDquDLMuylTzziuZDaVKPMOhxLalEDW5IAAFySTa\\nwA1vyHHdvghMqSOPqHjdzZZ9ucJlZ5t3v7vfGaWFfJxaeONSZZ\\/DjRLx0rFNnEhUpXapYdXt\\nG2ZoZjPye6rxYt+3HiN2tsqmrVz35Djstwo+TbcoZfamH7\\/cwZwPkyGVTUveN\\/G7a6lDhydT\\nJU\\/DClXpRJmZlxvcbmrop0uvIbKbUTu30jhav1DKZOjVF9KrZXTKutsHke3dS2yAe9zdv0jJ\\nakpt+3ZSzywfzg2rLqLi6yAkXGoudeER\\/Secn0mLCsDhv90TQ8IPktGENNckpvHjSkxDvUbM\\nuTlEwqs63sOmETOWaGG7guqaxKenJQKCUvOCg0mamWgpLKZFzVfTtLwZ5EDk0MFzIzUlo30X\\nEityDjTqqzjPWq5iYJ5TIyQJ61q5PLw+cbKs1ust2cw07rkPsrbQ0hqYyGyrE81lMz5jTkGx\\nIfmO2dAI4NyiX0EjcQp1FtdY2bOHqi7bOlpgH+uOAqtpuS0HNTfQEpNwQbaX85izrGvrEets\\nW1h9Zt133cU2pKJW37Mtyr3PWplS1aqUy9KocnPTz6lK3JDcupRO7LMxs8wT5DzlL8b\\/ACWb\\nlNHaqYYUOZW2hyu42VilYZ+Rl3eFTNrViYViEpCUDWdMrZszs8tVX0pQ2r0Y7Jw+sDDOis27\\nhvY1n2BbzASWqFZVsUW1KO3qpIRsqZQpKQkU6usQNRkFIJyO\\/f8AaxNKfsgprRCqlVZubIsS\\n3KNNSbdxY5VKcM0tQ3XKezJ7jrG0Zwy2NZiZWu+9LKEtjhpmX2hOo35UkjSwOsQ6MD\\/ksdYd\\nXLT2krpTU+TbQUCctXA20ZmoLeSSnamWxAv4UsSqhkptoO4ZzSXAoPKLez2Lu5PAjkKOTSwL\\nNPnU4DtYwXDTnAv7ocd63PYiidKcskT9mOCm4XTTaSFFSVWEkrBIdK0pTq7hIInNPwXhimZT\\nLUiVU4nc7NJM45m\\/SSZouhCv7mlAHKNuxSafL2ySyFKFjmdu6bi1jZZKARYEFKUkHUa3j5a0\\n7MtGw6HK21Ylq21ZduSAV5DQLVodNt6iSQUlIUJWlUiVlJBkHVAVspdJOqM8yY+pggiTpSlI\\nCUgJSAAAAAAALAADQAAAADSNgAAAAAABYACwA5ADQCCCCCPY9ggggggggggggggggggggggg\\ngggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg\\ngggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg\\ngjr2+8KcL8UpFNMxNw2sPEWmI3op192fb92yKCNfLVlbgp9QlwfpXN+yyOsrmJjAPEnkbeTS\\nxSXOPVvRRsO3pubMw6mbw2nLowtTJvPqBU7J0zD+vW5Q0hg+dLyrlJep7IyaRKFklpWz6CMC\\nbpdNnxaep8lOAggialGJga2B\\/bW177eO6xFoZdlpZ79ul2XTzcaQs6aDVSTqOB398RxcQ\\/kz\\nehPcSXpjD7FDSAw4nln6KVertnXpbzCMjuTIVSz5CurVnkNZd0qSAMtnnm5GCeIXyW\\/EiSJc\\nwq0trIuQLBUmTxAwyrtklg+fk0alblz3\\/wCVjLZnbilyROuoCXyZzdmTQRGJvZ1g2cuV0Vhl\\nRN80o7MygHgiXebb3cCgjja8a9yh0xz\\/AKtkNrXbccRYXvokLyX7yg6abo8\\/u\\/vk6\\/KSWc6+\\nm3LcwixVQzrllyxMVKZTfKilsrCWU4nU\\/DlTa1qyYBfDLYdORd2Gb8YbXzyUPKQYdzExLV7Q\\n7xsqDkqt1Dhsa2xigwVMuLaVsJvDObu2VmkqUgllcq88h5BQ8yXGXG1q9M2CI5M7HcNO3MvN\\n1WVJvZIfl3mxxHouS3aabv20XFxv1jCcwzJquW3phBJ3KLbiQNNAMiVcN6lq4co8nK8sG8Yc\\nOFvN4hYU4lWI5LkiYbvSxbotdbBSclB5NcpUipog7iFgZZ9Mdb656B7e+PXVjpK8NHDR3xFc\\nffxBwGwYvl2aWVTTl44XWRc65ha\\/KEuF9dboc8p5SxNzQcK1LzEy+VZB93OPzGxNJN5XEHP0\\nJinX10t+UbnBwAB\\/JcORtGGvCx\\/qc2g3O5bBRYafnJcXc\\/8AdHz8pjadXtg2nV7fsj0xbv5K\\nDk4r3W6us6HWCUkp0vrX9yFsnD5CdulkubFuwpu222QnYIDIYS2mW1nzLhoTEwHMbLs5Afkw\\nbmU8un4I3NZD8xtVLmLSxdxQyDrj4fW8zJ3VdV0U9jIBUs3Ly8k3JNML1WZVpSW3GtI\\/sYr6\\nLmXqFIfAO5bk4wrhw81dTfXcVjTW9zaMReGJ0XyLllgaizjqVEX5FopH+Pv0vxjzztcdB9nf\\nBrjoPs74nY3F8mj0BasXHKPfek3ajyxOKl2aZftgVGRadeSDKh9ivYU1aemJaTUkFLLdUlX3\\n0LdQ9OFSmHmehbh+S54JTRdNqaVeKdFSQzsU3BYtoXOpCgoB8vGm1G0Q4l0ZhoJDRlyM1mY4\\nHUu7JcXNmyJeSmBp6TU+0kHQH+rhkjfbUDW9tLGMdWHqkncwlf8AavtA6W351IGuu48eHCGR\\nrjoPs74NcdB9nfEtev8AyWOotpcctbTYk5paphOxkrgwBfkUNyhSsrW5VKdjDUlTD6VagShN\\nHYaWFqzcbLX0nUdY+S86RbCpsUDSZwVqYbP+55q9u31Q1TSAtHnTfkUlcKZJWoVkpYXUciEp\\nCvOKka9zZnjNskGiOKtxbnac4Du1GSbJ15EA67hpZhVDqSN8o5w+otpfK+qFK1HEfC8RhNcd\\nB9nfBrjoPs74kd1H5MVpvNLbFJxo0Vp1soUXVVG6MXKWttQO4NtSuDVYDqCN+up1kgkp2ast\\naPgZ75Nlyh0pOPy0vW9HSptMuajdQkcSbpblJpII+ml01PDmnTyUHmE1Jyz3Psow14Bxc2SF\\nYfqBINjkQh0XsDoWlrBHeCRckXvuQaRPpFzJzB14IKjwO5NyBw1A490aAtcdB9nfFNp1e2N4\\n8z8ne5SpiYfYas7CmcbaedZbm5bFigpYmktrUkTMuicYlJpLD4AdZE1Ky0wG1gTEuw6Ftp4i\\npfJ7+U2kWEPS2GOH1YcU6lpUrTcX7EQ+2haFqEwpVWqdKlyykoDaktzK5jWdRqsqa2i22fwJ\\nxUL\\/APy9Vjbf+xHTy5J19XM+pv6NnR\\/1GcP\\/APrvHlyR69O\\/ujSftOr2\\/ZFNc9A9vfG5j\\/uA\\nXKjf4C7Y\\/PPhF\\/TGKHkAuVH5sC7X9OM+ER\\/\\/AOyEAwVir+DtW9ck\\/wB38XrXvg+jpz94zn\\/h\\nZj\\/0Rpn11dPsHdFNZXSfXG6+m\\/J8OU6n23VTOFtgUUtuJQlqpYv2E8t4FOsXG\\/merVZtKU7k\\nnbuNOZnJLZ4nlG\\/k7\\/KXrcQhVmYWMpWtIW85izbxbaSSEqcc2LbzxSj6ytk085q7w2onVhQw\\nViveMPVQXtvk3RvtzSLa8+XhChT53S0jN915V4H3ouPXGjuKEgcSB2xv3Y+Ta8oi88wy5VNH\\niVbeeaaXNTGJdxLl5ZDiglUw8mWw\\/mZlTLKfpXRLyz7+zGbLLq\\/MjsGQ+TEacbj+rVMZtFGT\\nlS2SHpC7MX6k\\/tsxqI8nmcFKS3s1J1ipwTeaClOTa9bzchGBMWuEAUKfBJA9JtLY1tqS4tAT\\nv1JNhxMOppdRIuJN8W4FBT7AqxPqERxtZI5\\/j7optBzA+7viTvR\\/ku+kq+Jf5\\/0lcDqZrzKE\\nTfzPRL+rmwky4kLflzO0m3vKplLWutMo55I2t1KWjNoSsuo7dofyWGtOpUu5tNmlSCkTDeUt\\nQ8AJurB+UGqXVeWVDGKiGVmCraNJT5BONNjUfUpzzmBmt7N8ZOWtRHRe37ZOU5sDjc55tO7x\\nPIXOkLRR6mv6so5fkpTaPV6a0j374iUlZ5t3t8eqLdZR5z7vdEzehfJbsHJZTRujSyxNq6A8\\nsvot\\/Dq1LaWuXLeq2005Uq5daWHkPDXcmFNzKHG\\/o0sNK+ljvS3vky2gdTGmVV\\/EvSfuec1G\\n0zG3vbDikU115DmspctJUvClqelkvJybU07V5xYQFKbdQ4RlsmdlWLVkBUrJMd7s8yoDQH+o\\n9srjwHxuXk0GpqvmYS33LeaN\\/DItfjrb4RBSKkp4kDtMJl5A4ZnsGXvy+MehpanyfXkvrcKT\\nVcGryvkhp5CTdeMWJ0tk4p9DzcwtFmXLaDZdl0JMs2hSDLLYeWZiXfmdm+jJK0eSN5Neyn2Z\\nijaHOD845LupcbTd1KqOIEssomUzQD8vfdVuWWmkF1CULammnWly+vJrQZRxcudqxsexAvV+\\nfpLI00Q5NvK4XuDKNp0vp6ZvY7rRkIw3PqsVOSyAd4K3CoepLRSf8f1x5mhfUeAA9p+A9kfc\\n2jhfidiE4hmxMO78vd11RS23aNoXBcq1qSXdZLbdGp86VFOwe1gkf3l0\\/wB7Xn6mNo6K+jFY\\nCkfcJo4YDWSppOohVo4Q4f20UI1HEFtJo1uyRSgtvuN6gOqUvupGYWqMgI3MvsYVvmq+BoLo\\nl6fc30Js67NiwGoH5K50JtaxykYYWdXJxCddyGVLuPEuIt7DxjzC7K5LHlF8QFsooGhpj5J7\\ncpS25eNiVLDuXUSh5wLMziELYlktFMu5qvLcSydZgBWc1K7fNCw\\/k7fKZXhMMMXBYmF2FrTp\\nQHZy\\/MW7YqEtKBa0pUqYGGH6o82oNhRUsSsrNHVQvVCl6qVehJBG\\/ltkOHWrGZnKpNKFtO1l\\nmG7ggn0W5Yua2sB2uiSQNdRlt4alE6uPzC9RoktoSRyUMilEHTcpJiFth78lpxlqLjRxY0sM\\nMrRaCW1ONYeWBdOIjizmsusNvXJVsMNjrJDQbmlS7oSXlqVJK2IS\\/nXhz8mE0OaChl\\/EvGjS\\nAxFqDKmlOs0SdsewLfmyhSi83MU1NrXVXkofyQlJlbsl3WUB36Ra3G1y8l6CJFKbPcIShBRR\\n2nlA\\/WmnpmZvYW1bdeUyf8nbmOMZrdDpjdv2P2hH5zjjir+KcwR7EiNUGGnIkcmPheiTVI6L\\n1t3dUJUKLtVxKuS9cQXJ9ZUVByco9zXHP2unVSW20tSdvyktqoSosGYcede2EYd4H4L4RMrl\\nsJsIcL8L5Ysplyxh5YNp2UwqXQEBtgtW1Saa2WUBKEpbKShOoOPAdrwRJZSlUyQAEjT5KUsA\\nAZaVYYNhuuWkIJNtLkk773ub57UrLM27GXZaItqhpCVaC1yoJBJtxJJPEwQQQRnw\\/BBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBE\\nR35RfXa3SMc9HhqlVqrUxp3Ce4nHW6dUZuSbecTeDw2jiZZ5sOKyATrLzOQA3RHV+7e8f\\/K2\\n5v8A0\\/U\\/+uRIZ+Ug\\/wBvfRz\\/AIJLi\\/1xfiOFHC21iamW9oWJEImJhCEvyWVCHnEJTemSKjZK\\nVAC5udBvN98U\\/iDWsz\\/92H+rb+QjZtyTV03PP8ohowyc7cdenJV+77gS7LTdXqMxLvD7gLtU\\nA8w7MKbdSFBKiFpI1hlE\\/qPPq5I\\/9sY0XP343B\\/qBd0egrF6bAHXXsJ1VTrjjihiF9IU4tS1\\nBIplLNgVEkC5JAGgJPOJhgz9z5r+\\/D\\/qGYIIIIvWJhBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\\nBBBBBBBGtvlcpqbkOTp0m5yRmZmTm2LbtBbM1KPOy8wypWJdkpKmn2ShxtRQtxOaFbkqy3gx\\nskjWxyv37W\\/pQ\\/vYtH+c2yI0WJyRhrEKgSCKHViCCQQRIPkEEHQgi4O8HcRGBVf3LqX94Tn+\\nzuRAa+7e8f8Aytub\\/wBP1P8A65B9294\\/+Vtzf+n6n\\/1yPm4I+d3n05++prh\\/1h7u\\/j93VhFK\\n2HIdfqHsj6T7t7x\\/8rbm\\/wDT9T\\/65B9294\\/+Vtzf+n6n\\/wBcj5uCDz6c\\/fU1w\\/6w93fx+7qw\\ngsOQ6\\/UPZH0n3b3j\\/wCVtzf+n6n\\/ANchWXvy+ZR9qalb0uuWmZdxLrMwxcNXafZdSrNLjLrU\\n4lxpxJ+otCwsHhw3\\/LQR6J6cG6bmhu3TDvC38bTdw58hHu7dp19w9kd72xpU6T1kPIfs7SMx\\n0tZaFqWfmDFm\\/KS2vWLRcQ8zJV5hp9p8ssh5l5DjbyG0odbeQBlmdhfyzHKGYYuSzYxxXiFS\\nmFIK6JihbNuXa3NBOruma+afIXrqlILagxdEuVBWtudIcjV1BGzkcUYkpiguQr1XlCCDlYqM\\n22hRHBbYd7NwW\\/NWkg8RvvktTk2wQWJqYaI3dm84jx0SoAg2FwRY7iDErbR6+UY21Un5CjaU\\nGCM1bS3Vpamb7wdnnqzSGluhCA9NWDdE43WKfJS60uOzExI3jcc8WVhMvS3nWcpiQNgbpH4G\\n6SlpovbA7Ey2MRKBkx5YaHO6tXoj74UpmUuS3ZtuVr9tTy0IUoSVfplOmVN5uobUzk5Hmhx2\\nVhDjPingJfNIxKwdvi4MP70ozmcpXLfnVS7jrCnG3H6bU5NwOSFZo87sm01CiVaUnqVUGkli\\nekn0EiLawtt3xDTnWmMRst1yRulLkw22zKVNlFwCtCmktysyUJ3NvNNOOqACppJJJkchi2el\\n1BE4EzjWgKiEtvoAsLpWkBC7DWziSpR07RO+PTmgjR5yZfLA2dpcmkYMY2opGHukWiXSxR3Z\\nUqlLQxcMswtx9+20vlaKFdqGW1TE9aMxMPNz4S5P20++0qaotE3hx1PQa\\/ScS05qq0abbm5R\\n0lJKbpdZdSAVsTLKrLYfbzDM2sAlKkuJKm1oWqwZKelqgwmYlXAttWhG5bawAS24nelabi41\\nBBCklSSlRIIII3MZcEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\\nEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\\nEEEEEEEEEEEEEEEEERDPlIP9vfRz\\/gkuL\\/XF+I4USPflIP8Ab30c\\/wCCS4v9cX4jhRwdtc\\/6\\nRMS\\/3eR\\/3VIRT+IP3Zn\\/AO7D\\/VojY3yR\\/wC2MaLn78bg\\/wBQLuj0FY8+rkj\\/ANsY0XP343B\\/\\nqBd0egrF8eT3\\/SjVv\\/uOY\\/3ZSomGDP3Pmv78P+oZgggiMDylvLgPWvVK9gVoVVmQmqpILm6R\\neuPaWJapSUhOtlcvO0bCyXmm35GoTMovXlpu+pxmcp6XA8q1JaZAkrlbtbE+KqNhGmqqVZmO\\nybJLcvLtAOTc4\\/a4ZlWbp7RVtVrUpDTSSFOuISbxIajUpWmMdtNLte4baTYuuqG9LaSRe1xm\\nUSEJuMyhcX3r6RWmbozaKNN8vx1xdtezJ56VVOUy0kzTtbvqtNarwacpNlUNqoXHNSjz7SpY\\nVRVOZo0tNONJnqjKkhY0g4yfKO8PaXMT1OwF0ernu9tBLUndGJ1y0+y5RTiUDWmk2tbspdk7\\nOyansw01MXFRJtcv9K81KOkyzcUy5rnuS9K\\/VrqvCv1u6bnrs45Ua3cVxVSdrdcrE88Rtp6p\\nVWpPTE9PTTmSNaYmX3XFJTmTrEGOHjl3EG3jFFQdcRQmZWhSlyltZbbn59SebjsyhUqkqFjl\\nblLtk2Dq7BRgM5i6ovqIlQ3JtXOXKlLrxH8ZbiSkabsjaSDeyidY3mXh8oM04q++v7m6DgbY\\nUoCkMtUiyq9WpwJSokmYmrpu+tS7zrpVqKUxTpNvUDZbZS9tXXepHeXJ5Rxbq3EYuWswlxxx\\nxLDWE+GymmUqJUGmi\\/bbruzaBDaNs667qg7R1xXnRqOgiBO7R8dvLK14prAKjchubUwm5NyA\\nhgNoSL7kpSABoLCNKusVVZuajOg\\/xJl1sf4qFJT7o3RW3y+HKAUN6XdqdYwkvFDAa2svcmGs\\nvLMzeo+l1flH3IVa1X07dsGXc8kdlvoXHCzsZnZvt5m4W\\/KRLwl3JaWxr0araq7SwkTdZwuv\\nGqW44xmRrvS9sXZK3SJwqTmEMO3bJZHjMHhEZCCMuS2p4+kXEraxJPPAZbonRLzyFAWukibZ\\neKQq2pQUq5KB1h1qu1dkgon5hVuDyg+D4h4OX+PEax6AmjTysehLpQTcjQrXxPbw+vmohpqW\\nsPF+XlrHr03MvKabakqTUn56cs+v1F193ZMUqgXPUas\\/s3HUSAa+ljZZHlnxua5PzlkMbdFO\\npULD7F6oVzGfR+S5J05dIq0+ufvrDynJLcuiasOvVF4vTdMpsulJRZFamVUdctLNyVCm7XW4\\n7Mu3Lg7b01NPNSGL5RmTLiktoq8iFiVSpRCQZ2UcU440jiuYYddSCbmXbbClpk9NxhmWlqpt\\npQDYedMhQCTuu616Rsd5U2dODVtROWgjq\\/CPFzDjHfDy2cVsJ7rpt5WJd0kJ+i1ymuLCFpCl\\nNTMjPSjzbM5S6rTplDsjVKRUZWWqVLn2HpOelmJlpxuO0I6OZeamGm32HG3mXkIdZeaWlxp1\\npxIW2424klC0LSoKQtJUlSSCCQYnKFpcSlaFJWhaQpC0kKSpKhdKkqFwQQQQQbEaiNaHKLco\\ntSOT3pGFdWq2FdSxRRijUrup7DFPu6WtRVHVaktb804665NW\\/XjOonTXkoSltMqGBK\\/34veZ\\nq8++T7N\\/JKub88NK\\/wBnkHyk\\/wD8TdEr982MP+isPIigxzDtN2nYww1jCoUikVBiXkZdiQW2\\n0uQkn1BT8kw86S48ytwhTi1EAqNr2GgFq9rtdqsnVZuWlpvsmGixkR2Esu2eWYcV6TjK1m61\\nqOqja9hYAWmMaPvL52rj3jhhPgtKaM1w21M4pX9bVjMXDMYo02qsURy46nL01FRdpzdjSK51\\nuUL+2XLtzkst4JLYfZ1s4kMR5zfJ2f3d2iN\\/lAYY\\/wCtFPj0ZIsbY\\/iyt4uolUna7MtzMxLV\\nUyrKm5diWSlkSks7lKGG20qOdxRzEE2IG4RvMMVGcqLE0uce7ZTTraUK7NpuySgkizSGwdRx\\nBI3DSCCCCLciUQQQQQQRj\\/pPY5S2jTgFifjvPW6\\/dsthnbaridtyVqTdGmKuhM7JSQlGqm9J\\nVJuSJM4HNquRmhm3q7Lzs40G\\/fJ9m\\/klXN+eGlf7PI24cqn+16aVX8Gq\\/wDT9Ejz0Y572wY\\/\\nxPhGtUqToU61LS81TDMvIck5WZKnvO32swXMNOKSMiEpypITpe1zeIRier1GnzrDUnMdi2uV\\nS4pPYsOXWXXU3u60tQ9FCRYEDebXN4lfffJ9m\\/klXN+eGlf7PIkO4J4ks4zYNYR4wS1Jft6V\\nxXwysLElihPzqag9RGL6tSk3Q3SXqg3LSbc85TUVRMmudblJVubXL7YS7IdDQ8ySPSJ0F\\/7i\\nXQ6\\/yWNHz+aW0Ye2O48xLi+pVmXrs41NNScjLvS6W5OVlilxx8trJVLtNqUCkDRRIB1AhzC9\\nWqFQmJpucmO2S2yhSB2TDeVRWATdppsm45kjlHT3KGaeVK0AsN7HxFquGlQxNavW+FWW3Sad\\nc0varlPdFAqtcM+5NzFEraJlsppapcS6Zdles9tw8dmG16lfvk+zfySrm\\/PDSv8AZ5HZ3yjr\\n+5nwG\\/h2c\\/m+uyIecaDajtLxfhjFszSaPPsy8i1KSLyG3JGTmFBb7AW4S48ytw3Vc2KiBewt\\npGDiCuVSSqb0vKzXZMoQyUoDEsuxW2lSjmcZWrUk6ZrAGwA0iV418pNslTrYe0TLpbaLjYfc\\naxcpDzjbYVm4tpo2Awl11KRmhtT7KFqzSXWydaJCOBWOeGmkfhdamMGEtwS1x2Xd1Pbm5KYQ\\ntoT1Mm9RAqFAr0k088aTcVFmlrkKxSXnFOys224G1PMFl9\\/zMo2ccmVyjF36CmKSZWsrqVza\\nP991CTl8TLJaededpC3HGJYYh2fJqcEuzdlGk0BE5JEsyt10dlVGnnmJpqiVii63BG3Cr\\/TL\\ncrjGYYfpc5lZE63KMSy6a8VWQ+4JdtAdlVkhMyFJUtoBDzZAQ426zScVTaJoIqb3bSztkFzs\\nmUKl1X0csy2jOjg4CCoD0kbihc\\/iCPjLFvm0sTbPtjECwrgp91WXeNGp9xWzcFLcU5I1aj1N\\nluYlZtkrQ08ypTKtV6VmWWZuUmA9KTjLEyw8039nHVqFocQlxtaVtrSlaFoUFIWhQCkrQpJK\\nVJUkgpUkkEG4MWMlSVJStKgpKgFJUkgpUkgEKBBIIIIII0I1BgggghUex1VjZiSzgzg1i5jB\\nM0l+4ZXCjDK\\/cSX6ExOpp71bYsW1KtdDlJZqDktONyLlSRS1SaJ1yUmm5RcxtjLvBotGPF98\\nn2b+SVc354aV\\/s8jeXp0f3EumL\\/ksaQf80t3R5u0UDtix5ibCFSo0vQp1qVanJGYfmEuScrM\\nlTjcwltJCphpxSAE6FKSAd9r6xDMUVWoU5+VRJzHYocaWpaeyYcuoLABu604RppYED12Ilff\\nfJ9m\\/klXN+eGlf7PI3waJmkFK6VWjzhpj\\/I2xM2VK4k02r1Fm2JqqNVyYpPzTctZtwtO1VmQ\\npjc4ZhdGXNBbcixskzAYAUWtsvzYY9Ankgf2t\\/Re\\/exd385t7xj7H8f4oxdXKnJV2damZeVp\\nRmmUNycpLFL3nks1mK5dptShkWsFJJTre1wLM4ZrNSqFQdYnJntm0ybjqU9iw3ZxL0sgKu00\\n2o+i4rQm2t7XAtsngggjoaJzBGtjlfv2t\\/Sh\\/exaP85tkRsnjWxyv37W\\/pQ\\/vYtH+c2yI0WK\\nP6WcRf4Cq\\/8Au+YjAqv7l1L+8Jz\\/AGdyPP2gggj5yRS0T8tDfQ30Qrn0Q9FO5rm0VNG64biu\\nLRuwNrlwXBXcDcMKtXK7XKrhha89VavV6rPWvMT9VqtUn5h+dqFQnX5idnZyYemH3XXXXHIy\\nX\\/sF9CX8jvRY\\/wDofMJf6IwaC\\/8AcS6HX+Sxo+fzS2jGU8fRKjUakKpFKUqlU1SlU2QKlGRl\\nSpRMq0SVKLRKiTckkkm+tzrF0ysrLGVliZdgksMkktNkkltBuTl1PfGLH9gvoS\\/kd6LH\\/wBD\\n5hL\\/AERhnNaB+hHNsPSzuh7owIamG1NOKlcCML5CYSFghS2JuRthiblnSkjUdlnmHmzvQ6nc\\nRlnBGyNEopFjSKYQd4MhKWPj+S+7nD\\/mkr+9pf8AyLf\\/AKe4eyNa19ckVyd1\\/wAu+3UNGy1r\\nfmHdZTc\\/Y1Zu2xpmVd1Uth2Xl7YuCm0tSkpGrsJumzUoV5uLli4I1d6Qfyc+x6lLT9W0Yca6\\n7bNVS2t2UszGGVl7hoE4+oDVlWL0tiQplZoUoAPNVN2tdswtR+lfG90SbYI0FW2eYLrTa253\\nDtMSpQ\\/oiTl0SE0DwUJmSDDpy6WStSkcFIUk2jCmaHSZpJDkiwkkfXYQJdYPA5mQjMR\\/GzA8\\nQRcHzVtJHRRx80S7zTY+O+H1Vs2ozKXX6JVlFmpWtdEmwpKVz1sXPT1zNHq7LQcaM1KsTQqN\\nMU8yxVpCnTLhlxjxHpkY6YC4U6SeG9fwoxktCnXjZ1eYLbsrONpTP0ioJQtMlXrdqaf15Q7h\\npqnVu0+rSC2JplSltrW5LPPS78BvlA9B+89BPHSew3rUzM3FYtwy79xYV327LeTouq1TMFlc\\ntPBoCVl7nt19bdMuORYKUIeVJVSWZapdaphXy3tK2VTODAKrTHnqhQHXUtKceCPO6c64bNNT\\nXZpQh1l0+izNIQ2O0IYdbQtTKn6\\/rmH3KUQ+ypT0mtWULUB2jKjuS7lASQrclwBIJ9EpSSnN\\nhNSqpUqHUqdWaNPztJrFInpSqUqqU6Zekp+mVKQmG5yRn5Gdl1NzEpOyc000\\/LTDC0PsvttO\\ntubRAidnySnKEf2bOCr1vYgTkqjSAwjl6ZSsQUNJblvu2ob6TL0PEmRk2whhp2qlhchdcnKJ\\n8kkLjl3JyXlqZSq9RKexBBjMbQD0oqpog6VOGGMTMy83bLNWRa2Jcg2tepVsNboel5G6WXWW\\nsjMv0lryW6KTLrybVcFBo7jo2aXI02zHGj+D8RSynXimjVJ1qUq7KlHsktLVlangm+jsktRd\\nUpIKly5fZAu4LY1Dqi6ZOoWVESzyktzKPzSgmwctwU0SVgjUpzI3LMejVGkfTk5Zq3NCnH2q\\n4E1LACs4gzNLty27hVcsjiFIW7LvpuSSVOIlE0t+0KytC5RKS2t4zq9tx2TW6N1UnOS0\\/LSs\\n7JTTE3KTbDMzKTcs82\\/Kzkq+2h5iYl32VrZeYeZWh1l5pa23G1hSSQd8HLl5f2wm8P4NMMP9\\nALjqTaviWrYWwqmq0SYRLzhqcpLdothmYSWXm5hSx2byFo1LaCFZb2GhsTefYlnpqQp7b8m9\\n2TipltsryNOXQpp1RGVxDidSlJBAB037xGyn75Ps38kq5vzw0r\\/Z5B98n2b+SVc354aV\\/s8i\\nKDBHNX469of9lpX+Sqb\\/ADbq57rQT8Jq5+\\/j\\/wCGk\\/5v1c91pX33yfZv5JVzfnhpX+zyD75P\\ns38kq5vzw0r\\/AGeRFBgg\\/HXtD\\/stK\\/yVTf5t1c91j8Jq5+\\/j\\/wCGk\\/5v1c91pX33yfZv5JVz\\nfnhpX+zyD75Ps38kq5vzw0r\\/AGeRFBgg\\/HXtD\\/stK\\/yVTf5t1c91j8Jq5+\\/j\\/wCGk\\/5v1c91\\npX33yfZv5JVzfnhpX+zyD75Ps38kq5vzw0r\\/AGeRFBgg\\/HXtD\\/stK\\/yVTf5t1c91j8Jq5+\\/j\\n\\/wCGk\\/5v1c91p+XJycpPRuUL\\/Vk+acJaphd+pF+p75R85XhK3Ya793\\/3cbLYGVt6g+QClmyn\\ndoHPKjMioI1dh5MS7k3pkaSclohaN+I2kRULSmb5lMPDZ+1tWSrLdBmar91d92vY7ezqz9Nq\\njUqZFy5UVJRXIP7dEoqXBZLweZ0FfJpf\\/q0\\/\\/wAXL\\/8AXxG0rlqv2srSX\\/8AM7\\/6wGFcdG4d\\nxRWahsoexTNTDa60ih4nnUzIl2UNiYpj9Vbk1mXSgMENplWQpJRlcykrBzKvOZGem3sNrn3H\\nc02mUqDoeyND8owqZDSuzSgNeiG0aZMqrekDc31t\\/fJ9m\\/klXN+eGlf7PIPvk+zfySrm\\/PDS\\nv9nkRQYI5y\\/HXtD\\/ALLSv8lU3+bdXPdaDfhNXP38f\\/DSf836ue60r775Ps38kq5vzw0r\\/Z5B\\n98n2b+SVc354aV\\/s8iKDBB+OvaH\\/AGWlf5Kpv826ue6x+E1c\\/fx\\/8NJ\\/zfq57rSvvvk+zfyS\\nrm\\/PDSv9nkH3yfZv5JVzfnhpX+zyIoMEH469of8AZaV\\/kqm\\/zbq57rH4TVz9\\/H\\/w0n\\/N+rnu\\ntK+++T7N\\/JKub88NK\\/2eQffJ9m\\/klXN+eGlf7PIigwQfjr2h\\/wBlpX+Sqb\\/NurnusfhNXP38\\nf\\/DSf836ue60sukfKPrQrFXpdJRooXKwuqVCRp6H1YvUt0MmemmZYOqbGHqNoltT2tqayCoJ\\nIzy4SZY8vSyf\\/HK1P3z0H\\/ScnHqFxfGxzGVfxfLV52vTTU0uRfp6JYtSsvLBCZhqaU6CJdtv\\nOVFpFiu9sulrm8uwtU56o+feev8Ab9j5r2f5JlvL2nnGf9pbbvm7NP1r2tpa5voM0ruXPtnR\\nc0g8TcAp7Ryr94zmG9XkKU9csriXTqJL1Zc9QaTXA81S3rLqjsollNUEsELnZgqLJdzG12Se\\ngPvk+zfySrm\\/PDSv9nkaXOVw\\/bGNKP8Afjb\\/APqBaMa5IqDEe1\\/HdOxDXqfKVOWblZGs1OTl\\nkGmSCymXlZ59hlKlrlypZS22lJWolSrXUSdYjU5iOstTc003OlLbcy+hCfN5RWVCHVJSm6mC\\no2SkC5JJ3kkxK+++T7N\\/JKub88NK\\/wBnkH3yfZv5JVzfnhpX+zyIoMEab8de0P8AstK\\/yVTf\\n5t1c91sb8Jq5+\\/j\\/AOGk\\/wCb9XPdaV998n2b+SVc354aV\\/s8g++T7N\\/JKub88NK\\/2eRFBgg\\/\\nHXtD\\/stK\\/wAlU3+bdXPdY\\/Caufv4\\/wDhpP8Am\\/Vz3WlfffJ9m\\/klXN+eGlf7PI+1sv5R3gFU\\nZ1lrEHR7xbtSTcWpDs7atetG+lsJIIbeVKVN+w1Kaz1Q+G3HHW2i4WmppxKWXYhkELb23bQU\\nKClVKTdAIJQulyISq1rgltltdjrfKtJ10I0hScT1sEEzgWB+aqWlQDu3lDKFcOChvPdb0T9G\\nvlEtD\\/SvelqVhFjFRJi8n0BX6nl1tTVm34pzVU47LyFBuJmSNxGWaTrzUzaUxcEjLgpLs4Fb\\nhnDHlpS0zMyUzLzklMvyk5KPszUpNyrzjEzKzLDgdZmJZ9pSXWX2XUpdadaUhxtxBW2NaJV3\\nI+8rhdN93TbmidpS3K7cFfraWaPg3i3W31rrtarCAUymH9+1F5SvniqVVrVZtW55woq1TqbY\\notYmKvV6vTJoXDgLbYxX52Xo2I5Vim1CaWlmUnpVTgp8zMLIS3LutPKcdk3nVEIaUXnmXXSE\\nXZUpAXJ6RisTTrcrPtoZdcUEtPtkhpazYBDiFFRbUogALCikqVYpQADEn+NcnKJ8oLSuT\\/tD\\nDi7athfUcTkYiXJWLeZkqfdcvai6Uuj0xmpLmnX5qg14TaJhL+wS22yxsyC5tlA6sbG4jYfK\\nR\\/7T2jN\\/CXev+rFNizse1aeoWEa3Vqa6lmekpdlyXdU228lClTcu0olt1K21gocULKSbXuLE\\nAjeVyZfk6XNTMuvs3mw1kXlQvKVvtNq9FxKkG6VEapO+4sbEfOffJ9m\\/klXN+eGlf7PIPvk+\\nzfySrm\\/PDSv9nkRQYI5N\\/HXtD\\/stK\\/yVTf5t1c91q6\\/Caufv4\\/8AhpP+b9XPdaV998n2b+SV\\nc354aV\\/s8g++T7N\\/JKub88NK\\/wBnkRQYIPx17Q\\/7LSv8lU3+bdXPdY\\/Caufv4\\/8AhpP+b9XP\\ndaV998n2b+SVc354aV\\/s8g++T7N\\/JKub88NK\\/wBnkRQYIPx17Q\\/7LSv8lU3+bdXPdY\\/Caufv\\n4\\/8AhpP+b9XPdaV998n2b+SVc354aV\\/s8g++T7N\\/JKub88NK\\/wBnkRQYIPx17Q\\/7LSv8lU3+\\nbdXPdY\\/Caufv4\\/8AhpP+b9XPdaV998n2b+SVc354aV\\/s8giKDBB+OvaH\\/ZaV\\/kqm\\/wA26ue6\\nx+E1c\\/fx\\/wDDSf8AN+rnut6mEEEEdwxbcEEEEEEEEEEEERDPlIP9vfRz\\/gkuL\\/XF+I4USPfl\\nIP8Ab30c\\/wCCS4v9cX4jhRwdtc\\/6RMS\\/3eR\\/3VIRT+IP3Zn\\/AO7D\\/VojY3yR\\/wC2MaLn78bg\\n\\/wBQLuj0FY8+rkj\\/ANsY0XP343B\\/qBd0T+67W6XbVFq9x1ucap1FoNNqFarFQf1thIUqlSb8\\n\\/Pzr2yC3NlKybDz7uzbWooQchnmYvfyfVBOEKuVEADEUySomwSBTKVck7gANbnSwJJA1iYYN\\nIFOmySABNqJJNgAGGbm500Gp7gTEfbl0uUCqWDNlyWibhJX3abiTifRFVTFKv0mdCJ60cM5\\/\\nyiSYtlh6XO2kK7f62pgTSi4zOSFoyj6TLrbu2mz0rDyjvTSexyr2kppA4s45XEp0zuI15VSt\\nyco+sLVSLdbc8gtS3kKBIUzbtsSdIobCyVLcap4cdU66tbsdFxzztCxbMYwxJOVBTqjT2HHJ\\nWksZjkZkWllKHAi5CXpqwmHyL3WsNhRQ0gJhVXqK6nPOzBJ7IEty6DuQyknJpwUv66765lEb\\ngACM2NFDk8tKrTLmBM4OYerTZjM0qUqGJ15TKrXw6p7zToZmG01x+XmZuvTUm6UonKbaNMuK\\nrSQOtNSDbQ1oyn5Izk6ZfTXxTqt6YmS06nR8wmnZBd2Mykw5Iv35dUwkTtLsCVnGVImZenKl\\nE\\/OV3ztPW1PSlIckqfKzEhP16SqUnOOty3LetCgUe1bToVItm2rfp0rSKHb9Ap8lSaNRaXIs\\npZkqbSqZIMy8lISUoyhDLEqww0yy2kNtIG\\/Od7NNkJxVKortdffk6M4tQk5aXAbnKh2S8q3u\\n1cStMvKBaVNpWlC3nylZbLKQhxe3oWHFVJAm5pa2ZQqIbSiwdfKSQopUoEIbCgU5sqiohSQE\\n2zRGawu+TeUFqVl5rGvSWq83POJBnKHhdZknTJWUWG1DZy1z3bPVR6fSXShQectGnDUQUbDX\\nd2jWUsr8ni0HJaUflnb10kp951Than5y+8P2puW2jQbSJdElhRJSJSytJeb28lMHarVtS80W\\n2kb44I6Gk9luAJJsNt4ZkHbJylU2ZidWq4sVFU288cx1IIsU39HLE0bw9Rmk5RItrva6nFOO\\nKJFtbqWQL21CQE\\/xYjiXz8nC0f6gy4nDbSHxhtKZLRDTt80SysQWW3yE6rq2KDIYYuOshe8s\\nJmGlqSdXbp3E6hdKHkT9MrRzp1Quq3qNR8erEpzb0zN1jCkVOcuekyLAcUqarVg1GUl6+Qhp\\ntb8wu11XZJSUv9NOzzDe1Dc7WCNRWNjGBaowpEvTnKPM2PZzdNmHklKvzc0s+t6VWkKsSA0h\\nZF0pcRe4xprC1JmEkNtKlXDucZcWQDwu24pbZHMJCCQT6QNiPLNIIUoKRkpJIIIyOY3FKswC\\nDnuyPN1bzdEt\\/lqeTEta6bLu7TIwIt1ih4gWoy5X8a7QosilimX1bLWsusYgycjKNBEreNAb\\nJql0PNoRK3JQmajW5xSa\\/TXXK\\/EgjkvGmDqlgqsLpU+UvtrR28jPNpKGZ2VKikOpQSotOoUC\\n2+wpSi04NFuNKbdcrqp01+lzSpZ+ytAtp1OiXWySAsC5KTcFKknVKgRcpyqVuR5HflBqtom4\\n207Cm\\/q6+dHrGSuSVKr8vPTDi5DD69Z1SJChX\\/T23DspCTmJhcnRr32Pk7c3QVy1YnDNTFr0\\n1hc5+PLPj0D+Sk0jZvSZ0IcI7urs45P3rZUpNYTX1NOu+UTE5cFgCWkZKpzbxccdmKlXrTft\\ni4ao68lpaqlVZsoa2OxddvjYJi9+aancIzzqnfMmTUKQpxRUpEr2iG5uTBP9Taddafl0alId\\nmACG0ISmW4PqS1drTXVEhCC\\/LXP1UhQDzQudxKg4lI3HtTuIA1XfKT\\/\\/ABN0Sv3zYw\\/6Kw8i\\nKDEr75Sf\\/wCJuiV++bGH\\/RWHkRQYrDbX\\/wBIdX\\/valf7tloj+Jv3cn\\/GW\\/2KWjMzk7P7u7RG\\n\\/wAoDDH\\/AFop8ejJHnN8nZ\\/d3aI3+UBhj\\/rRT49GSLi8nr+lmt\\/4dP8Au+TiTYK\\/oae\\/u7X+\\nrMEEEEX\\/ABNYIIIIII1+8qn+16aVX8Gq\\/wDT9Ejz0Y9C7lU\\/2vTSq\\/g1X\\/p+iR56MckeUN\\/T\\nHQv8CK\\/2+ZitsZ\\/ujLf3kj\\/XvwR6ROgv\\/cS6HX+Sxo+fzS2jHm7R6ROgv\\/cS6HX+Sxo+fzS2\\njGR5O\\/7s4j\\/wZKf7UqHcF\\/0XO\\/3uj\\/WRqC+Udf3M+A38Ozn8312RDziYZ8o6\\/uZ8Bv4dnP5v\\nrsiHnEU24\\/8ASBO\\/4Ppn+zCNbir92pj+5y\\/+pRBBDyk0ufrdUptGpUsudqtYn5Ol02Ta1Q7O\\nT9QmG5SSlmlOFDYdmJh5plGutKSpY1lb91atSapQKrUqHXKdO0etUWoTtJrFKqcq9JVKlVSm\\nzDsnP06oSUyhqYk56SnGXZeblZltp6XmGnGXWkOoIipOzXk7UIWW83Z9pkVkLgAUWwv6pXlI\\nVlBzZSCQBrEesd\\/Ddfhr4fDfG5zkkOU9n9D+8WcGcX6jO1HRrvmsBan1EzEzhHddUelWVXfT\\nUqJeXaE6Ef8AfnQmN7RIuejMmpy9VptyTcaXVKbWqbTq1RajI1akVaRlKnSqrTJuXn6ZVKZP\\ny7U1I1GnT0q67KzkhOSrrMzKzUs85LzMu4y608ptQMeXLEivkauVQOENRoeifpF3IUYUVidb\\nkMJcQK1NOrThrWZ59tEvZlbmndYMWBWJt3WpdSfcbZs6qPFqbULYn3Zm2+iNj208U9cvhPED\\n9pB1aWaPUHl6STqzZEhMLUdJNxRtLOk2lVkNL\\/Y60ql5lhqv+bKRT51z9jKIEu6s2DCidGlq\\nJFmVH6pJs0reQ2SUTBYIII6tixYxY06P7iXTF\\/yWNIP+aW7o83aPSJ06P7iXTF\\/yWNIP+aW7\\no83aOUPKI\\/dnDn+DJv8A2pMV5jX+iZH+4O\\/6wQR6BPJA\\/tb+i9+9i7v5zb3jz9o9Ankgf2t\\/\\nRe\\/exd385t7xi+T1\\/TNW\\/wDAR\\/3hJxjYN\\/dV\\/wDwe9\\/tMnGyeCCCOuYsyCNbHK\\/ftb+lD+9i\\n0f5zbIjZPGtjlfv2t\\/Sh\\/exaP85tkRosUf0s4i\\/wFV\\/93zEYFV\\/cupf3hOf7O5Hn7QQQR85I\\npaPSJ0F\\/7iXQ6\\/yWNHz+aW0YynjFjQX\\/ALiXQ6\\/yWNHz+aW0Yynj6S0X9xqT\\/gyQ\\/wBlai8J\\nT+hJX+92f9WmCCCCNnGRBBBBBBBGp7lktGOQ0i9CnEGrydP8pv7AqUncYrKnG20+WJlLclFu\\nX3RQoIU+\\/KVeyk1Z9NPZIVN16k26+G3nZNlo7YY4ms0im3DSKpQqzKM1CkVqmz1Iq0hMAql5\\n6m1KWdkqhJvJQQtTMzLPusO6qkENuHVVujV1qly9bpFSpE0kLYqMnMSqwoXyl1tSUOJ5LZcK\\nXW1DVDiErSQpIMY05LInJWYlXLZX2lt3P5qiPQXx1QsJWk2NikR5csEc7dtCctW67mtd5e0e\\nty4azQXnCQdo7SKlM05xQKTqnWVL55o832mOCj5vONracW0sWW2tTaxpotBKVC4uDZQIuDrv\\nikN2+PQd5KrGJzG\\/QH0drnnZsTVbt2zzhlXtoVLmUz2GFRnLKknZ1xRUX5yqUCjUetPzAcWq\\nYNUDrpRMF1pqLvy8v7YTeH8GmGH+gFxuf+Tt3Q9VdDjEu2pkvLVaukJcipJSstg3Ta7YmH08\\niVaOuTrt1NqrTLx1Et\\/rtnV1nC7lpg5eX9sJvD+DTDD\\/AEAuOocf1BdU2K4ZnnVFbzy6El5Z\\nvdbzEpNS7yzcnVbrK1HXW99L2id1h4v4VpbqjdRclkKVe5Upph9oqP8AGUUEq4XJsBaNNUZY\\n6F2h\\/fGm5jE7gvh9c1qWnX2bPrd5Gq3kqropHkFCm6TJzEqDRaXVp3yt5yrsrYylSyUtu7R5\\nJ1NfE6N4Pyfn+70nf4CsRP8ATVlRQWC6bJ1jFdBpc+2XZKfqLEtMtpWttS2lk5glxtSVoJt9\\nZKgRERpzDc1Pyku7ctvTDbawk5VZVKANjwNuMdq\\/e5GlR\\/hu0f8A\\/PMR\\/wCgkH3uRpUf4btH\\n\\/wDzzEf+gkTGoI65\\/Eps8\\/sTNfyrUv5z1c91rF\\/BKkfozH+XP\\/piHL97kaVH+G7R\\/wD88xH\\/\\nAKCQfe5GlR\\/hu0f\\/APPMR\\/6CRMagg\\/Eps8\\/sTNfyrUv5z1c91j8EqR+jMf5c\\/wDpiHL97kaV\\nH+G7R\\/8A88xH\\/oJB97kaVH+G7R\\/\\/AM8xH\\/oJExqCD8Smzz+xM1\\/KtS\\/nPVz3WPwSpH6Mx\\/lz\\n\\/wCmNNvJMcnJinyf\\/wCr9+qXfGH95nFr9Ss0T7hXLicFO+4E4jipfOnz\\/Q6J\\/wCF\\/dlIeRCT\\n8pzEtOeUBghkPdictV+1laS\\/\\/md\\/9YDCuNp0aseWq\\/aytJf\\/AMzv\\/rAYVxu6zRKdhzZ3iKjU\\nllTEhJ4YxL2DS3XH1J84k56adu66pbiszzzihmUbAhIsABGbMyjMjQ56VlwoNNSE\\/kC1Zlem\\n2+4q6rC\\/pLVbkLCIDsEEEcCRUEb4MN+QB0lsS8PLDxHpWMmBkhSr\\/sy1r3pcjUpm\\/wAVCUp1\\n2UORr8jKT3k1lzEuJyWlqg01Mhh99kPtuhl51sa0fbfe5GlR\\/hu0f\\/8APMR\\/6CRKZ0TP7lbR\\nn\\/yfsGv5ubbjIGO2ZXYvs+dlZZxdKmVLcYZWs\\/SlQF1LbQpRsJgAXJOgsBc2AizJfCtJcYYc\\nUmYzOMtrVZ4gZlISo2GXQXO6Icv3uRpUf4btH\\/8AzzEf+gkH3uRpUf4btH\\/\\/ADzEf+gkTGoI\\nf\\/Eps8\\/sTNfyrUv5z1c91nvwSpH6Mx\\/lz\\/6Yhy\\/e5GlR\\/hu0f\\/8APMR\\/6CQfe5GlR\\/hu0f8A\\n\\/PMR\\/wCgkTGoIPxKbPP7EzX8q1L+c9XPdY\\/BKkfozH+XP\\/piHxQfk7WlHSK9RKq9jXgE83TK\\nxTag801M4hh11qSnGZlxDYVY6U7RSWylJUtKdYg7zuiYPBBEvwxgygYPRON0GVdlkT62VzIc\\nmn5nOqXS4lopL7iyiwdWCEkBVwTqI2dOpMnS+280Dg7fs+07Rwrv2WfJa4Frdoq\\/PTlHn1cr\\nh+2MaUf78bf\\/ANQLRjXJGxvlcP2xjSj\\/AH42\\/wD6gWjGuSOE8Y\\/03Yp\\/+465\\/vOaipZ\\/+jp3\\n++5n\\/XLjPTQT5PnE3T6rOI1Ew1vOxLOmMNqZbtVqrt8LuFtifZuWbq0pKIp\\/zDRKysvMLpDy\\npjylDCNm62Wi5k5q7IvvcjSo\\/wAN2j\\/\\/AJ5iP\\/QSO0fk2f8AbA0rf3nYV\\/6bvSJZMdBbNdmG\\nDsSYNpVYq1PfmJ+aXUEvOon51hKhL1KblmrNMvIbTlZZQk5Ui9io+kSYmFDw\\/TqhTWZmYS8X\\nVreSoodKUkIdUlNk5TbQC+uu+Icv3uRpUf4btH\\/\\/ADzEf+gkH3uRpUf4btH\\/APzzEf8AoJEx\\nqCJ3+JTZ5\\/Yma\\/lWpfznq57rbf8ABKkfozH+XP8A6Yhy\\/e5GlR\\/hu0f\\/APPMR\\/6CRrm0veTL\\n0rtCqmS10YrWtRK7h7OT7VKbxJw6rD1zWdL1J9QRLSVWM5TaLcNvqnjqJpz1w2\\/SZOovOCTk\\nJqYnEPSzPoZx0zpA2DbOKWB2LuHd5ykvPWzd+Hd30SrtTaCptEvNUObDc81qtvPNTdNmUsVG\\nRmZdtc3KTkpLzUoC+y1GprewzB8xTpkUhucplQQy6qWf89fmWS8EgtpmWppT12SU2X2SmnAF\\nFQUbBMY83hGnGXdMsp9p9KFKbUpwOIKkgkJWlSdUq3EpII36gFJ8zWHVLqdRolSp9ZpE7M0y\\nrUielKpS6nJPOy87IVGQmG5uSnZSYaUHWJqUmWWpiXfbWHGnWkOoO6GsEcbJUpCgpKilSSFJ\\nUklKkqSQQpJBBBBAII1B1GtorXduj0jNC\\/HdWkzor4G44zJbXVr9sSmzNzCXZQxKpvWjOTNt\\nXuiTZQEoZk27wolabk2hls5ZDSeoaVPlI\\/8Aae0Zv4S71\\/1YpsZZcg1UpyocntacpNvqcYou\\nJ2J9NpyDwlpFyuIrC2AeGqqo1afmMs9ypg7t+UYm\\/KR\\/7T2jN\\/CXev8AqxTY7XxVUHqtsZeq\\ncwbzE9hujTUwrQ5n3nKet5WgA9J0rUO48N0WbU31zOEy+4SXHJWRU4T+cvt5YKV\\/3lAnjv8A\\nWYj0fWYe2bP4jX9ZGHtLmpSSql93fbNm06dny95DKT9z1qRoknNTpl2n3\\/I5eYnm3pksMPPB\\nhDmyadc80\\/Jx3povf3TGjr\\/DthF\\/ODb0cZ09pD8\\/JMOglt6blmVgEpJQ48hChcWIulRFwQRv\\nBBitW0hTiEncpaUnwKgDG6L73I0qP8N2j\\/8A55iP\\/QSD73I0qP8ADdo\\/\\/wCeYj\\/0EiY1BHan\\n4lNnn9iZr+Val\\/OernutZ\\/4JUj9GY\\/y5\\/wDTEOX73I0qP8N2j\\/8A55iP\\/QSD73I0qP8ADdo\\/\\n\\/wCeYj\\/0EiY1BB+JTZ5\\/Yma\\/lWpfznq57rH4JUj9GY\\/y5\\/8ATEOX73I0qP8ADdo\\/\\/wCeYj\\/0\\nEg+9yNKj\\/Ddo\\/wD+eYj\\/ANBImNQQfiU2ef2Jmv5VqX856ue6x+CVI\\/RmP8uf\\/TEOX73I0qP8\\nN2j\\/AP55iP8A0EgiY1BB+JTZ5\\/Yma\\/lWpfznq57rH4JUj9GY\\/wAuf\\/TBBBBFsRJoIIIIIIII\\nIIIIiGfKQf7e+jn\\/AASXF\\/ri\\/EcKJHvykH+3vo5\\/wSXF\\/ri\\/EcKODtrn\\/SJiX+7yP+6pCKfx\\nB+7M\\/wD3Yf6tEbG+SP8A2xjRc\\/fjcH+oF3RMT5Ui\\/pvDXk\\/NKe5ZCY8mmZrDV2y0TGakqbTi\\nZWqPhu5slpKVtzCmbqdSw4lQU08tl0jMCIdnJFMvP8o1ovIYZdfWm7LofUhptTqgzLYdXlMz\\nLxSlJIbYYZcmHl7ktstuuryQiJTvLkzE2zyceLzcs++2zN3RhNLz6GVFKJiUGJdsTSWn8vrM\\nJn5WSeAV5vlDTBPnhJNq7K5hyT2TY8m2jZyXcxA62QSLON4dklINwQdFAEkEG31SDrEhoKy3\\nhytLSSCPOspG8K8zQAf+6SD6ogjwQQRzHEGj0IeSvwUpuBWgfo+UCXlGJar3lZdOxauuYbSU\\nzE9cOJsszdQVPkqJXOUqhT1DtsqSEpTL0OWZG9srOw+On9H3U\\/UFwR2Wps\\/1IcNtjq6upqfc\\nbRMtXV3aurlq5c3VHcEfSajSbNPpNMkZdISxJ0+TlmkgAWbYl2203AAFyEgk8Sb8Yu6SbSzJ\\nyrSAAluXZSABbc2nXxJ1J3kkkkkwQQQRsoyoIIIIII4uoSEjVpCepdTk2J+l1OUmZCoSE20i\\nYlJ2SnGVsTcnNyzgU29LzLDrjL7K0KQ404pKsxnHmtaUuEzeBWkjjlg\\/LFaqfh3iletr0Z1w\\nkuv29T69Ot27MO7TftJqhqp0w6M1+e6fPcPnR6XMefVyuH7YxpR\\/vxt\\/\\/UC0Y598oaUZVh6h\\nT5SPOJetKlG12FwzNyMy88m++xckWDbd6MQrGjaTLST1hnQ+tsG2uVxvMR7Wk8DrrprfXJEr\\nH5Nvfr8za2lNhfMTCzL0ev4Z37SZU7ZTe2uOnXXb1xTKckeTsrQ3alsNua7qX5kLZLbbqJR4\\nsRToke\\/Jv3XRjjpHsJdcSyvCi133GUrUGXHmLvCWXVtnNKnWkPvobWoFTaH3QgZuril9jsw4\\nxtEoAQdH\\/pGXcH6Ta6XOKt6loQvhqgbxcGL4cWW61IkfnLcQRfeFsOp152uFAcwDwjIH5Sf\\/\\nAOJuiV++bGH\\/AEVh5EUGJX3yk\\/8A8TdEr982MP8AorDyIoMZO2v\\/AKQ6v\\/e1K\\/3bLQrE37uT\\n\\/jLf7FLR3Fo64u\\/qB474R42fc991n6leIFsX19zXzt8xfP33N1RipfNYrXzZWfmvy0sbAz3z\\nVUPJgrb+SPZFoyNvvlr\\/AIFn\\/ON\\/7B4izwRFsPY8xXhSVfk6BVfMJaYf85eb8xps1nf7NDWf\\nPOycw4n8m2hOVK0o0zZcxUThyVWqFOQtEnMdilxQUsdky5dQFgbutrI000IB4xKY++Wv+BZ\\/\\nzjf+weD75a\\/4Fn\\/ON\\/7B4izwRIPxybSP4R\\/6HoP\\/ACuM38J65+\\/v\\/wAaT\\/m8SmPvlr\\/gWf8A\\nON\\/7B4Pvlr\\/gWf8AON\\/7B4izwQfjk2kfwj\\/0PQf+VwfhPXP39\\/8AjSf83iQrpU8vL\\/ZM6PeK\\nuAw0VRZX6ptsKt37qv1cPuk+ZQqekp3yz5jGD1A+cwPI9n5OKxIAlwK2w1dVUeqCCIjiLFVe\\nxXMsTdfn\\/P5iWYMsw55rJSuRkuKdyZZKXlkK9NalZlpUrW2awAGtnZ+bqLiXpx3tnEIDaVZG\\n27IClKCbNIQk2KlG5BOtr2AAI9InQX\\/uJdDr\\/JY0fP5pbRjzdo9InQX\\/ALiXQ6\\/yWNHz+aW0\\nYunyd\\/3ZxH\\/gyU\\/2pUSjBf8ARc7\\/AHuj\\/WRqC+Udf3M+A38Ozn8312RDziYZ8o6\\/uZ8Bv4dn\\nP5vrsiHnEU24\\/wDSBO\\/4Ppn+zCNbir92pj+5y\\/8AqUR2Vgx\\/bjwl\\/hMsT\\/WelxK15ZfkszjJ\\nTK1pX6O9tKdxcokl5XivYFElCuYxRoci202q67fkJdBU\\/f1AkkFVVkWmy\\/d1Dl0+R69zU2Wk\\n7milYMf248Jf4TLE\\/wBZ6XHpzRK9jeG6ZivC+MaPVGgth+cpqmnkhPbycymXmwzNyy1A5Hmi\\no20KXEKW04FNOLQrPwzIMVKTqstMJulSpQoWLZ2nAJnK4gncpN7EblJKkqulREeWfBEl\\/loe\\nSyNnzVx6YejnbRNqVCYfq2OOHVBkipNqzzxU9O4l23TZOXCW7YnnQuYveRQT8wVF9y5WB8xT\\nlW+56NBFOYswrU8H1h+kVJFyn8pKzSEkMT0qokNzLBJOirFLjZJUy6lTaiSAoxuoSExTZlct\\nMJspOqFj6jrZJyuIPFKrajelQKFAKSQJXHIv8qd90jFt6HOkZcafuhk2WKLgXiLXJ1tHz7JS\\n7aWZDDC5ajOTGs5XZVtLclYk8vM1mWSzbD3+60tRk1iTxHloy8y\\/KTDE1KvOy01LPNzMtMy7\\njjMxLzDLgcafYdbKXWXWXQlbTra0ONrTro3iJoXI+cqQ3pOW\\/T9HTHeutjSGtWlKRa1zVKYI\\nexmtmlS7z78w65sG2lX5btPl9eusqeXN3JTmXrmZL0yxcKpPofY\\/tQE+iXwniGZPn6AGqNUH\\n1389bSLIkJl1RuZxtItLOK\\/olADKj5wlvziZ4Zr\\/AGnZ02dX6YARKPKP1wLBLDh\\/T4MqP17d\\nmfTydptF06P7iXTF\\/wAljSD\\/AJpbujzdo9InTo\\/uJdMX\\/JY0g\\/5pbujzdojflEfuzhz\\/AAZN\\n\\/wC1JjExr\\/RMj\\/cHf9YII9Ankgf2t\\/Re\\/exd385t7x5+0egTyQP7W\\/ovfvYu7+c294xfJ6\\/p\\nmrf+Aj\\/vCTjGwb+6r\\/8Ag97\\/AGmTjZPBBBHXMWZBGtjlfv2t\\/Sh\\/exaP85tkRsnjWxyv37W\\/\\npQ\\/vYtH+c2yI0WKP6WcRf4Cq\\/wDu+YjAqv7l1L+8Jz\\/Z3I8\\/aCCCPnJFLR6ROgv\\/AHEuh1\\/k\\nsaPn80toxlPGLGgv\\/cS6HX+Sxo+fzS2jGU8fSWi\\/uNSf8GSH+ytReEp\\/Qkr\\/AHuz\\/q0wQQQR\\ns4yIIIIIIIIII6R0jcWKfgTgJjFjFUZmXlWsOcObtuqUVMFGpM1al0aadoVNQlxJbdmatWxT\\n6ZJsKSrbTc20yctqdVp99qWYemHlBtmXacfecUQEoaaQXHFKJ3BKElRO4AG8IcWlptbqzZDa\\nFLWeSUJKlH1AEx5v2MMwxN4tYpTUs6iYlpnEa95iXeaKVtPMO3NU3GX21DcppxtSFIVx1D07\\nx19A666+64++644444p5155RcdeddUpTjjjilKUt1a1ay3FZrUo5nfBHzTmXRMTD74TlDz7r\\noTe+XtFleXxGaxtpyAiiybknmSfbEvf5OFLTaNHzSEnnJtS5CZxkpEtLSO8plpyTsqlvTs0E\\nq+jznGZ6QaJR5\\/6wG1yGyjU7y8v7YTeH8GmGH+gFxvn5A3D+bsvQFkbhmmlNfqq4vYh37JF1\\nBQtyRkUUDDZsgqVmphUzh\\/OLbGQQSsqSDrF1ehjl5f2wm8P4NMMP9ALjpDF8s5K7CsKNOAhS\\nnqTMAG\\/1Jxufm2t\\/\\/ZvI04bgALCJrUmy3hKlpIIJfaXrydRNOg25ELBHMEWtGmqM3eT80zDo\\nK49PY3HDj9VPa2JcVlfcz92H3Eanz\\/PUWb+c\\/no2teGsJUUctGT+agXw\\/tDNM7Itu4RQRzrT\\najO0iflanTnvN56SeTMSr\\/ZtO9k8jVK+zfbdZXb9FxtaTxSYhzLzku82+yrI60tLja7JVlWk\\n3ScqwpJseCgQeIiUx98tf8Cz\\/nG\\/9g8H3y1\\/wLP+cb\\/2DxFngiwfxybSP4R\\/6HoP\\/K43P4T1\\nz9\\/f\\/jSf83iUx98tf8Cz\\/nG\\/9g8H3y1\\/wLP+cb\\/2DxFngg\\/HJtI\\/hH\\/oeg\\/8rg\\/Ceufv7\\/8A\\nGk\\/5vEqai\\/KRjWK1SaSNDIS\\/zrVJGm+Uf2RG22AnptmW2oZ\\/ULYDpZ2mvqbRBWAUbVG4iUVH\\nl6WT\\/wCOVqfvnoP+k5OPULi\\/djGLsRYsla+5iCo\\/SC5J+nIlVeaSMp2SZhqaU6LSUtLBeYto\\n1cCynL6JSCQZbhapz1S8+89f7bsfNez\\/ACTLeXtPOM\\/7U23mzdmj617W0tc3I1Y8tV+1laS\\/\\n\\/md\\/9YDCuNp0aseWq\\/aytJf\\/AMzv\\/rAYVxY2Nf6T8Wf\\/AGxX\\/wDdczG+qv7l1L+8Jz\\/Z3IgO\\nwQQR87opaJKeE\\/yh84XYWYaYaf2IBrn6neH9m2L89\\/2QHzZ88fclbtNoBqnzcME5\\/wAgFQ+b\\nxO+Q+XzoldrsPLJjZKed7F++Wv8AgWf843\\/sHiLPBFmI2w7Rm0IbRiLKhtKUIH0RQjZKQEpF\\nzTCTYAC5JJ4kmN4jElabQlCJ2yUJShI83lDZKQAkXLBJsABckk8TEpj75a\\/4Fn\\/ON\\/7B4Pvl\\nr\\/gWf843\\/sHiLPBCvxybSP4R\\/wCh6D\\/yuFfhPXP39\\/8AjSf83iUx98tf8Cz\\/AJxv\\/YPG4Lk4\\n9Pj\\/ALoFhlfmI36lBwl+4q+02V8zC+vu9+cyq36XXfnP5wFn2YZID50Mp5H5DNjKXL5mvpdk\\n358sTDPk4v8Acz48\\/wAOzf8AN9acWNsr2jYyxJjCVpdarPnsg5Jzzq2Po+lS2ZxlgrbV2spI\\nsPDKrWwcCTuUCNI3WH63VJ6ptS81Ndqypt5SkdhLouUNqUn0m2ULFlAHRQvaxuCYkSQQQR1J\\nFgR59XK4ftjGlH+\\/G3\\/9QLRjXJGxvlcP2xjSj\\/fjb\\/8AqBaMa5I+dWMf6bsU\\/wD3HXP95zUU\\nlP8A9HTv99zP+uXG+zkJtJzATRqvLSMqGOuJ1t4aSV12zh1J26\\/cSp1LdWmqVVbrmKgzKCTl\\nJtWco1PSjjxWGgA+3v3kRJC\\/7qnyen5VWGv8evf\\/AASPPRgieYU2x1rCdCk6DJ0qlzMvJKmV\\nIemTN9sszM09NLzBp9CPRW8pKcqR6IF7m5jb0\\/Es7TpVuUZZlVttlZCnUulZ7RZWQSh5CdCo\\n29Hda97a+hd\\/3VPk9PyqsNf49e\\/+CQf91T5PT8qrDX+PXv8A4JHnowRIv\\/eGxH\\/YOie2f\\/nM\\nZn4Z1L97SP8AiP8A848ehr6Ez3Kqcnqy246vSpw4Uhppx1SWhcMw6pLY1lIaYYoTjrzikjJD\\nbTa3XCdVptShkdUXKMct9gpV8IL6wT0SajWb9urEKg1Kzq3ik9QqrbdqWrb1blXaZcS7fl7l\\nkKZcVbuOZpz89S6fNoo1NpNMVMpr0hWKi\\/KSks9E2gjVVnbtiuqU+YkJeTpdL86aWy7NyiJp\\nc0hpxOVYYU9MrbZWpBKe17JbiAczSm3AlYYmcWVOZYcYCJZgOoKFrZQ4HMqhZQSXHXAm4JFw\\nnODYpUCLwQQRsv5MHQAunTexxpYrFLqElgFh\\/VZCrYu3bsnmpSoS0u43Oy2HlEnAWg\\/ct2BK\\nJV\\/yZ4u27QHp64H0qfbpchVano1Hnq\\/U5OkU1lT85PPJZaQASlOY+m86oA9mwyjM6+6r0W2k\\nLWdBEelpd6bfbl2EFbrqwhCRzJ3qP5qUi6lKOiUgk6CJanJF4ST+DfJ+aP1ErUkJKvXdRKvi\\nfVWlMpYd1MRa\\/Ubot1Uw1qIdEwzZ89bUq+JguTCHmFNHZNNtyzGt35SP\\/ae0Zv4S71\\/1YpsS\\nPpKSlKdKSkhISjEjIyDDEnIyUmw1LSclKSzSWJeWlpZhKGJeWlmUNsy8u0222022G2wEgARw\\nflI\\/9p7Rm\\/hLvX\\/Vimx2lj2nNUjZVVKUwSWabRqZItk71IlX5BhKjqTdQRmUSSSonUxZ1bl0\\nyuGnpZJuGGJNoG1irs35dOcjmsgqPeTER6Pt8Lb1\\/U1xNw6xFFN+exYN92jepo5nfm351+5a\\n4KfXBTPnDySf8g8u8g8k8s8gnPJtrt\\/JHw0GXPiII4dZdcYdafaVldZcQ62qyVZXG1BaFWUF\\nJNlJBspJBtYggkRVgJSQoGxSQQeRBuDrpv5xKY++Wv8AgWf843\\/sHg++Wv8AgWf843\\/sHiLP\\nBFlfjk2kfwj\\/AND0H\\/lcb38J65+\\/v\\/xpP+bxKY++Wv8AgWf843\\/sHg++Wv8AgWf843\\/sHiLP\\nBB+OTaR\\/CP8A0PQf+VwfhPXP39\\/+NJ\\/zeJTH3y1\\/wLP+cb\\/2DxIA0Q9IU6VujhhdpBfcf9wY\\nxJptZqP3JfP5ug0QUq563bYZ+f1UW3fnDygUbywufM1P2XlJl9m7si875s8egTyQP7W\\/ovfv\\nYu7+c294t\\/Y3jvFeK65VJOv1Xz+WlqSZllvzGmyuR\\/zyWaz55KTl1q\\/JuLTlWpSNb5bgESHD\\nNZqVQqDrE5Mds0mTcdCOxYbs4l+WQFZmmkKNkuLFs1tbkXAI2TwQQR0XE5gggggggggggggg\\ngjqPGzGvDTR5w0ufFzFy55G07ItORcnZ+oTrjflM5MhtSpOjUaTUpL9Xr9XfQmSo1GkkLnKj\\nOOMy8u1mVKQ0++zLMuzEw62www2t1551aW2mmmwVOOOOKIShCEgqUpRAABN9IStaG0KccUlC\\nEJKlrUQlKUpFypROgAGpJ3REU+UN3zKXBpk2HaEm+t42BgXbctVWi+S3KVy5bpu+vuMJlwpT\\nbTi6E9bsyt8Bt2YbmWm3EFqWZcc0LRkBpWaQNwaUukNirj1cbC5KbxDul+oU2lKeS\\/8AMNsS\\nDEvRbQt8OpAbfXQrXplJpTsyhDYnH5V6dLTRmCgY\\/wAfPTGlZbxBiqu1dglUvOVB4yy1Cyly\\njITLyqiLDKVS7LaiCLgqsbkXNLVKZTOT83Mo+o8+4tFxY9nmIbJHAlASSOBuI2vciJR5qpcp\\nPgTOy6fobdpOLtZnjsyoJlX8Hb6t9KlEEBpPltdlAHFnV\\/vQ+ldQDLF5Vmw5zEfk89Ki3ZFC\\n3H5HD2WvkttDNzyfC+6LfxMnTlroBSmUtGZU4cyQ2CA26Ds1R\\/Pk5+FL9f0i8asYJiTLtKw5\\nwqlLPlZlaihuWuTEi45SblHWBmjbPooFjXFLOghxqXaqILrW2dlXRLyuK36Tddv12167Jtz9\\nCuSj1Kg1mQdJDc\\/SKxJP0+oyTobKVBuZk33mHNUpOos8SI6c2P0TznZhPybwyIxG\\/XBmUCoF\\nqYlW6OV5T+aPNFCw0Va\\/50TvDUoXaBNMqOUTy5xKTyS4yiWJvxsptW69iCN4jy7YI7s0lcD7\\nh0bMesVcDbmTMGpYcXjVqBLzswytk1qipeE1bNxMoW0yTK3JbsxTK7JqLaNaWqDStVOYMdJx\\nyHNyr8jNTMnNNqamZR92WmGlCym3mHFNOtqB4oWlST3iK5WhTa1IWkpWhSkLSd6VJJSpJ7wQ\\nQY9C7kvsYadjboH6N9yykyw9Urbw8o+F1xMtulyYlLgwtZRY8184I11qZnKrJ0WQuLUWEBcr\\nWJWaabRLvMpGwKIP3I1cotS9ELEmr4Q4v1VUjgDi7U5Oberb5dMnhniClpmmyl2vobCtS3a\\/\\nIMylDvBeopUmiRoFcDzElRamifm10uqU2tU2nVqi1GRq1Iq0jKVOlVWmTcvP0yqUyfl2pqRq\\nNOnpV12VnJCclXWZmVmpZ5yXmZdxl1p5TagY7v2aYslMVYXp7iHkGo0+Wl5GqyxUO2amWGg0\\nHygkq7GcS327LmqSVONZi4y4lNt0CotT9PYAWDMS7aGH2zYKCkJCQ5a49BxICwoDLmzIGqSB\\ny0EEEWDG7gggggghjOTktIS01Ozs0xKSkow9Mzc3MvNsSsnKsNrefmJh95aGWWGWULdeedWh\\ntttBUogDd5rWlhixL466TWPGL8hmKViDirety0FKgErbtubr04LZae3DWfZoCKa1MOaqNq8h\\n14tNawbiU3y03KVWxhRhvdWiZg3cMnWMYcRaVNW7idVaLOpfbwusepILFZoszNSqlNs3td0i\\np+jGklZnKFb03P1GdakZyct5x+HPHJ23nFknUZyn4ZkHkTApLrs3U1tqCm0Ty20ssyoUn0S7\\nLMl8zASVBCn0tEpdbcQiuMXVFqYfZkmVhYlStTykkFPbLskN3F7qaSFZ7GwUvKfSQQCJUnyb\\nawX2qTpTYovsPCWnqjhnYNGmdmnYKfpUrdVxXIztMitTjbdZtJ3UQUIbQ79Kh4vNeTxW49An\\nkntG+c0ZdCLCi1K9T102975ancWb9lHUbOYlrhvsS81TqfOS6m0OS1RollydqUCqy7hdW1Uq\\nTNJ1tmUNtx\\/YVR3KhjVNSyEy9DkZqZccscgmJxpcjLNEg2zrQ9MOoBuLS6yNUgxiYTllPVZD\\nwHoSjbjqiRcZlpLKE+JLhWn+0J4WOrT5Sf8A+JuiV++bGH\\/RWHkRQYlffKT\\/APxN0Sv3zYw\\/\\n6Kw8iKDGv21\\/9IdX\\/valf7tloxsTfu5P+Mt\\/sUtHamBOE1Sx4xnwvwYo1WkaDVcUb4t2x6bW\\nakzMP0+mTdxVJimy87OsywMw5LMOTAcebl0l1SAdUKOQO+n72+x3\\/KMwk\\/5O3j\\/0EajuTs\\/u\\n7tEb\\/KAwx\\/1op8ejJEw2PYBwti2h1Odrsg5NzEtVTKsrROzksEsiTlncpRLPNJUe0cWrMoFW\\ntr2EbLDVHkamzNLm0LUpp1CEZHFIACkEm4Tv1iIZ97fY7\\/lGYSf8nbx\\/6CD72+x3\\/KMwk\\/5O\\n3j\\/0ES84Itz8Suzv+wz\\/APK1V\\/nkSX8FKN\\/Wnv8ALufOIhn3t9jv+UZhJ\\/ydvH\\/oIPvb7Hf8\\nozCT\\/k7eP\\/QRLzgg\\/Ers7\\/sM\\/wDytVf55B+ClG\\/rT3+Xc+cQmtJHkLsX9G3A3EnHS4MccN7i\\no+GtvLuCeoVHoVzy1SqbSZyUkxLyb08hEs06XJtK9o6oJCUKO\\/n0aR6F3Kp\\/temlV\\/Bqv\\/T9\\nEjz0Y562xYUoeEqzSpOhSq5SXmaWZl5C5mZmSt7zt9rMFTLrqkjIhIypITe5tcxDMSU6Vps4\\nyzKpUltcsl1QUsrOcuuovc6gZUJ053PGCPSJ0F\\/7iXQ6\\/wAljR8\\/mltGPN2j0idBf+4l0Ov8\\nljR8\\/mltGJX5O\\/7s4j\\/wZKf7UqNngv8Aoud\\/vdH+sjUF8o6\\/uZ8Bv4dnP5vrsiHnEwz5R1\\/c\\nz4Dfw7OfzfXZEPOIptx\\/6QJ3\\/B9M\\/wBmEa3FX7tTH9zl\\/wDUojsrBj+3HhL\\/AAmWJ\\/rPS49O\\naPMZwY\\/tx4S\\/wmWJ\\/rPS49OaLL8nX9zsUf37Tf8AUTUbzBP1Kl\\/bSnwmI46dkpSoyk3IT8ox\\nPSM+w\\/Jz0lOMNTMnOyky0piYlpmWfStiYlpllbjMxLutuNutuFtwFJIMKjle+S9nNFS657Hz\\nBSivzOjletZJqtGk2VPrwcumrTLrgo0w2xLJblbAqs06GLPqLqimlTK27WqTzcyqgzVcm0R8\\nleVm2viHa1xWPfFBpt02hdVJnaFcVv1qXbnaXWKTUGly85JTkq4gpcbcbX5qhk40tKX2VNvI\\naWLaxxgqn42o7lPmghmdZC3aZUMmZySmSlI1sQpcs9lCJlm9loCVAh1ppaZJV6SzVpYtLsh5\\nu6pd62rayNQriW12AcT3BSbKSkjy\\/I5i2rkuCzbiod22nWalbtzW1U5Kt2\\/XaPOPyNUo9Xpk\\nw3N0+o0+clloel5qUmWmnmXmlgocQCN8bK+U85OO6dBbFAVK3kVK4dHnECoza8MrvmAqamqJ\\nNIaTOTWH14vttJal7hpLSnVUefcDbF2UOXNVkkpqMjcVLouryOE6vSaphqrTFMqDa5Oo094A\\nlClCyklLjMxLupylTbicjrDyCCUlKhlOgqSYl35N9yXfQpp5lVlJPAjVKknilQspChopJCgb\\nERMYwV5Syg6cHJyaYln35N0yiaSdgaI+Par2oTKJemyd9UhGFV3yzOIFoyAeOsw5lLN3dS5J\\ntLNv1yYaW1LylGrFGREOeOUodw122ZyYqFAq9Ros9M0ev29MzdLm3pKYmKHdVDqFsXLSXnpd\\naFu06vW9VqnQ6pJr+gnaXPzklMpcYfcbPFxu8V4yn8Xy9CNUTnqFIk35F6cBFp5CnUOMzDiR\\noiYy3RMWGVxaQ6MpcKEZc\\/U3qi3KCY9J2VbW0XbkqdSVJKVrv+fYEKVc5iMxsSYI9Ankgf2t\\n\\/Re\\/exd385t7x5+0egTyQP7W\\/ovfvYu7+c294s3yev6Zq3\\/gI\\/7wk43WDf3Vf\\/we9\\/tMnGye\\nCCCOuYsyCNbHK\\/ftb+lD+9i0f5zbIjZPGtjlfv2t\\/Sh\\/exaP85tkRosUf0s4i\\/wFV\\/8Ad8xG\\nBVf3LqX94Tn+zuR5+0EEEfOSKWj0idBf+4l0Ov8AJY0fP5pbRjKeMWNBf+4l0Ov8ljR8\\/mlt\\nGMp4+ktF\\/cak\\/wCDJD\\/ZWovCU\\/oSV\\/vdn\\/VpggggjZxkQQQRxVRqdOo0lO1Wrz8lS6XTJV+d\\nqFTqM0xJU+QkpVtT0zNzk7NONS8rKy7CFuTEy+6hlptsOOqSAFR4SBqSAACSToABvJO7220u\\neEBIAJJsBqSdwHMxysRgPlAWmzTZW3aPoT2BW25qs1Weot6Y5mSf1\\/mqjSBl6zYtiT5QpTJm\\n6vUTIXxUZNwIm5OUpNpzIOwrKge6eUH5cXC\\/Caj3BhZokVemYp4tTDM7SZrFGSDNRwzw8fJf\\nlXp2izziHZPEW4pTVD9LFNRN2Sy45Lzk3V62JWbt6Yh+XJclwXhcFauq66zU7kua5KnPVmvV\\n6szz9Rq1Yq1Rfcmp6o1GemluzE3OTcw64++++4tbjiySd2\\/nLa9tQp6adNYUw9NNzk3OpVLV\\nadllhyXlJU6PyTLyCW3pmZF2JgtqcbYZLzSj26rNQbElfZUy5TpFwOqdGWZfQoFtDd\\/SZbUN\\nFqXucKSUpRdHpKUez4iOWty363d1xUG07bp01WLiuetUu3qBSZFpT87VK1Wp1imUunybKPOe\\nmZ6emmJaXaSM1uvJA4gniYkEcg3oRTmK+Mb2lfflIcGG+Cc+uVw+TOy58muvFl2WzanpTaJU\\nH5LDqnzTdYeeyRs7on7YclX31U2qMM88YTw7N4qr9OokqlX7KfSZl5IuJWSbIXNzSiQUgNMh\\nRQFWDjpbZF1OJBhchJuT82xKtA5nVgKUBcNtjVxw9yEXV3kBIuSAZWOjVg1T9HvADB\\/BSmlp\\nbOGtgW5bE3Nsk6lSrMlTmjcVYBUlBzrdfdqdXcybQnaTrmqyykhkQ2+Xl\\/bCbw\\/g0ww\\/0AuJ\\nzcQZOXl\\/bCbw\\/g0ww\\/0AuOptuLDUrs+lpZhAbYl6rSmGWxuQ0zLTTbaByCUJSkeET\\/FraGqN\\nLtIAShqal20AcEIYfSkeoACNNUZfaEOh5dOnDjS9gtaN30GyaqzZdcvM1m5JSoTtOMrQpyjy\\nj8mGaWFTPlD5rDS23NVTSEsuZlI3xiDG8H5Pz\\/d6Tv8AAViJ\\/pqyo5ewVTZOsYroNLqDRekp\\n6osS8y0lxxkraWSFAONKQ4g8ihSVDnECprDczPycu6CW3phttYBKSUqUAQCNQbcRHfn3t9jv\\n+UZhJ\\/ydvH\\/oIPvb7Hf8ozCT\\/k7eP\\/QRLzgjrv8AErs7\\/sM\\/\\/K1V\\/nkWP+ClG\\/rT3+Xc+cRD\\nPvb7Hf8AKMwk\\/wCTt4\\/9BB97fY7\\/AJRmEn\\/J28f+giXnBB+JXZ3\\/AGGf\\/laq\\/wA8g\\/BSjf1p\\n7\\/LufOIjtC+ToY50it0Wqu6RGE7jVMq1OqLjTdu3elx1EnNszKm2\\/odXXcDeqnWIGZ3nMRLi\\nggiW4Zwbh\\/CCJxugyjkoieWy5Mhc1MzWdTAcS0QZl10oyh1YISQFX9K5AjZU+lSdM7bzRC0d\\nv2faZ3FLv2WfJbMTa3aKvbffuEEaseWq\\/aytJf8A8zv\\/AKwGFcbTo1Y8tV+1laS\\/\\/md\\/9YDC\\nuPca\\/wBJ+LP\\/ALYr\\/wDuuZhdV\\/cupf3hOf7O5EB2CCCPndFLRIBwy+T8Y14nYcYf4kU\\/H7C6\\nmU\\/EKyLTviRps7b92PTchKXXQqfX5aRm3GGlMOzMoxUES77jBLSnWyWyUEGPvPvb7Hf8ozCT\\n\\/k7eP\\/QRJy0TP7lbRn\\/yfsGv5ubbjIGO25XYzs9dlpd1dHfUtxhlxR+laoLqW2lR0E2ANSd0\\nWdL4XpDjDDimnsy2Wlqs+4AVKQkk2vpck6boiGfe32O\\/5RmEn\\/J28f8AoIPvb7Hf8ozCT\\/k7\\neP8A0ES84IyPxK7O\\/wCwz\\/8AK1V\\/nkPfgpRv609\\/l3PnEQz72+x3\\/KMwk\\/5O3j\\/0EbtuS70E\\nrv0CsKcQ8PLyvm278n7yxDTeUrULYkarISsnKC26PQ\\/IplFVbQ6uYU9TXXittOz2TjXn6xIG\\nz2CNzQNmuD8M1JurUamuy08006yh1c\\/PTCQh9ORwdnMTDjZJToCU3G8WMZUlQKbITCJmXbcS\\n6gKCSp1axZaSlV0k2NwSO6CCCCJ5G6jz6uVw\\/bGNKP8Afjb\\/APqBaMa5I2N8rh+2MaUf78bf\\n\\/wBQLRjXJHzqxj\\/Tdin\\/AO465\\/vOaikp\\/wDo6d\\/vuZ\\/1y47Kw2wVxkxmmKrJ4P4SYm4rTVBZ\\nlJiuS2GthXVfMzRpefXMMyD9VYtelVR2mszrstMtyjs4GETC2H0tFwtOgdtf2DOmz+R7pUf\\/\\nAEPeLX9D43h\\/Js\\/7YGlb+87Cv\\/Td6RLJi38C7G6Zi3C9Or0zWZ6TenVTqVS7DEuttHms9MSi\\nSlbhzHOlhKyDuUpQGloktIwyxUpFqbXMvNKWp1JQhCCkdm4pAIJ11Aue8x5uf9gzps\\/ke6VH\\n\\/wBD3i1\\/Q+Ogr1sW98NbkqFm4i2ddVgXdSfJTVLVvW36ta1yUwTsoxPyJn6FXJOQqkn5ZIzU\\ntOSvlMs15RJzDEwzrsvNLPqExpM5Yjk5GdLXC9eMuFdES5pD4T0OYVJS0i1qzmJtiyPlFRnb\\nIdSnfNV6lrdnKtZTnnuvzkxP0HJxFZlX5DPxNsEFNo03PUGqTlSn5RHnAkH5dpBmmWwS8iXL\\nN1GZCPTZRYh0pLQstaSHqhhEy8q4\\/JvuzDrQCyypCQVtj6+TLqVj6wSfrAFIuopvCCiraC44\\n23tGmwtxDanHiQ03rEDaOlIUUtpz11gJUdT1RR1p1h1xh9pxtxtxTLrLyS26y60pSXG3G1JS\\npDqFp1VtqyWlQyO+COb\\/AKqtRqk6pNxuO48RxB3ERCYkr6IPyfitXg1bGImk5i5brVjVeSpt\\nw0qysFKq3ck7dFHn22p6nuzuIr8mm3qbTKhKrYmEO2rJXV850qcbcp9epEwUusyiMJMHcNMB\\n7BoWGGEdn0exbGtyXDNMoVGl1oa2nmJmJ+oTbq3p+r1afWgPVGs1aZnKpUZjOYnJ2YdO0iMj\\nyGXKOqolRpOhLjVXs6PVZpTWj3dFUmEg0qszb7r81hROzb58+Srky8ucsTbOJXK1hc7arDk0\\nmr23T6fK\\/juLZRJYLVh9irYWp6JaZfQJeqLfdM1UmZtsIW9KPzKwFBrMUOtJZQyw80pp7sUr\\nUUptXDbNLMmiZkWsryh2cypxXaTCHEhJU2VkABB9FSA2lCFJyqKAq4BEbD5SP\\/ae0Zv4S71\\/\\n1YpsST4jYfKR\\/wC09ozfwl3r\\/qxTY2m1X\\/o\\/xL\\/ekv8A7fKQ9iX9xJ7wl\\/8AamIiPR9fhzZk\\n3iPiJYmHkjOsU6dvy9LXsySqE2h12UkJq6K3I0SWnZllnN9xiUen0Pvts\\/SKbbyaGvuj5CO9\\nNF7+6Y0df4dsIv5wbejhSntIfn5JhwZm35uWZcTcjMhx9tKhcEEXSSLggi+mtiKnbAU4hKhc\\nKWkEXtoVAHXwvG8n72+x3\\/KMwk\\/5O3j\\/ANBB97fY7\\/lGYSf8nbx\\/6CJecEdr\\/iV2d\\/2Gf\\/la\\nq\\/zyLR\\/BSjf1p7\\/LufOIhn3t9jv+UZhJ\\/wAnbx\\/6CD72+x3\\/ACjMJP8Ak7eP\\/QRLzgg\\/Ers7\\n\\/sM\\/\\/K1V\\/nkH4KUb+tPf5dz5xEM+9vsd\\/wAozCT\\/AJO3j\\/0ESRdCjR\\/rei1ouYSYB3HX6ZdF\\nZw5pVbp0\\/X6LLTUrS59VUu2vXC25KS88lM42hqXq7cu5tkozdZcUMkEZ5XQRIsN4AwvhKbfn\\naFIOSkxMy5lXlrnZyZC2S629lCZl91KTnbScyQFWuL2MZshRKfTXlPyrbiXFtKZJW6pYyKWh\\nZACjYEqbSb79O8wQQQRM428QKsGOWq5QDB1mQp81inTcXaHIABukYx27K3XMvo1s1icvCnPW\\n\\/iBP7TcNeoXbMqaG5kpBOexyw\\/lJNyMMNy+J+ixRKrMZN7Wq2HiZULfl0aqcnS3b9w2nci3Q\\n45mtsquZoNIzaIfJLpjEQRwJTNp+O6SlCJXEc862i1m5\\/saknKNyAqfamHUotpZDibJCQkjK\\nm1OMVyrSwCWp9\\/KBYJdKX0gWAslL6XAAABYAADhaJfdO+UeaO7sulVV0fsaJKbClZsU+pWLU\\n5fUGezWJp+s0l5SlAnWb8jAb4h5znYVr5SBgWwnO3tHHFmprEu6cqzcln0FCplIOwZK5Fy5F\\nBh05FyY2anGPwJV8kERE4I35237QMthUJEH9IUyTvuHAtlI3H822u6Mw4prRFvOUA23iXYv4\\n6tkX9Vu6JJOJ\\/wAo9xdqzE1K4PaOdg2Q4428yxVb\\/u6u4hzKFKzQ1Os02iU\\/DuUln20HaNy0\\nzM1WWQ\\/q7YTbGsy5pH0j9L3SM0s7hauDHnFCv3t5E847RbeWuXpNnW4XUbBaqBaFIZkbfpj6\\n2cmJiosSAqtQQhBqM9OOZuRjdBERruPMXYkbLNYrc3NSxIJlEBqUlFFJzJzy0m2wy6Un6qnU\\nLUN+a+sa2bqlQnhlmpt11F79ncIaJFrEtNhDZIsCCU6G5FiTci0AlSQlGalEAADM5ncEpyBJ\\nOe7Ic3VvCkvLPzcwxKyrLszNTLzctLS0u249MTEw84G2mGGmwp15150pQ002hbji1aiN5iUn\\nySvI71+k163dJ\\/S6tR6jTNCmpWt4T4KXBK7OqCqy5RNSF7Yj0p9JdpnzW8WZm3bNnWm6maoy\\n3Urkl5FmSl6VVGsJYQq+Mao1TqYyrswpKp2fWhRlZCXKgFPPrFgV2v2LCVdq+v0UAJC1o8p1\\nOmalMJYl0E6jtXSD2bKCdXHDuAAvlF7rUMqAVaRtW5JDRKqOiTog2rRrtpSqVijijUHcUcR5\\nOZYDVRo09W5OTlbdtWdKyp5l627ZkqazP09RQ3IXFOXAhtsKddde2iwQR39SKXKUSlyFIkUF\\nEpTpVmVZBtmUlpASXHCAAp11WZ11dhncWpR1MXFKyzcnLMyrQs2w2ltN96rD0lq\\/jLVdaraZ\\nlGwA0iOxy6fJ+VLGOzZPS0wjoL1SxGwzoxpeKdvUqTXM1G78NZEuTMrc0qzLgvTlaw\\/Lk0qo\\ns+TuzE9aM3MPmZbRaclJz0PaPUtWhDqFIWlK0rSpJCk6ySlW4gg8UnnHBQ6REW3lMuRDnqrV\\nLjx50KqJLOO1B2arV66P0r5PJJTNOkvT1WwjBSxKNtPqK5uYw\\/mXWgw8JlNnTLjTlMtKV5\\/2\\nv7LZqpTL2KsNy6piacSFVimMJBffU2kJE9JtJALrxQAmZYRdx0pDzYW6p0KhuJcPuOuLqMi2\\nVqULzUugXWVCw7dpI1WVD9tQkZs35RIVmWUxZI2GaIHKg6WGhkzKW7YN3S14YYMvrcXhPiMx\\nOXBaMqH3lOTRtp5mcka7aDry3ZmaDVvVeTo8xUX3J+p0iqOKdS5gHWqLWrbq1QoNw0mqUCuU\\niadkarRq1ITdKqtNnWFFL0nP02eZYnJKZZUCl2WmGWnm+C0xx8c102q1agzonKZOTdMnWVFB\\ncYcWy4MqhnZdTuWjMkBxl5CkKtZaDuiDsPvyrodl3XGHU3AW2ooVbik2Iuk29JJuDuIMS6cK\\n\\/lHGCVVl5VnGfADEux6iEMtvzmHVXtrESkLmAEoem1t19\\/DupSEotWbwlWU1qYlm1eTh6cU1\\n5Q7ksxy+egE6yy4ufxflVuNNOLlnsNlF2XUpKVKYdMvXJhgvNE7N0sTLzKlpOyccaJdEICCL\\nRlNuuO5ZoNuuUmeUAB201TsrqrAC6hJPyjVza6rNDebWFrb5vFdYQmynWXSPzlsICvX2YQD7\\nPG8TML8+URaIdCln02HhtjhftVS6RLpm6NadnUJ1CdokLcqs5ddVrDKlkNqbQm1ns2nFl4tO\\nt7B3UVpScu\\/pX45U+oWrhNIUfRus2fbfl5h60KhMXFiXNyj6Q25Ku4h1CTpiKWgZJWxNWjbN\\nr1lpZeQusvsu7KNIkEais7XsdVplcuuqpp0u4CHGqUwmSUsKFinzoFydSm1wUomUhQUoKzCw\\nGPNYiq80ktrmi0hQspLCEMkjUG60DtbEGxGfKRvB1hWbm5uozc1PT01Mz09PTL03Ozs2+5MT\\nc3NzDinpiamph5TjsxMTDri3XnnVqedeUpxxWtxSgjb7yfPJC42aYNRoN+4gydXwi0dnXGp6\\nYvOpSYlLqvynpKFqk8NaJUGFqmmZ1Ci0m8qnJi2ZRBfekfuinZNykuQyiUKsYmqDdNo8m9Oz\\nbpzKyA9m0gqSFzE0+qzbDKSbreeUkXISCpakpOrlZWYnHksSzSnXVnRKRoBcAqWo+ihAv6S1\\nEJHEw+5HbQBqOlnjlIYpX3RHzo94M1uUqtxTM4wtNPvy+Kf5NU6Bh3JuuJLU2w267IV29G0b\\nZLFupl6XMplXrpps0idLHVuEWEWHWAuHVr4U4UWvT7QsW0Ke3TqLRqe2SkJJL0zPz8w8VTdT\\nrFTm1uz9Wq0+8\\/P1Kffem5t5191ax2lHcuAMFSuCKGinoWiYn5lSZmqTiUkB+ayBIbazDOJa\\nWTdthKrE3ceUhDj7iYtii0lFJlOyuFvukLmXRuUsCwQi4B7NsEhF7EkqWQkrKRGN+Un\\/APib\\nolfvmxh\\/0Vh5EUGJX3yk\\/wD8TdEr982MP+isPIigxyvtr\\/6Q6v8A3tSv92y0V5ib93J\\/xlv9\\nilozM5Oz+7u0Rv8AKAwx\\/wBaKfHoyR5zfJ2f3d2iN\\/lAYY\\/60U+PRki4vJ6\\/pZrf+HT\\/ALvk\\n4k2Cv6Gnv7u1\\/qzBBBBF\\/wATWCCCCCCNfvKp\\/temlV\\/Bqv8A0\\/RI89GPQu5VP9r00qv4NV\\/6\\nfokeejHJHlDf0x0L\\/Aiv9vmYrbGf7oy395I\\/178EekToL\\/3Euh1\\/ksaPn80tox5u0ekToL\\/3\\nEuh1\\/ksaPn80toxkeTv+7OI\\/8GSn+1Kh3Bf9Fzv97o\\/1kagvlHX9zPgN\\/Ds5\\/N9dkQ84mGfK\\nOv7mfAb+HZz+b67Ih5xFNuP\\/AEgTv+D6Z\\/swjW4q\\/dqY\\/ucv\\/qUR2Vgx\\/bjwl\\/hMsT\\/Welx6\\nc0eYzgx\\/bjwl\\/hMsT\\/Welx6c0WX5Ov7nYo\\/v2m\\/6iajeYJ+pUv7aU+ExBBBBHR8TqOn8ccEs\\nOdIvC+7sHsWLfZuSyLypy5CpSSwGpySfQrbU+t0WdKFrptdos8hmp0ipNJU7JT0u05quIC2X\\nIAmnfoQYkaDGNE9h1d6Xa1ZtaM7V8LMRGpYy9Pve1W5lTKVuIQtxmnXPSNdqTuigLdLtOnXG\\nZyWVN0WpUepz\\/otxirpfaJeGGmdgvX8HcTpQttzJVVbRuyUYQ\\/WrDvKWlplmkXRRCtyXDrko\\nZl6WqNNcmGZWt0l+dpU2623N+UM1htK2eSuNab2sulpivyLZNPmyMiX0A5jT5pQveXdVcsrV\\nmMq+rtEjs1vocj9eojdVY7RsJROspPYr0AdSNewcO7KTcoUf2tZJuEqWD5vMEd\\/6UGjNifol\\nYyXRgtitSvI69QnhM0qqywK6Ld1sTbrwot2W\\/NaxD9Jq7DSlpbUryymzjU5SKkzLVOQnZRno\\nCOH5yTmafNTElOsOS03KvOMTEu6kpcZeaVlWhQ5gg6glJFlJJBEVU42tpa23EqQ42pSFoUCF\\nJUkkKSoHUEEEEQR6BPJA\\/tb+i9+9i7v5zb3jz9o9Ankgf2t\\/Re\\/exd385t7xe3k9f0zVv\\/AR\\n\\/wB4ScSnBv7qv\\/4Pe\\/2mTjZPBBBHXMWZBGtjlfv2t\\/Sh\\/exaP85tkRsnjWxyv37W\\/pQ\\/vYtH\\n+c2yI0WKP6WcRf4Cq\\/8Au+YjAqv7l1L+8Jz\\/AGdyPP2gggj5yRS0b8cHOX3xnwbwiwqwhpWA\\nmF9ZpmFWG9j4b06rVCvXYzP1WQse16Xa8nUp5iWdEu1NzzFLbmppqXSGUvOqS0EtBIHZn3yD\\njv8Ak54Sf8orx\\/6eI4UEWEztW2gS7LUuziJ5tlhtDLSBJUw5G2kJbbTdUkVEJQkAEkqNtSTG\\n3TXquhKUJnnUpSkJSAG7BKQAAPQ4AARI9++Qcd\\/yc8JP+UV4\\/wDTwgv5R\\/j1s3A1o64RJWUq\\nLanbgvNxKXMs0qW0maZLqAfrIDyCv\\/fU7yY5MEO\\/jb2ifwlf\\/wDA0r+Yx79P1n9\\/vf8Ak\\/8A\\nRG8q\\/PlBmnJdEu5KWrRMD8NEqSrYVC3LHrdbrSCtpga63b4u656I6ph5DrssE28ylDbxamG5\\nsMpcTrJxz0ydKXSVW4nHDHG\\/r9prk0qdFtztXNKs2Xm1KURNSlkW+1SbPkn0khLLspRGFNNg\\nMtBDSQmMa4Ij9VxpiutoU1VMQVSbYXm7SWVNuNSq8xBIVKsluWUNBYKaITqAADaMSYqM\\/Ngp\\nmJuYdQbXQp1fZ6CwPZghF9L3y3vrBBH01l2Le2I9xU+0MPrRuW+bqqjgbp1t2jQ6ncVcnlqU\\nhGUtSqTLTk695zqAtTbJSgq+k4xIR0K+QFxKvaco996YtUVhlZ2s1OIwktipSVSxHrrQycZY\\nuKvSK56gWTITKSy48xITFeuZTKpinzUpa1SQJlow3g\\/EOK5lMvRac9MIzBLs4tJakJa5FzMT\\nawGkEAlQaSVPLAIaacUCkElTpyoOBuUYW5qApdrNN34uOGyE2GticxH1UqOkay+T85PbFTTt\\nxMlqTRJaetrB+26jJfqpYpOy6BI0KnrCn1US3hM\\/Q1q86rLsrZplNl25lmmF5mq14S9LSBMz\\n3cIsJrDwLw2s7CXDGhS9t2LY1Hl6LQaYx56kNM6635ydmSA9O1WpTbr9SqtRmFLmahU5qanJ\\nha3phZLrDDCzDvBexqBhthTZ9DsOxbZlBJUS3LfkxKSMo2pZW\\/MOr1nJmfqc8+tybqtZqL83\\nVKxPvPT9TnJudmX5h7saOzNnuz2n4GkFhK0ztZnEI+kajkygpT6SJSUSr0mpRs6m\\/wCUmHB2\\nrpTlaaZs+i0RmktFRIdm3UgPPW9EAWPZNXFw2FWJJ9JxQClAAIQgiDJy8v7YTeH8GmGH+gFx\\nObiDJy8v7YTeH8GmGH+gFxG9vP8ASKn\\/AA3T\\/wDUzkYGMf3Ka\\/v1n\\/UzEaaozN0D9MaqaDWO\\nL2NlHsOn4hzj1kV+y\\/ueqdembelgzXZyjTi54z8rTaq8XZZVHS2iX8lKHNvrF1stDWwygjj2\\nm1GcpE9K1Knvebzsm6l+WfCGnS06g3Svs3kONKseC0KHdFbMvOMOtvMqKHWlhbawASlSTcGy\\ngQbHgQR3RJn++TMQPyUrO\\/OpW\\/6FwffJmIH5KVnfnUrf9C4jMQRPfxv7Rv4SOfybRv8Al0bb\\n8Iq1+\\/3P8mx\\/wu748zEmf75MxA\\/JSs786lb\\/AKFwffJmIH5KVnfnUrf9C4jMQQfjf2jfwkc\\/\\nk2jf8ug\\/CKtfv9z\\/ACbH\\/C7vjzMSZ\\/vkzED8lKzvzqVv+hcH3yZiB+SlZ351K3\\/QuIzEEH43\\n9o38JHP5No3\\/AC6D8Iq1+\\/3P8mx\\/wu748zE8bkvOUkr\\/AChf6uPz7hRRsMf1IU4ZiW+abqnr\\nlNb+7\\/8AVA24e8rotH8hFMNlM7PZ+U+U+XvBWzLA2nOctV+1laS\\/\\/md\\/9YDCuNWvyaX\\/AOrT\\n\\/wDxcv8A9fEbSuWq\\/aytJf8A8zv\\/AKwGFcdGUisVGv7GKjVqtMmbqE3hjGPnEwWmWS52C6xL\\nNfk5dtplORhlpv0G03y5lXWVKM4lpl+bws\\/MTDhdeckKnnWQkFWQzSE3CQlOiEpGgF7XNzcx\\nAdgggjimKtiRThb8oTvnDDDLDrDWW0Y7UrDGHlh2hYzFVmMTaxKO1Ri07ep9BaqDsoiz30Sz\\ns8mQTMOS7bzyGVOloOuFO1j7775MxA\\/JSs786lb\\/AKFxGYgiyEbXNobaENoxG4lCEJQhP0dR\\nzZKEhIFzTydABvJPMk6xuU4grCEpQmdWEoSEpAbYsEpACR+1X0AtqT8byZ\\/vkzED8lKzvzqV\\nv+hcH3yZiB+SlZ351K3\\/AELiMxBCvxv7Rv4SOfybRv8Al0e\\/hFWv3+5\\/k2P+F3fHmYkz\\/fJm\\nIH5KVnfnUrf9C4PvkzED8lKzvzqVv+hcRmIIPxv7Rv4SOfybRv8Al0H4RVr9\\/uf5Nj\\/hd3x5\\nmJO9D+UdX7V63SKSvRWtFlNUqlPpxeTinWlqaTOzbMqXQ2bLAUWg7r6pUnPVyzIGUSuY8vSy\\nf\\/HK1P3z0H\\/ScnHqFxf+xbFmIcVS2IHK\\/UVVBck\\/TkSylS8pL9kl9qbU6AJSXYCs5bQSVhRG\\nX0bAkRMMK1KdqHn\\/AJ4+p7sfNezzJbTl7TzjPbs0IvmyJ33tbTjfz6uVw\\/bGNKP9+Nv\\/AOoF\\noxrkjY3yuH7YxpR\\/vxt\\/\\/UC0Y1yRyzjH+m7FP\\/3HXP8Aec1EAn\\/6Onf77mf9cuJM\\/wAmz\\/tg\\naVv7zsK\\/9N3pEsmIm3ybP+2BpW\\/vOwr\\/ANN3pEsmOw9jH\\/RzQf7pVv8AfM\\/Fl4V\\/cWX\\/ALpM\\nf65cEEEEWlEiiIny43Jw\\/qf1+oaZWCluluxbqqDZxxtqkymTFoXdUphLUviHKy0snZytvXfO\\nPMy1yZoQim3c+1UQ8+3dSmqXG7j1Drmtqg3nbdftC6aPT6\\/bF0UepW\\/cFCqjDc5S6xRKzKO0\\n+qUqoSrms3MSU\\/JTD8vMMqyQ406pB4+bAU5TbQEuDQWxzmKXSmahVMD8QHahXMILqmQ4+43T\\n2nm1VKxa7N6qUquez1TLEs5MBSvnuizFIryUy8xPz9NpfJW2nZ39FTLmLaOxamzro+lpZpHo\\nSM66rSbQlIsiVnFk9rfRqcWLEpmUIbrfFFF81dNQlkWlnlfl0JGjLyj9Ycm3if7VDl0iwWhI\\n1vy0zMyUzLzklMvyk5KPszUpNyrzjEzKzLDgdZmJZ9pSXWX2XUpdadaUhxtxBW2NaJ0nJFco\\njLaZeEX3AYjVVn+yJwnpkpK3aH1obmMQLYbDMnTMRpJnNJdnHHSxTbwZYRqSddUxUdWXk7gk\\nZRiCxHbuAWOmIejbi5ZONOF1XVSLwsirt1CULm2MhVZFYMvV7drcs06yqdoVw0x2ZpNXlEuN\\nLdkZp1Uu\\/LzSGZlqvNnWOJnBFcTNHtHaROltirSaCLrYCiUTLKSQkzUoSpbd7dqhTsuVID2d\\nOlo1UcpU2HRdTDlkTLQP1276KSDp2jZJUg7\\/AKyLhK1R6acRsPlI\\/wDae0Zv4S71\\/wBWKbG6\\nvRC0q8OtMnA21sa8OnwyzU0fNl22y9MJeqtjXtT5eVXcFp1VSUtlT0i5NMTNOndgwmsUOdpV\\nbYZal6k0hOlT5SP\\/AGntGb+Eu9f9WKbHV20mclqhs1r07JvNzMpNU6TmJaYaVmbeZdnJNbbi\\nFDQhSTu3g6EA3EWDiB1t\\/D808ytLjTrcstC07lJVMsEEXsR3ggEG4IBERHo+0w0vR3DbEjD\\/\\nABFYkGqs9YV8WpejFLemDKM1N21q9IV1qQcm0NPKlm51cj5Ot9DDy2Uu7XZuEbOPi4I4VZdc\\nYdbeaVldZcQ62qwOVbagtCrKBBspINiCDaxBFxFUglJCgbFJBB5EG4PqMSZ\\/vkzED8lKzvzq\\nVv8AoXB98mYgfkpWd+dSt\\/0LiMxBFjfjf2jfwkc\\/k2jf8ujc\\/hFWv3+5\\/k2P+F3fHmYkz\\/fJ\\nmIH5KVnfnUrf9C4PvkzED8lKzvzqVv8AoXEZiCD8b+0b+Ejn8m0b\\/l0H4RVr9\\/uf5Nj\\/AIXd\\n8eZiTP8AfJmIH5KVnfnUrf8AQuD75MxA\\/JSs786lb\\/oXEZiCD8b+0b+Ejn8m0b\\/l0H4RVr9\\/\\nuf5Nj\\/hd3x5mJM\\/3yZiB+SlZ351K3\\/QuCIzEEH439o38JHP5No3\\/AC6D8Iq1+\\/3P8mx\\/wu74\\n8zEkC\\/fk3+Nkg+9+phpHYWXVL5qMsb8tm7bAfP1iUPC304ltpKCnUDzZVtctqWmsy0NV2M\\/J\\n441YGTs3I3bdGF1Qdk1NNurt2tXZOIUXZqalE6iqnZNIWobWUdKtZKCEFtSc1KUhJBE7x3gf\\nC1Gmi3TaX5sjKTl89qLwuFKH9Xm3TwGm7ujLrdPk5MrEuz2eVagPyjq7ABNh+UWrmYwbqtPf\\npVSn6XMqaW\\/TZ+cp8wphS1Mrfk31S7qmVLbbWppS0EoUtpC1IUVFDavNhpBBHP7yQl1aUiwS\\ntYA32AWoDU6mwAFzrEbP2D3gRl9gVoTYq6QU3SpKzLgw+pjtYYkn5dVz1W45JCG56nTNVZD5\\npVp1pSVJl5V1LgQh0B5SEJWttanEbrcJ\\/k396zD7ExjlpIWvRpZpTRmaLhPa1WuZ+bASlUyy\\nxc94KtJunavnoYmHLRqu0Oq65Kt72oII6C2aYJwvXJj\\/AOK0tM4EtNuhK5ufbQV5Aq6kMzTa\\nVgnehYUgjQptpEnw7TpOeeQmaZ7UFSgR2jqLgAkfta0cvXxvG8PRV5M\\/RC0Q3pes4YYcprV\\/\\nSrakDFDEWaZvC+0axGa6bOPSUnRLZdKUhtbto0G31PNKcRMbYOLCtgUEEdR06m0+lSrcnTJK\\nVkJVsDJLyjDbDQJABVkbSkFarXUs3Uo6qJJJiymJdiVbDUuy2w2NcjaEoBOgKjYDMo2F1G6j\\nxJggggjOh6CCCCCCMNdJvQN0VNLmXWvGrCii1i5hKiUk8QaJtLZxCkGmw23KoRddGVLT9Slp\\nIIHkdLr\\/AM8UWXBcCaYQ88F6K8Zvk37ipmbntHrSLaTKOOPqkrYxktxYelm8gqXTM3xZTS0z\\na\\/O2bqm8P5QAfSgOHJoEEQTFmCMKV1iYnKpRJN+cQ0pXnbfayk0spKcvbTMm5LvPgcEvLcSL\\nmw1N9HVaTTphl6YdlGi+E5u1TmaWpVwLrU0pBcNtLrzcOQjR\\/pJaCGLui3WKzRL\\/ALjw4rE3\\nRF1Ruacs+r3NUJZZo6spjyddatC33VhZ\\/YNo0zr\\/AN9DcYWwQRxHiSRlZCe7GUa7JvKo5c7i\\n9yiBq4tat3frvOsVTMIS2+6hAslK1BIuTYA6C5JJ9ZjtzCPBS6sZqs3RrXqFAkJpycMklyvz\\ndSlJfaiUenSpSqfSqq4EFphxOsloq2hQNTVKlDeTgt8ncxnvKWpNdxT0gMMLOtypSzFRbRh\\/\\nRbqv6tuSb7aXWWVt3HI4dSEjMuZqaccS\\/UWpUEPIbnDmzBBFk7MMJ4fxDMyqKxTxOJWFKUkz\\nU6yFFLuUXEtMM6ZQARuI3gxuKDJS07MhuZa7VBWgWzuI0JAIu2tB4843W6MnI4aE+jZMyNwL\\nsecxnvyQUxMM3bjG9I3NLyE6g7RUxRbNlpCnWZJFp8Iep8zPUSq1unqZZLNbLwdfe2stoShK\\nEISlLYGolCRkEpSCEpCR5qQAAAEgAAADdBBHXVJo1JocqmUpFOk6dL2BLcow2yFqAtndUkBb\\nzhG911S3FcVGLSlpSVk0dnKsNMI3kNoCSo81q+ss96yo98KwQQRtIyI1U8p7ydVe5QWjYQUi\\nh4pUnDNeF1UvKpTL9WteduVNYTdcpbcq00wiTrNHMouSNBWta3FPh5MyhCUt7JSndRf3tliD\\n+VdZv5qq3\\/TWCCK1xHs\\/wjX6tMVOrUjzuddQwhx\\/z+py+ZLLDbTY7OVnWWRlQlKbpbBNrqJJ\\nJMbqFIp01Nuvvy\\/aOr7POvtn03yNIQn0UOpSLJSkaAbrnW5juvRs5A69sBsf8HcaJ3STta5J\\nPC3ES1r6maBK4cVamzNYZt2rS1Tcp7FQduybbk3ptLJZTMOS0w20pWsplxPmxJfggiQYTw3R\\ncMykzKUOS8yl5iZEy635zNzOd4tIaK882\\/MLT6DaE5UqSjS+W5JOfSpGVkm3UyrXZBxaSsZ3\\nF3KU2Bu4tZFhppbvggggiVRtYIIIIIIxu0tMDZ3SX0ccWsCqdcUtaU5iZarlvy9xTlPdq0tS\\nXPL5CeE09TmJqSdm0DyXZ7JE2wo6+e08wAxxvvbLEH8q6zfzVVv+msEEQPFmCsM4mnJaarlN\\n8+flpbzdlfntQlsjJdW4UZZSbl0K9NSjmWlS9bZrAAaGqUySnX0OTLHarSyEJV2jyLJC1qtZ\\ntxAOqibkE677Wg+9ssQfyrrN\\/NVW\\/wCmsSacBMNZjBnAzBfB6cq7Nem8KcJ8OMM5quy0ouQl\\n6y\\/Y9oUi13arLyLkxMuSTFRcpK5tuVcmX3JZt8MqedUlTiiCFYTwZhrDEzNzFDpvmL00yhl9\\nfnlQme0bQ5nSnLNzUwlNla3QlJO4kjSF0qnSci46qVZ7JTiAlZ7R1dwFXAs4tYFieFjGGfKY\\n6B1a0\\/MLcP8ADuh4kUvDV+y7\\/XebtTq1tzdysT7X3OVmiGQblpWsUpyXd16kJjyhTrqChktb\\nHNQWnTF97ZYg\\/lXWb+aqt\\/01ggjBxJgDCWIKq7UqvSfO51xplpb\\/AJ9Upe6GmwhtPZys4w0M\\nqRa4bBO8knWGKjSafNzS35iX7R1SUBSu1fRcJSEp9FDiUiwAGg146x9LY\\/ydW+7RvSz7re0o\\n7SnWrXum37gdkmsL6wy5Nt0SrylSclW3V3i6htb6ZVTKHltrCNdKltrAKTKlggjc4SwtQcLt\\nTrVCkfMUTbjK5hPnU5M9oppLiWzecmJgoyhaxZspBvdQJAtl0qQlJFL\\/AJq12XalvP8AlHV5\\nsgXl\\/bFrtbMrda99b2FiCCCJfG3ggggggjADlA9AbDfTzwnatK4Zpq0sR7Vcfn8M8TmqcqpT\\nlrT0wqWVVKZP09qcpxrNtXBLyzcrVKc5NtFiYRKViSynqc0h7Rp97ZYg\\/lXWb+aqt\\/01ggiv\\ncUYBwjiGoJqNXozUzOrZS05MImp6UW6hq4b7YSU1LoeWhJCEuupW4G0obz5EISnQVOkU6afD\\n78slby0hKlhx1sqCNElQbcQlSgPRzEFWUJSTlSkA+9ssQfyrrN\\/NVW\\/6axIm0M9Hyd0V9GbC\\njAGpXPK3lPYc0ys06ZuaSpj1GlKoqr3RXbiS6zTH52oOyyWG6u3KFC5x0rVLqeCkhaW0EEO4\\nUwVhnDM9MTdDpnmMxMSpl3nPPKhM52e2acyZJybmEJ9NCVZkpSrS2axIPtLpkjJTC3ZZjs3F\\nMqbKu0dcuguNrKbOOLSLqQk3Avpa9iQcpIIIInsb6CMW9MzR8ndKjRmxXwBptzytmz2I1Mo1\\nOlrmnaY9WZSlqpF0UK4lOvUxidp7syl9ukOSgQicaKFTCXipQQptZBGJPy7M3IzkrMI7RiZl\\nX5d9vMtGdl9tTTqMzakrTmQpScyFJWm90qB1hmYbQ7LvtODM26y62tNyMyFoUlQukhQukkXB\\nBG8EGI7P3tliD+VdZv5qq3\\/TWD72yxB\\/Kus381Vb\\/prBBFSfil2ffwf\\/ANK1v\\/mURX6ApP70\\n\\/wA\\/M\\/8AGg+9ssQfyrrN\\/NVW\\/wCmsH3tliD+VdZv5qq3\\/TWCCD8Uuz7+D\\/8ApWt\\/8yg+gKT+\\n9P8APzP\\/ABoPvbLEH8q6zfzVVv8AprAPk2V\\/gjX0rrPCMwFFOFNaUpIzAJSk3sgFWXAa6Bnv\\nzggg\\/FLs+\\/g\\/\\/pWt\\/wDMoPoCk\\/vT\\/PzP\\/GjtG3vk2Nnyr2vdeltctblgoLLVu4O0u13tiQnN\\nG3qWIt3o2uZX9LsNXz0\\/RHZna5m4WcgtoE2A\\/Jz10UrE7GGbYDSnGMQb6VI0dybDY1nE0zDy\\nl2MtUpt1bVuRqE7UmwlKGJpycaDofIIlUlsywFTlIXLYYpylIKcpnA\\/UQDmBuRUHppJVcCyi\\nCRuvaNu1h+jMqzIkGlG4P5VTr6dP4r63E25i1jxEbUcKMDcGsDaILdwcwusTDSkKbCZiVs22\\nKRQV1BTISlL9VnJCVanaxN5nNU7VJmcm3T57r61+dHbcEEThllmXaQyw02wy2kJbaZQltptI\\n3JQ2gJSlI4BIAHARt0IQ2kIbQltCdEoQkJSByCUgAeoQQQQQ5CoI0F8oHyNF16a2kbWsdqRj\\nxb1gSVStW1aALdqVi1OvzTK7cp65NyZNQlrlpbTiJs5uttCVQpnckuOfWggiO4ooNJxHTBTq\\nzK+eSfnLUx2PbzMv+VaS4EL7SUeYd9ELV6OfKb3KSQLa2qSkvOSwamW+0bDyFhOdaLKAUkG7\\nakq+qtQte2t7XAthT97ZYg\\/lXWb+aqt\\/01g+9ssQfyrrN\\/NVW\\/6awQRXf4pdn38H\\/wDStb\\/5\\nlGh+gKT+9P8APzP\\/ABoPvbLEH8q6zfzVVv8AprB97ZYg\\/lXWb+aqt\\/01ggg\\/FLs+\\/g\\/\\/AKVr\\nf\\/MoPoCk\\/vT\\/AD8z\\/wAaD72yxB\\/Kus381Vb\\/AKawfe2WIP5V1m\\/mqrf9NYIIPxS7Pv4P\\/wCl\\na3\\/zKD6ApP70\\/wA\\/M\\/8AGg+9ssQfyrrN\\/NVW\\/wCmsH3tliD+VdZv5qq3\\/TWCCD8Uuz7+D\\/8A\\npWt\\/8yg+gKT+9P8APzP\\/ABo2wcl7ybFwcnsMcTXcVqNiccXzhmZX5ptWdtn5k+4A3+H9v5ZW\\nawZz5zN7MlrZeT+TinuhzbeUoLOWWnHo21DS80W8T9Hel3bKWRPYhGyhL3RUKU9W5SmfcriJ\\naV8OB6mS87TnpkTrVsuU5GrON+TuTTUwQ6hlbLpBE\\/kMPUeSwurDkrJ9lRVydSk1SXnE05eX\\nn1Ta5tvzhx9c2O1VMPHMHwtvPZpSAlATv5eTl26WuTQ3llixMI7PO4fReU52gzlRc9LOrXNc\\nX9EiwtHt+9ssQfyrrN\\/NVW\\/6awfe2WIP5V1m\\/mqrf9NYIIgH4pdn38H\\/APStb\\/5lGg+gKT+9\\nP8\\/M\\/wDGg+9ssQfyrrN\\/NVW\\/6awfe2WIP5V1m\\/mqrf8ATWCCD8Uuz7+D\\/wDpWt\\/8yg+gKT+9\\nP8\\/M\\/wDGg+9ssQfyrrN\\/NVW\\/6awfe2WIP5V1m\\/mqrf8ATWCCD8Uuz7+D\\/wDpWt\\/8yg+gKT+9\\nP8\\/M\\/wDGg+9ssQfyrrN\\/NVW\\/6awfe2WIP5V1m\\/mqrf8ATWCCD8Uuz7+D\\/wDpWt\\/8yg+gKT+9\\nP8\\/M\\/wDGjkaH8nFv2k1uj1ZWlRaD6KZVJCorYThbWmy8mQnGplTSVG9FhtTgZKErIUEk6xSd\\n4iVzBBE2wlhWg4XRPN0KQ8xROKl1zI86nZntFMpeS2bzkxMFGVLixZspBv6QJAtt6TISkj5z\\n5q12XaFrP+UdXmyBzL+2LXa2dW61763sLRytMfkMrx0otJjFXHum6Q9s2fJYlVmm1eWtuew9\\nqtYmqUmQt6iUIsv1Ji6ZBqZU65TFTIcblGQlLwbKFFBWrGr72yxB\\/Kus381Vb\\/prBBETn9mG\\nBp6fnp2aofazM3NzE1MO\\/SVYR2j8w4p15eRuoIbRncWpWVCEoTeyUpSAI1r9Dpbj7zi5W61u\\nuLUe3mBdSllSjYPAC5JNgABwAEbRuTD5MS4uT8uLF2uVvF2jYmN4m0e0aRLy1KtGetpVJVbM\\n\\/XZxx592crtXE2maTV0toQ2hgtbAqUtzaJDe4SCCLBw7SKdQqTLUulS\\/msjLKfLLHbPv5C8+\\n4+5+VmXXnlZnXFq9NxWW+VNkhKRvadLsysm0ywjs2k5yE5lqsVLUpRzLUpWpJOp04WEEEEEb\\nuM6CMXtL7RYw70xcC7twSxEl0sy1ZaFTta5mJduYqtkXnT2nvufuykBwtkv09512XqEml9hF\\nZok5VaJMPtytTfUCCMaclJaelJmSnGG5mVmmHWJhh1IW28y6gocbWk6EKSSOY3gg6w2602+0\\n4y8gONOpKFoVuUlQsQeI7iCCDqCCAYjrfe2WIP5V1m\\/mqrf9NYPvbLEH8q6zfzVVv+msEEVF\\n+KXZ9\\/B\\/\\/Stb\\/wCZRE\\/oCk\\/vT\\/PzP\\/GjYNydvJb48aA+K1Suim6TNs3thneVPVSsRcNfuArV\\nHarjkoxNOW5cFKn3LrqMvS7it6feVsJ1ynzaJyjT1Zo7qWlT0vUJDILlOOT6rnKA2VhdalEx\\nOpWGb2Hdz1y4ZidqlszdyN1Vus0mWpiJZpmTrFIVKOMKZ263VuPBeeqlKSM4IIl8thOgM4Xn\\nMNIknPoR5RC5Fc\\/UXUhK3WnlIafdm1zTDZeQHezZfbR2hWsJzOOFWzbp8ommPyQaPmqlpUWi\\n68QD2jbnorLhcQM6QrKlQTmzG11Kvp3+9ssQfyrrN\\/NVW\\/6awfe2WIP5V1m\\/mqrf9NYIIiH4\\npdn38H\\/9K1v\\/AJlGs+gKT+9P8\\/M\\/8aD72yxB\\/Kus381Vb\\/prB97ZYg\\/lXWb+aqt\\/01ggg\\/FL\\ns+\\/g\\/wD6Vrf\\/ADKD6ApP70\\/z8z\\/xoPvbLEH8q6zfzVVv+msH3tliD+VdZv5qq3\\/TWCCD8Uuz\\n7+D\\/APpWt\\/8AMoPoCk\\/vT\\/PzP\\/Gg+9ssQfyrrN\\/NVW\\/6awfe2WIP5V1m\\/mqrf9NYIIPxS7Pv\\n4P8A+la3\\/wAyg+gKT+9P8\\/M\\/8aD72yxB\\/Kus381Vb\\/prBBBB+KXZ9\\/B\\/\\/Stb\\/wCZQfQFJ\\/en\\n+fmf+NH\\/2Q==\\n--------------030503000903030801000206--","headers":{"Received":["from mout.gmx.net (mout.gmx.net [212.227.17.20]) by ip-10-246-30-150 (Postfix) with ESMTP id 8FF124A85D1 for ; Fri, 20 Dec 2013 15:35:45 +0000 (UTC)","from [192.168.1.2] ([109.193.141.200]) by mail.gmx.com (mrgmx001) with ESMTPSA (Nemesis) id 0Lu7a2-1VT7Xf1Llu-011VKV for ; Fri, 20 Dec 2013 16:35:44 +0100"],"Message-Id":"<52B463C8.1050305@gmx.ch>","Date":"Fri, 20 Dec 2013 16:35:36 +0100","From":"S\\u00e9bastien Fauvel ","User-Agent":"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:24.0) Gecko\\/20100101 Thunderbird\\/24.2.0","Mime-Version":"1.0","To":"info@i-pricing.com","Subject":"T\\u00e4st html","Content-Type":"multipart\\/mixed; boundary=\\"------------030503000903030801000206\\"","X-Provags-Id":"V03:K0:Zltmfhaftibnf1sBCmiQxKk3ZnXy0nx6ak5vzohG81fRwilXnUR wvkN9f2AOHZ7gjmHvTvn1csqspqOKbNS+1klVbnZaJUbnrT9J+WFv4clIFAfRawYCvy8GGE JhRt1h81gOGQ761rx4+rUbUcYfh+2XcD0w4Us6yrCsF\\/Gw6nv5z5puhgW9j1Ad5WWaKkd\\/f m\\/nL5VYAUoqLjvBs+Jbgg=="},"text":"T\\u00e4st\\n\\n * abc\\n * *def*\\n * *\\/ghi\\/*\\n\\nschlu\\u00df*\\/\\n\\nDiscountify\\nend\\n\\/*\\n\\n","text_flowed":true,"html":"\\n \\n\\n \\n <\\/head>\\n \\n Täst
    \\n
      \\n
    • abc<\\/li>\\n
    • def<\\/b><\\/li>\\n
    • ghi<\\/i><\\/b><\\/li>\\n <\\/ul>\\n schluß
      \\n
      \\n \\"Discountify\\"
      \\n end
      \\n <\\/i><\\/b>\\n <\\/body>\\n<\\/html>\\n\\n","attachments":{"john-deere-logo.jpg":{"name":"john-deere-logo.jpg","type":"image\\/jpeg","content":"\\/9j\\/4AAQSkZJRgABAQEAYABgAAD\\/4RUhRXhpZgAASUkqAAgAAAADABoBBQABAAAAMgAAABsBBQABAAAAOgAAACgBAwABAAAAAgAAAEIAAAAAACwBAAABAAAALAEAAAEAAwADAQMAAQAAAAYAAAABAgQAAQAAAGwAAAACAgQAAQAAAK0UAAAAAAAA\\/9j\\/4AAQSkZJRgABAgEASABIAAD\\/7gAOQWRvYmUAZIAAAAAB\\/9sAhAAMCAgICQgMCQkMEQsKCxEVDwwMDxUYExMVExMYEQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQ0LCw0ODRAODhAUDg4OFBQODg4OFBEMDAwMDBERDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz\\/wAARCABwAGMDASIAAhEBAxEB\\/90ABAAH\\/8QBPwAAAQUBAQEBAQEAAAAAAAAAAwABAgQFBgcICQoLAQABBQEBAQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIFBwYIBQMMMwEAAhEDBCESMQVBUWETInGBMgYUkaGxQiMkFVLBYjM0coLRQwclklPw4fFjczUWorKDJkSTVGRFwqN0NhfSVeJl8rOEw9N14\\/NGJ5SkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9xEAAgIBAgQEAwQFBgcHBgU1AQACEQMhMRIEQVFhcSITBTKBkRShsUIjwVLR8DMkYuFygpJDUxVjczTxJQYWorKDByY1wtJEk1SjF2RFVTZ0ZeLys4TD03Xj80aUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9ic3R1dnd4eXp7fH\\/9oADAMBAAIRAxEAPwD1VDyMjHxaXX5NrKKWCX2WODGgfynvhrUPqGdT0\\/AyM6+fSxa3WvA5IYN+1s\\/nu\\/MXkjaqsjHr619Yr8nKyMl9leNRVs9W01EPyLG5OS70sPp9Fz7MfZRUz3\\/zCjyZRBjyZOGgBZonU8EYxj+lKT23Uv8AGT0TGPp4TLM60\\/QIHpVkzG31Lv0r\\/wCvRj3sWbb9Y\\/r31Bj7MPCGBjghzbHMFZDT9H9Y6o+mm7+vVirnW9dzqWur6aynpFLhDm4TAbnN8MjqWU2zJyHN\\/wBJ6dKourZbb61w9a483Wk22H43Xmyz\\/pKtLNM9THy\\/l\\/3bTyc2NuOUvDEPbj\\/4ZPin\\/wAx3cjI6mbi\\/P8ArTTW789mNk3Wvae7DjdOroq3N\\/kqtazpdpl\\/XsrInn9TyD\\/0snIVNtF32d17Wn0K3Bj3j6LS76At2\\/ze\\/wDwb7P0dn\\/GKbMR9uPbdWd7seXX1R7m1CP1pv8ApKq3u2ZX5+N7Lv0lPqejFKRO569P\\/Q+Ni94y0GIysGVZJ5JcQH6UaljSjF6IPodTyqyPzvsR\\/wDReQ1yOx2Oxm3F+tF9T\\/3bKszGb\\/25XdbX\\/wBFZhaokEcJA0bBLHHmYjbFGP8Acllif+m9HiZX11qaxvTOrUdUZMFleRReZ\\/ds+3txsr\\/wZXWf4w+r9OeK+v8ASnVjdDrWNfQQP5FWVvou\\/rNzti4qxjHfSaHfESrGF1TqnTYHT8u3FY36NbHTUJ1\\/o1vqY\\/8A4GpI5Zjr+yP\\/AKkZ4c2O84fUZh\\/z+D\\/pvqHR\\/rh0DrG1mPkirIfxi3xXaSZ\\/m2uOy\\/6P\\/aZ9zFtLxqzN6JnNI6tgjGsOrs7pwDB\\/Wyel278W36XqX20frL\\/8Guk+pOVk9E+sWR9Vsq\\/1cdzN2H9LZuDW5TXYtbt\\/o15eJa+6yn1PSqvxbtn56nx5+IgHQtzHm4q1EgdOKP739aEvlfQUkklOzP8A\\/9Do\\/wDGf1H7P0WnDaRuy7d72kTNeOPtDv8A2ZGIuO68BX1IYDCDV0rGowWEcF4Y3Ly7oHt323X1er\\/wlK6D66E5\\/wBc+mdOMWVMbQHV9v0tzrMkH+tj4tS5B15yrbcsgA5V1uQQOP01tl3\\/AFL1RzSJykdIj\\/pf+iTaHNzqM\\/60o4\\/8GH6yX\\/SgyaruBRddcRVinNge6rc5gA\\/f+0MdWzG49t1\\/6D\\/SV2qm1WMbEtzr68WmoX3PJNNbto9waXPc115bUx3pt+luUR8Whj+eOhlr8o\\/S8P0nTo\\/YWBmeq7rNb9ri30KaH5hfQ4N9XFzn4Rsxtz278e9tbLsf\\/tQz\\/uPTqdCwOjMtt6riZ7cnptdd7LaSxzX0sOvoXG6x1zvRxmvZ+tVU3W\\/zqji\\/VDIAac\\/L9MA6047S7SOPtF\\/p1t\\/sY1ysdT\\/Z3ROltxRivza8630ra7LtrrBsdbY++72foqqMfb6FdbKv8F\\/h7VRzc1jMhjxZuLLOUfRj4Zx0PqlGXphCXD\\/rv\\/QNjl8Uojjy4I4cWPiyAymeKEjH1f4Dx9U+lW15HqbGlzZ14G7RJwWj1Dqt2YXMZVXhYZduZh0NY2T+bbmPpDWZF\\/7lbP1ej\\/u1b+nWe7lXYmwDRjfQ7j\\/F4ouNkjCMqhP3AN5AcMeL+r\\/V\\/rInBCciuQ3J4QEZj4q\\/k51uPV0HrQJe\\/AacZzGiB\\/k671q2b\\/8Auz0\\/N2f9beqDloU\\/p\\/qr1GomG4GdiZnxGSH9Ksb\\/ANLenR+Yfy8f+lwtvlifUP6vEP72P1h9i+0Uf6Rn0PU+kPof6T\\/i\\/wCWkvJ\\/2i\\/7B9sjT\\/mz+zok\\/T+2fsnf\\/wB\\/SV3j\\/wCjxOnxj\\/m8X0f\\/0bmTbs\\/xl5OVMtxd1p+FWE2R\\/nuXI4ojHpHhWz\\/qQuizCf8AnV9YT+d9mz9vx+zMhc9WRsZ\\/Vb+QKhLWUpdzw\\/4vq\\/8AUjmc38o8Z5Jf9z\\/3KdqnDXNLXgPa4Q5rhII\\/lAoQOkpxfUPz2kjsDKZXZpU9d9TsN1WPbk77G0uPo0UGyx1QDYdbbXRZY+ln6T9Ez02ez07EH64PBzcJg5roud\\/24+ln\\/R+zLc6PW2npGFW0QPQY8\\/1rB61n\\/TsS6l0zE6nUxmTuaaiTVbWQHs3R6kb22VuZbsZ6lb2LncfNYx8RlmynhgDOIlV8Pp9qPFGP7z0c+WnPkRhieKcoxNyN8Rvjl6pPCEhQcfFdUPqdh98y8\\/Cuof8AkkOz6l0uP6PqFjP69DH\\/APUXUrXHP8oTXvR\\/5w\\/7lyP9F80P0L\\/wouB+zrrenv6hjn1aqNMysfTp\\/wCGc3\\/C4j2+\\/wBdv8x7\\/X\\/R1eus9y7XpHScjoGVk5tmSy3EFBJfUyz1Q5jm2Ne\\/Ea25ztrPV\\/mbb1x2W\\/Efk2vwWPqxHvL8euwBrmMd7m1ljXP2trnZT7v5j0\\/z1Nh5iGWUxCpRhw1kieKE+OPFV\\/vw\\/SirmeV9rHjmRwTlcZ476x\\/Tj\\/VmgcrvSh6mH16g\\/Rd0m2\\/+1jWVW1\\/9KxUHLQ6If0fXZ\\/8AKTO\\/Ljqc\\/LLwjI\\/81XKD9dAd\\/wCCP7T\\/AJJ9Lt6O35ftL7TtSVCX\\/ZfL0\\/8A3Y\\/8kkn8R\\/YzcZ\\/8ap\\/\\/0rOVUH\\/4ysvDGjcrfUZ\\/4bBZ\\/wB\\/XIYzt2PS7xrZ\\/wBS1dn9cz+z\\/r703O\\/m67RjPfYeJZc\\/HyP8zHtpXHuodi2WYj9H41llDvjVY+g\\/+e1RyaTkOmh+3ic\\/mo+k+GSX\\/PjGQen+qbuiXzh34lNnU3bnVPyGixtrB7wyht3q1U3Uf4VldHq+j+sfpv03p36Prwxjvs2bh5WE+p5qtbSa8iuss9jxtxX13+xw\\/wAHjLiw6PvB5ggjVrmub7mPa76D2e+talmXjdWLft1rMPOYxrB1B8+hfHsrZ1LZ7sTJb+Zns\\/V7P+2MVUM\\/K8cyZyySxT6RnP8Ao8v3oQ+X28n6X6v9X\\/suP25eX5uQxjHjEI5Y6Dijpmj24vT+s\\/6b2+F1Pp\\/UGh+FlVZE8ta4bwf3bKX7b67P5Fle9Wdln7rvuK806jg34uQcTqFLfUa1rgH7bGuYZ9O2p\\/ubZU7a7b\\/3yxV9lYbsAIrAgMD7A0fCsWen\\/wBFUpfA4nWGY8J2uHH6f78Zw4v8Vn\\/0vwkxyYTGQ0IB6\\/4XC+pulgl8MB\\/eIb\\/1SiHtcDtc10c7XB0f5pcvLG4+K36FFTfMMbP3xuRsW+zEyGZOMRTfWZZY0DSdHNc3T1arPo20\\/n\\/8b6VtYPwLQ1nuXS8fCP8A0pNUfjMTIA4iI3qeK6\\/weF9O3HkGD2IXn31kxGYfWsmupuym3ZkVsGgAtG6xrP8Ag\\/tLb9n7i6Ppn1q6flsZXmPbg5Z0LLCRU4+OPlvHpe\\/82m91WR\\/Is\\/nFH6zdDyOqV0ZWHsN9LXshzg1ttbj6rK68ifQbbTd6nper6dVn2i39PVsTPhvHyvMyxZ\\/1QyChx+mEskflIn8n7\\/qZ+dhHmeXEsREzE8Q4d\\/F4hxV3pNnpYnXrz9BvSLqT\\/WyLKaqx\\/wCBqjkMuoufRfW+m+uPUqtaWPbOrd9b4d7vzXK5Q40\\/VXqVpEs6hnYeE3y+zB\\/Urnf5li3yNCD19B\\/6p6P+6crlgY5LOnADL\\/FY+gf2V6vb0p+X7R+zJK59iv8A2Z9jkbv+bX7Uny\\/aH7W2\\/wDbftSVj2vPa9v+a2va8P8AJ8P1f\\/\\/T2\\/8AGz0439Ixc9rS44trqbCOBXkt9Pc7\\/wBCq8Ri4zrzm2dSGczb6fVKKc5obpDnsGNlsd\\/wjcrFfZZ\\/x69g6z0yrq3Ssvptp2sy6nV743bXEfo7Wt\\/eps22sXjOJm4NuEzo\\/WfXw8rEssfRc1m80ets+2Y2V09\\/pZFlPrVer+h\\/S+p\\/4JV5kESjMAkaiVerQ\\/pcP+BFgzQEhIaDjAonQccPH+tFAHKQcRwju6J1L0\\/WxG19SxwAfWwHi8Dd2fjjbm1v\\/f8A1f2fvqj6zGv9N52WDQsd7XA\\/1H7XKGMozvhIlW\\/Drw\\/3v3WhPDOPzRIbXrP9BmPuPo1Fzqq\\/zWGyPV9If4Jtu1rrGM\\/R7\\/0n0025B3J96VLCCTZN9NUkpiUPemL0aQIpC7nz0ITUZV+HYbMO2zFsMFzqHmvdH+kaz9Hb\\/wBdZYgPsDRLiGjxJgKeJi5ue4NwMe3LJIE0sc5oJ\\/euj0a\\/+uWJEDhPFXB+lxfJ\\/hMmMTBuF8X9V6Jl9n1q6S7Es9\\/W+mh12KZawXVuLfVrZWxoY11rGspfWxtf69Xg3+yrJvWNl4tt+J0Po1YNeRnh+TucRtLuo3DDwnbW\\/wCjwMf1X\\/8AGItGHjdJyGZPVOojFyaHeo3BwduTl6Ese261pd0\\/D31u\\/wAO7Irux7Peui+otd\\/1i+uOV9Z7a3NxsYEUu3Fw9RzBiU0+qdzMh9OH9otyfTs9l2VUmcvG5iMNcMbnGQvhjfp9qH6E8XqlOHB6Mf8AN\\/uOjRkAcgrMQIz\\/AK0R6uOf9b9B9E\\/ZfT\\/9A3+Y+yf9Y\\/0H9RJWklo0OzK\\/\\/9T1VU+pdI6X1aj7P1LFqyqxO0WNBLSRtL6n\\/Tps\\/wCEqd6iuJJKfP8Aqn+KXFfYb+kZrqHglzKslvqgGZrbVk1mnLp2f6Sx+VasnL6N\\/jHwKnUXVu6piNO5zXGrOrd\\/1vNFXUXL1ZJQ5OXxZK44iVfLxDi4f7vEt4APlJj\\/AHTp\\/i\\/K+IXZdOPY49V+rjKnkTtr+2dPie\\/o7bqlVHUPqy536THzcefzasvHsA\\/9i6mWf5y95SUf3KHSUx\\/1TKR\\/iyn7f\\/MW+3Z14Zf3oR\\/7jgfCHZv1RA9p6kT4G\\/CH4hpTU9T+rwdtZ0m7LB+ibs9wP\\/bfTqV7wkl9yjVGeT\\/HyQ\\/HFPGr2x0jCPlD\\/vuJ8Xwm\\/WLI2N6L9XqcYuM0ZTcJ9jx2\\/wCUerurpWwz6hfXXrvv69niil53OpusN5a5ulZGBhnG6a3\\/ALfsXqCSdDlMMZCXCDMfpy9WT\\/wyXrXcJ2MiR2+WP2Q4XlOjf4tfqz01rDfT+0bm67smDWCRtdswmBmJt\\/OZ6lVt3\\/DLqgABA0ATpKcADZIAGwpSSSSKX\\/\\/V9F6\\/1U9H6Nl9UFX2g4lZs9Lds3R+b6m2zb\\/mIXUfrN0PpNdR6pmVYtlrWvbSXbrCHT7m01h1zq\\/a79J6a5361\\/Wzo3Vfq\\/n9L6Yb8zPyajVXjV494fucQ33B9LduxSxc7D+rv1p61kdbqfR9vfW\\/E6n6T31upDGM+yetWx\\/pei5v0f8A329SMz10Irv0C0yHQjz6B6M\\/WPoI6cOqfb6DgFzWfaGvBYHujbW4t+jZ7voO+grOf1LA6dUy7OvZj12WNqY55gF79GM\\/tLzfq7W5GH9Zur4uFbR0\\/qN+AzFc6o1m6yq3dkZTaSG3NY\\/f\\/Oen+m9f\\/uR9orr0vrR0v6yYuHiWdR6yeqUHNxmjHbh10w42Dbb6uOXv9iByGpabUgzOuj2uH1Tp2fZkVYeQy+zDsNOSxhl1bwS0ssb9JvuY9Cs6xinAzszDc3KPT\\/WZaxrtsW0AmzHe7a703bh+4uIwei9Ttt6t17ozzV1jp3Vs5jKnCGZWMXstswbZ27tz932d\\/wBD1P8AR\\/ocrE0vq7a\\/I+qv1gyHVPqdk5PULhS9rg9vqN9T0ixwa7fW53p\\/R+miZmvHX8FcR7Vv+DYx\\/rZ9Z7sOrqDfqy9+FbW29tlOXVY81uaLGvqxtjLrHbHfzW31Fo1fXH6uu6didSuzGYlGc17qRkfo3TU4VZFbp9u+i13pv93\\/ABe9ZXQfrd0bB+r3T8Sz7TZl42HSx+PViZDnGxlbQ6qt\\/o+g52727\\/V9L\\/hFzmTjdRwruk9Sufb0fJ6hldU6g94oOU7EGR9nbVW\\/FY1zrn2U7K376q31PyPfUz0UuIgWDe30UZULB4nvKvrd9WbqrrqepY9leMGG57Xghosd6NRdH71rtiWJ9bfqzm5NeJidTx7si47a6mPBc4wXQP8ANXJdW6k7O+pnVMOzqNvW8ttmPZudhWYRFb78euuhrDWxtn6Su79J9P8A7bWl9XetWu6m2jL+sF3VBkMdVTiu6ZZiD1f50W\\/afSa32U1Xex7tiPHrVj+X+EkS1rwGrrN+u\\/1RcWj9r4oL4jdYG\\/S43bo2\\/wBpHzfrT9Xen3\\/Z83qOPRbta\\/Y94B2v+g7+1C8\\/xGfWin6hY12JeX9IvZbTl4teOH5FNLrLa8jIbve1+U1\\/6V2z9X9Guz6fp78qm\\/fkHp\\/UWV9N6xd0zCb0zp9eNkDAdmG+lgyfR3BlP6DY12\\/6Ffqet\\/wKb7h06bfy+ZAnpqK0B+16r\\/nx9UP\\/AC3xf+3Akuf\\/AOcF3obP+c+R6v2f0vV\\/Y9v8\\/wCt63230\\/Q2\\/wBE\\/Uvs381\\/2p\\/nEk7i8R\\/L\\/CTxDu\\/\\/2f\\/bAEMAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf\\/bAEMBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf\\/AABEIA7YDRgMBIgACEQEDEQH\\/xAAfAAABAwQDAQAAAAAAAAAAAAAAAwQKAQIICQUHCwb\\/xACBEAABAgQCBQcHBQcMCwkLABsBAgMABAUGBxEIEhMhMQlBUWFx0fAUIoGRobHBChUjMuEWGkJSWJfxFyQzOWJ2d5Kit9biGDc4Q1dyeJS1ttclU2iClqjT1OcZJjQ2VoeVuMLS1TVEVWSYJ0hUY3ODhIWIsrPExyhFR4akp7TDxv\\/EAB0BAAEEAwEBAAAAAAAAAAAAAAACAwYHBAUIAQn\\/xABlEQABAgQDBQMIBAYIEgcIAgMBAgMABAURBhIhBzFBUfATYXEIFCKBkaGx0RUyweEWFyNCUvEkMzVUVmKV1DQ2Q1NVcnN0dZKTo6WztLXT1TdEY4KUotIJGCUmZHakwoOyRYTD\\/9oADAMBAAIRAxEAPwCfRBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBDOYmWJNl+amn2ZeWl2XX5iYfcS0wyw0lbjrzzrig22y22kuOuOENtNg5qSBuxbv\\/Tj0P8AC\\/XbvXSPwjpk4ylZepcheVKuSusbMgHbUG13a1W2lKUv6MOyKQ9s3Q0HNi6U4c5UJGnt9tPzspItE27WcmWJZu\\/LO84hN+4HhDL0xLy6cz77LCbXzPOoaTYaE3WpItcj2xlhBGmu\\/eXL0IrS8obtZ\\/FLFB5KXEyzlp2KujyDziVENl2YxAqdmzzDLu5wOJpcy8hvjLl0FkYS378oTqSy5L4XaNckwAhexq9\\/X+\\/OlSiohra2\\/b9vU\\/UASnaOFF0ObVbmyAaDW1egNS2v7N6WD5xiymvqAFk03t6rmJNrJXTWZpo95KwBxIuL6WYxRQpe4VUGnFDcmXS5MXtyU0hTY37ysA62N4k3QRDJvflxNOa6lv8A3O1HC\\/DNpe2TLi0cPpaqPS6VILbRL2IFRvVt6YayDu0MsiXXMD\\/wUMZSoxBvTlBtNm\\/\\/AClNxaTeLrbM2HBMSttXTN2PIPNPM7B6Xdp9k\\/c7IqlnmvMclPJ\\/J3AXM2fpXSYDUfKVwPK5kyNPr9TWM2VSZWVlJdRG4FyYnA+AeYlVEDUi+kah\\/HdLb0Zlpx88ylppBGhBBLql+otiJ8NQqVOpEq5P1WoSNLkWMg9OVCal5OVa1jqpLsxMOtNN6xIA1nAM+YbzGO13aZWiZYSHk3bpJ4JUp+XSVOU39Uq0p6slIS6slNFp1Vm6w6M2nUZsyS9dwpZyLzrbaoAVw3ZdN3Tvzhddy1+56gVOK8tuGs1GtThW8UbZflNSmJp\\/We2Te1O088tt55kAxwEQef8AKjf9JNMwgw3uDbs\\/V3HrghObNLy8jL5ddLJmSLAKv6RSNU7j+YV\\/Q9NaRbcXX1u+BIQ2yB3jMd1rxODuvle+T8tQutpxyNyzjRd\\/Wdp2HiJVy7qiZGs1UlWvKUBxJeY2SMqtm55RLzGr5I6ZoY6XNy9Wh9SddqgWVjtdj6V5NPS9rWhSKa4EuJSpS5ir30xUUazYLrI+aXAvINvbEkkRB4Ih075SuPZjMmWlMPSCSRkUzITbzqQCDqqbqD7SzoRfsE9wG+Ne5jWtuXyiSYG6zbClEd\\/5V1259gvwtoZOVw\\/KF7dZS4m1dFyt1FagUsu1\\/FaRoyG1KZUNq7LU6xa8Xg1MapLCJyXLzBJ8pZcybjouv\\/KB8eJlbn3L4D4TUZB2mx+fqreVyLbJaAaLi6dUrWS5s3AtboQ21tGvohsVJU85oBioSo8Ek9gJiLzW3fahNFX\\/AMyGXQoW7OVplIZA0sSF+YKeubby6bH6towHMT19wAKqS06\\/1NiWb320uhlJOvMm943K17l0tN6sLUuQlcF7WSXW3Q1QrCqz6W0ttBtbCfumu+4Xdk84PKHStan0v5Bh5lj6COoKzywvKFVZpbDeOctRmXGHGXk0bDPClh1wObtqmbmbKnJ2WeSDk27JTMuUdO0GcazNk4fwfaB7zFdivq9cR2Y2o7QpoFLuMcQgK39hVJmVO8GwMqtkgG1ikaEaEW0jCXWqu4bqq09re4RNPNgg2uMra0pHs0F+F4zeq\\/KT6d1bLxndJzEpnbNhpz5pnabQNVII85kUKnU0S73S+wGnl7\\/pSOPXtT02dMirrU5O6VekPk4z5O4zKYx4gU2Uca84KSuTp1flZRwLStaXFqYLjiCUukjdGMmwX0p9Z7oNgvpT6z3Rp38Y4rmRlmcS4hmEk3KX61UXhccbOTChfU62vqeZjFVPTizdc\\/NKPEqmHlEg20OZw8dTfvvuMdsVDSAx8qzSZeq434u1KXQ6H0y8\\/iVec4yh8JcbS8GpisutB0NuOo2gyWEOOdMfKT+ImIdVcbeqd+XnUnkI2Tbs\\/c9cnHG2gSdRtb866pKNYrOonzdYk5CPktgvpT6z3RTYr6vXGtXWaq59eoz69315yYVe39s4fffhyjHUtS\\/rvLV\\/bKUTpa28ndfq2juoVesVctLqtUqNTMuFJYNQnpmdLIcILgaMy67swvUSV6mQVqjPmMcfF+zX+KfZFpSocQR2giMNyYcdWXHVrcWq2Zbi1LWbAAXUokmwAAuTYAcBaE5Qfzr630txt46nd7NOdIIIIR2g4g\\/H5QdmeB698EO5Cp1SkuOTFKqU\\/TX3Ww049Tpt+SedbKgdmtxh1tS29YJWUKVqkpByG\\/NpBDrbym1pcacU2tJulaVFCkndopJBG+xsdYTlUOF\\/DX5\\/D2iPrZLELECmv+UU6+LxkHyhTZfkrmrco\\/siQVN7ZmeQ4UKIRrJ19QhAA6I+qp+P2O9IQ63SsbMXaWh5QW83TMSbzkUvKAKQt0S9aZS4oDdrrBI3gnfHVEEZ6KvVEWKKlPoOtiicmE77cnLagd19L3j1LjiPqOLTb9FSh8DGSdM009MajGWNN0qtIltuSZDErKvYzYgzcixLoaDTbDdOnbgmZENMtjZsIMvkxqDZamQMdgUnlKNO+hGXMnpPYoP+S7XZfPFTk7hCtuHdczAr8jUhOEB5zYGb2+w+i2OxLTWywsgjZS+L8VSoCZbEuIJdINwlis1FkZrJGazcwkX9Ea79B+iIyUVCdQbpm5lJG4pmHUkbuIXfS2nfrGySj8sJyhtGbaaVj0iry7LTjaGK1hphPPKCluKc2rk81Y8vVH3kZlLZfn3UbJersyAyGu26Fy6OnRR1oXPu4QXSlC2FFquYfTUulxLR+kaWbauO3XNWa3eUFpxpxP8A8rOS3GNPSmUn6pKeriPbv9sIKQpPEbukcI3cttMx9LAJaxliIgG4D9Umpo8BYGZceOXQAJvYW0EZrdcqySMtTnxbQBU08tNuACVrUn1Wjfpb\\/wAoP0hpXY\\/dRgbgzWQksmY+YJq+La2oDhMwGvnGv3WGC6zk2xtBMeTrzddE0M2Y72tr5RDSXEtt3hor1KUKQnbTttYtytSS8rVdLq26ZVMP6VsACmXS22urTO02jylPJLTTbsZEgHiPTzwmpBHDePHj4CJFKbb9p0oUWxKp9CAE9nNU2kvpWAmwzrVIB8kGxzB4KJHpKUCQc1vE9db+rUHDzDjUu7\\/rGlW9Vj3iJelrcv7okVRKG7ow5x4tWbURtHGaBZVwUltJQylQE5KXzKVIqDy5g6oohQWGEvbUPP8AkrWSFqcslye9zhtD+NFRtObdP\\/gV1YdYiSihmlajtZ+l2xV6G0E5ZEPVVvaKISztMyYg8QRJ5Pyjsey+QTMvQKgkEFZmJCZacUkEXAVJz0uhJ00UWlAE3KVDSM9vGtabN1eaPf3Rgp15\\/kXGteOmndaPQjtDTh0Ob82SbX0nMDpyafKQxTZvEq1qLWHVKGqEt0et1KnVRe9RSSmU8xee\\/hnkjR67RbjkWapb9Xpdcpr4GxqFIqErU5B1Km0OILM5JPOsOBTLqHEFLhKm3G3ctVQjzSVJB6j44w+o1er1tTqajb1Zq9BqAQW0z1FqU5S5sJORKBNST7D4Sct6dpluAy3RL6f5Ts0MqalhKXd9L03JGquyxAsLZWX5Oazm4OhfQCNNANdi1jyYH7fTmXNBq0+trxNltvcOF9+8x6YkEeezZunvpqWAWxbGlBjU0yx+wyFavut3ZSmc3Q9qs0q7JmuUxpK3Rrrbbk0tu67pdz2roXl9ZHLi6fNprZ+fLow5xJS0kJU1e+HFIkkvBKgpBeXh67YcwVJA2RUh5vWRlrnagPCb0\\/yj8GTISmeptdp7hAKlBiUm2EkkCwcam0Pq0N7+agaEb8ubas45pq7B+VnGSbapDTqBcakntG12HCzaiRrYHSJtEERZ7D+US3ZLLaZxP0Z7dqra1na1Kwb+qFvuMI8zNTdFuCgXKmbUSHPMVX5MHWB2mbeTubeHnL26Fl0iUZvOj4vYYTi9VM5MVu0afcdDlnCVAmXnrNrtcrM5LoSEKW45bcq6VHzJZWQWZ3Ttr2zmplIYxRIsKJIy1FEzTAmwB1cn2Jdm2uhDhSdQFFQIjbMYnocxYCeQ2o70vodZtc21W4gNn1LNhqdxjd7BGGGHXKFaEmKqmGLO0m8J3ZycTrSlNuW427Dq81rZkNS1Fvxq2aq\\/MpAU4ZVqRVMBvN0shkawy+p9Rp9YkZepUmfkqlTZtsPSk\\/ITLM7JzbQzSHJaalnXWHmyoZBxpxSdxAJJzieSVRp9Sb7anT8lPtf12SmmJpu9gfrsLcTuIO\\/cQeIjcszMtMDNLzDL6bXzMutui3O6FKFu+ORgggjNh6CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCOErtfoVsUqbrdy1mlW9RZBG0nqvW6jKUqlyDRyb2k3Pz77EpLtlSsto86hGahmSRGuvGLlcNBLB0zcm9jFL4k1uVzzoeEFNmb8MwQMlCXueVVKWEpQP4Dt4NOa2WQyzMamq12i0Nnt6zVqdS2iCQufnJeVC7WBDfbuILirkAJQFKUdAknSMaZnZSTTmmpliXBFx2zqUFXchJIUs79EgnQxsvgiL\\/i78oWrj\\/lEjgLo\\/UynjJfkty4t3HM1Va0qOqjbWZZ5pKZdbSUlZUm+psOrcKAygMkv6u8WeVQ06sX1TLNUx4uGzqTMawTRcLWZHDqVl21gh1luq24zJ3VMtLGYPznX55aUFTeezMVJW\\/KCwBS86JF6oV55NwBTpRTLAWOC5moKkxkvoVsImN90pUL2jU3jOkMXSx284oXsWm+zbuOBW8W1W5FDawbaaEEzf79xTwxwqporGJmIlj4e0tSVrRP3tdVDtaVcS3nrbB+tT8miYV9YKbZLi1OZJAzyEa68T+Wa0DsNzMS9OxFuLFSpyxUh6mYX2dVKn5wIIUxXbnVaVpTjbn1UuSdxzCTkM9UbzCgrFardyVGZrNxViq12rTqi5N1Ws1CbqdSnFndrzE7OuvzLy+OanXVEjgY4+KirPlM158rRQcP02mtm4D1RfmKm+BawUhDP0ey2rcQlYfSk3Bz3uI9M46nnNJWUlpcfpOlcw5w1BHYo4WIU2oWOmupkrYm\\/KFZ5ZmZTBvRzlJdIUryWu4m3k9OFxIKQ2p+1LWp8kWVHLNwovOYGeQGRQC7r0xK5Y\\/T2xGVMtSWJ1Hw0pkyNVdLwzs6iUgMpzJHk1crrNyXdK6uf1mbiQSMwonPdq6QyTvVuHRznuhyAAMgMhFVVja\\/tErOZMziioS7av6lS1NUlCRocoXTm5d5Y9EX7R1ZIJBJClCI3NYjrMzcOVCYsd6WVCXRa1rES4bChbeDe\\/Ekx2NiBjPjFizMuTeKWKuImIkw4vXJvS9LhuZtGqsutIZarFRm2pdhk7pdhhtphhH0bLTTeQjrqCCK6mpuanXVPzky\\/NPq+s9MvOPuq1J1cdUpZFyTqTqSTqY0i1rcUVrUpalG5UolRPDUkknQDeYIIIIxCsDdr1z\\/XAEE93j18bQQRclClcAe3m9fCFksfjH0Dv7oQVqPG3h1eFWSnfqfb7tw9cN4vDazwSfTu9+UOwhKeAA6+f1nf7YvAJ4AwmAr5DTv+7dDUMHnUPQM\\/acvdCgaQOYntPdkIcBB58h7T49MXBA58z7PHrhJWkcb+HVoQVKPE\\/D4QiEpHAAdgAisLaqRzD07\\/AHxdCe0HAde+PIQyPQfUYrqK6PaO+FgDzAn1mLtVR5vh748znkIIb6iuj2jvg1FdHtHfDjUV0e0d8c\\/S7Pu2tol10W2bhrCZwlEoql0WpT6JtTbi21pl1Sks9tlJdbdbUGyvJbSt3GHmW35hRQw0t5YF8rTa3FWJCQcqAVWzKAvawJA3kQcbcTuHEx8xqK6PaO+DUV0e0d8dwU\\/AHHarNuOUrBbFmpttKS085TsOrvnUNLUCQlwy1HdCFEAkA5Hhuj6+W0QNLWdl2puS0XtIiclX0hbEzK4KYkzDDyPxmnWbbU06kngUKyz54zk0isL1RS6gsa6pkZo7iBwbPEnu01NjeH0Ssy59SXfXpf0GXFac9EnSMb8j0H1GKRlu1oI6ZzzbbqNF7HIJdQhxIdw5uVlwB0ZpDjT0g28y4Ac1tONocaI+lA5+WkOT402akHTL6MeLjYaUkK8vteYpRIXraobTVFSanh5vn7HaamX0hAzMZ6cK4pVbLhuvLuLjLR6ibjTUWlzcWudO6HBITxNhJTZJ3ASzxP8A\\/SMMSlJ4gHtAMJlpB5iOw9+YjOL\\/ALnHpwn\\/AOpmxL\\/9GSY909Fp5OHTi5tGjE0f\\/g2TP\\/6d8YV+CWK\\/4MYh\\/kSp93\\/0vf1YwsU6pDdITv8A4V\\/\\/AIcYNlg8yh6Rl7Rn7oTLaxxSfRv92cZrz\\/J4ablPZS+\\/oy4sONqdDITIW45U3tcha98vTnJx5DWTZyeW0lpC9k3tdo81nxX9gTpp\\/kv43\\/m+r\\/8A1KBWE8UJNjhyvA8QaNUgR6jLX74PMqgnRUlNj+2lngbetHv1jDqCMmXtDjS5YQ4\\/MaK+keyy02px157A\\/E5ptpttKlOuOuqthIabbSkrcUtQQlAUenL4uo6PWPNKZTM1LBLFymy63Qyh+o4bXnJMl1SXHAyl2ZorTZdLbbi9mPOKG3NxjDNHq6BdVNqSOPpSM0BwudWhpwHO0IXLzKR+UlX0C17racSN43EoHMXNxyPf01BH1VVsm8qEXxW7UuakGTQHZsVShVWniUQ4hDjapjyuVZLIW2424C4U6yXEDnzj5WMV5t6XUEPsutKIvZ1tTSiBpcJWASLgi+guCN4IjHyXvplI4G\\/s3C1vWefeQQQQgEHcYSQRvEIrZBzKdx6Ob7IbKSUnIjL49kP4oQCMiAR0QtKiO8fDwj1KiO8fDwjjikHqPV7zCRBSd\\/2GHq2SN6d46Ocd8Iw6CDuPq6\\/VDoIO6G8UIB3GFFIy3jePbFkex7CKkkb+b2+nx6oSWgLHQRwPjmh3Cakc6R2ju7vAdSu+h9vzgjjVJKDkfXzHshFSM949Xjx8eSUkKGR9fOOyGi0FB6QeB8c8OAkG4ghpH3dj4pYm4YzfzhhviNfeH1Q2wfE7Y93XBaU2HwEpD3lNBqEg9tgEIAc19fzeIyEfEqRnmRx9\\/wBvjrhKMuXmXpdwPSzzsu8nQOMuLacT3BaClQB7j6oUlSkKCkqKVDUKSSkgjUEEa6GNmmG3LB8oDhrsGEY2O35TGC0TS8S7at27duGuIfrz0hK3asOgajurcIWv6+53J2NimGHyii95Yy8tjRo5WpXELUgTVXwwu2rWqqWG\\/ausW5dcteInSU\\/sbC7qp5QeM0oHViNvFik57xx5x0+PHXOqRtX2gUcpTK4nqTqEkfkqi4iqtqF7lBFRbmVISd35NTagNEqTZNtxK1+rSxAan5iwsEpdX26Lcgh8OJT\\/AN0DusYm1YVcuLoH4iGTlrlua+cHalMpSgy2ItlzzkgmZ8wLaRWrFfvKmtSyla5Ynaq9S21NJzmW5R5ewjZThnj7gfjNLiZwlxdw1xHb2KX3G7LvO3rinJVvJK\\/1\\/IUufmZ+nutg5OsTssw9LrzS802dx82YgEZGL5ScnaZNsT0hNzMjPSjqX5Wckn3ZWal3kHNDzEwwpDzTiTmUONrStPTmItSjeUfiFjIitUSmVNCSkKdk3H6bMLFkgqVn8+YUs2UohDLKSSEjIBeJDLY1n27CZlpeZSN5QVsOHxUC437Gh4X1Hp7QR59WEHKaadOCJl5ez9Im+atR5dLbSLfxBmJbEujiWayIkZZm+pauzVJlgMglFDm6Y4lGQaeQDkdp2DvyiXE2kiWksd8BbSvNlCENP1\\/DKu1OyqmjUV\\/4W9QLgTd1NqUytsHasS1Vt6WU6dszsmR5NFsUXb5gipZET\\/0jQ3lZQozsqZmWC1FIARMSBmVlPpX7R6XYSkJJXlGsSCVxjS3rCYS\\/KKO8rR2rY8FM5lnvu0PXraWPBGpXBjlqtAnF9UvI1PEStYO1uY1Aik4v269QZTXUBtSu66E\\/ctlyrKFHJC6lcVOU6jJexTk5s9ntnX1ZOIlEYuTD68bWvi3JrJMrX7QuGlXLRJkhII8lq1Fm52RfyBBOzeVnmOA42vSsQUOut9rR6tT6kjKFHzObZfWgH+utIWXWlDil1CFA6EAxI5aekpwXlZph\\/S5S24hSx\\/bIBzo\\/7yQd2msfWwQQRt4yoIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+DvvEnD7C2gTF0Yl3xadhW3LBXlFdvGvUy3aWhaEaxbRO1eZlZdT68gWpZpTsw6rJpppS8gNP2PvLuaJWGJn6XhJTrux9uNkFDMxQpRdnWJ5QlKwtqYum5pVNYeKHtmEvUa0axIvo27rNQIDO3j9cxVhzDTXa12syFNBGZDcw+nzl1INiWZRGeafsb3DLLhFiTuNsGcqUhIC85NssG1whS7uqG+6Wk5nVf91B3jmI3ex1jiVjBhVg5RjceK+I9k4b0QhZbqF63NSbeZmlNlILMiKpNy7lQmlKW2luUk25iZdW4hpphTridaHDjpy2emvi95ZT7Pr1u4EW1MnZtyGGtKC7kclt+qmcvW5F1asMzYUrWVOWyi2PNQ2jYgbUPaqrpvC779rk1cl8XTcd5XFOnOeuC7K3Urirc4c1rHlNVrE1Oz0worcdX9NMKJWtZO85xRmIvKQoUn2jOG6RN1d0Zkpm55Ypslm0CXENZXpx9Gtyh1uRXawzJvcRKdxzKozJkJVx9Q3OvqDLd+YQnO4sdxLR48NZhON\\/LsaIeHLlQpuF1OvjHivy+aZeaoFOVZtkuvoADrL9z3YxL1sISrJtuapFmVqTfKFOsPuMFp53UFjVy6mmJiL5ZIYZy9kYF0OYCmmHLco7N33ehh0FLzb9x3gzP0svqQQhudpFqUSblv2aVdZmgy6NLYSAAkDd0dPfnCyU5bzx5h0ePHVReIdt20CudohNWTRZVy4ErRGvMiARYWnVKdqNwN5E2lN9QgEJtE5zFFanLgzRlmz\\/AFOUHYAa7u0BL5HCxdItw1N+yMScZsXcZaoKzi1ibfWI9SbWtcu\\/el01m4vItoAlSaczU5yYl6cyAA2liQZYYQjJtLIGUddQQAZ5ADqAEVNNTczOvLmZyYemZhwlTj8w84864o71LcdUpajzJUT7I0ClKWorWpS1KN1KUSpRPMkkknxMEKpRlx49HN6esb+mKpTq9vT0dkKoQVnoA4nxzxjX47h+r2crb\\/Awg6a7otSkqOQGZ8bz1Q6Q0E7zvV08w7O+L0pCBkPXznti6GlKJ3aD4+PyhpSid2g+Pj8oIIIIQVAb\\/ZHgST4cTBBH1tpWNet+1EUexrQui9KuSkCl2pb9WuKoku57PKSpErNzWa9k7qfRgnUPCM4sOOSw068SUNTEhgJXrWkHNUuT2I1Qodg+TpVnqqco9zVKQuVY5lCXob7jeY2wGbcbOQoFcrBSKXSalUAo6GUkZh9A9LKSpxttTaQkghSlrSlJBzFIuRly0nNzRtKykxNG9vyDLrxBFtbNtqsBpcnURrzShSuA3dJ4QullIyJ84+z1c8b77A5AvHSrFDmJWNeGNjsuAEtWlSblxBqDSTxS8xUGbAkdsnM+YxVJhrofzIjNqw+QZ0aKJs3r\\/wATMW78mkbPNimzNt2ZRXclazhdlGaNXqwNrkhLWwuFotJLwIdd2LjU5puxrH9QyqVSmac2vLZ2oz0s1a97lTLDkxNIy6FQVLhViMqVWVbfMYQxFM2PmPm6D+dMPMtW5XRnU9x\\/rdudraRPAOYD0CL2Zd591tlpC1uuuIbZZaSp1151xQS2022nMrdcUdVCEaxWv2TjrH5LvQSsEMLpej3a9bmWVEqm72qlyX35U7s9kXZiQuus1akDWAH0DFMYlUOZuolw9vjKu3rFwWwjYCLUs7C7DOWYYSkJt+3rUsphEu0yptKSKbK01tDTbDqgE56qGVqSMm3FAS5rYHOyrCpmv4so1JYaAU88207MMtDeorfnHaW2hITrnVoCDoQCY3sns2qcwtKHJ2XStR0RKMvzjhFtLJKZfMq+hANuSjEEGzNFfSTxC2ZsjAHGK52HQkpn6XhzdkxSkh0FTanasKSmmS6HAg7Nx6bbDm7LMxlTaPJK6et3IafGCRtmTcIAm7vvWxKIps5MqO1pa7jfr7eTbwWs\\/NGX0bzOt5Q1sTMUqWNuFtKSozF5Ut4p3AU0TdXKlcyQaXLzScjkrNZIR+MvLh8JUtKHDeTzTJs3DVjmQDK02XYa3HVClLqE9JuhKwkLSNkpe9KVoRksiMVFPk04VzfhRtww0p9n0nJOTxTh1cyEmyQldNp\\/0pUtVBR9AJJtYEZVETmnbCq1OZSKbiSZCtzjdOMiyo8w7NMuN5bb\\/wApfv1ERwLU5B\\/SoqoQ7dWIuClpMLHnMsVi8LiqjJ1c\\/pJaWs+SpZHSW624cwdwyG1yQtn5P3KJ2b156Tz73np2kjbWFjUtqthQzKKtVb5nM1OJ3JHzKkNrzUC7+xxt3qGlvKpyTSrKmHuP0s\\/Wm5cp81AP0EtTpnXzGsD+uUfVSveFlKfi5\\/Ssvd46tOoVtSSSBvfaqU88B5p8wpn5NobgpKtZlZ1V+aUKTrxB57yhvImw9dKK9U8TzDBAKJCkYzfzqJScodmpakUp5IBvdDqm7AHMVjSdSHk31ZzKXaDkSQLLn6yyki3FTclNFwEnelTQ\\/tQLRh9bfIPaK1ObbXc2I2ONyTYQEuCVrdlUGmLXsUJcWmUbsioVBB26XHmkGrKS22tLL222Jee74t\\/kddAqhlKp7C64bqWNYoFfxKv1pIUXGnULKLcr1vtu7NLZaDTjbjLjTz22aeJa2POTukZirOAhutSdOCjkryKjUzMApKSkKnpedcQDra2slSVhWRStO4R8rN4w4nz2sl69q6gKSoEyc2KccjqA6iqe3LKR9XJJQUaua9X66hESnfLm8l+lBbdF2VYpq60C6HZ3D2GGpd1dvRAen8QT02hNwMxVJgjXKgnUzCS8myZTlLzWGGBpcLM3PLSNL3S7Jdmo77flTfieEd8UTk4tB2390lo04bTGqHED55lKlcgCHXAtWZuKo1XWKVZ7NxYLjLY2TKm280jtymaL2i7a+q7SNHnAa31B5pxL1Pwnw+pbgfZCi06HpegMKXMIQlSku621GRGZjXDcmL5pGsbvxQNMzAUo3JeqpIqEyohKj851JoKDymiBvAcWhWrzg9GV3So0bqUp5+u6Q+DEq+hK3HETeKllLn3UMgoWESprbk9MrSRqFtlp10r8wI1+GsT\\/AO0GpbhSvB\\/k4VGoqzANupq0vKEJKbApTS8H1QrJsEhtLiAUqJz6BJ3A2G0GnXTP4ow7TMgupApsm1YJtv7eflcth+cUHLy1jeZTafhPaSmDR5HDu2jLqeMqqmytt0Yy6nApEzsDKoldkVh51MwUZa21O0z1zDl3E\\/DhnLWvu0la5Vqhq4KXMZZZbzsZpwp+tuC9UqGeqDkqI7VW0\\/8AQ2opd8r0grFf2WyC\\/mp2qV4KS7kUhs0KmVDbZZ5L2JXsd+1DeqoR8FUeVD0Hqcl8DGk1F9jVylqdh9ifMqeKtTNLE0uy2acvVCioq8tQkBCkhRdGoXHPLm27zwQKB5M1TbbNgC9KYvqaCCWrHPK0CmNhIBOZSvRAWgm2U51JwLsykwUze1CgN5QSUN1OgSxGUG9m1VB5RIAACQMxKSka6CSe7jHheyCV3tRFJQQDsXXX1ZghOSEsNuKcBUrMqSkp1c1bkErjj5jHrCWWCCu8pZWsTkZemVqb+rvOsJSmPlvcSQV5E8BnkCIxc9yt+hpJupbl7kvipoLeuZiQsOrttIUpS0lkipGnvlxIAWopZU1quJKHlLC0J+Te5ZLRLaDpbo2MkyWy4UbC0LeBfKArVLXlF6S6U7YgFG2LISCnaBog6rC\\/K98ryaQTT9gFElllKMhqFAxesJJWCStCsQ0xSroGUJzoKVnOolJDcNGibFGlWf2kIcFzfzepU1W4J3KbkZhPEHiFagagmJSD2kRhGjIoud97ziSGaDcA1Much6lsgZ8ABrcBnl50Jf2R2E3\\/AM35v\\/0JV\\/8AqcRXf+7U6LP\\/AJA4\\/wD\\/ACWw6\\/2qx849y2GAgdcDOFGLrjIWrZOOostp1bYUdmpbSLneS24pGRUhL7qW1eaHVgBYxh5T3lwPrJRsbwS0AE+gcP1xpA+qn0TM4\\/zKJtqApVieAygJXKbBmQM+PJteY2uiabdN9PrBihqy7wASBfW2oNpYLmkhhQhGsmtVF0jfqNUWqBZGY35vS7Schxz1geOQ3xRrSRwpcCiqsVBkpJOTtEqZ1ubP6Bl8EZ79ZRSrpyzOcT7\\/ALtngR\\/glxb9dnf0jg\\/7tngR\\/glxb9dnf0jj3\\/3lPLmzhX4pME5AP2r6FnuzJtvucelwHW9gsDu0MICNgVrfhxPE\\/pdo7m4afuFl48U8+RiWN\\/ZHYTf\\/ADfm\\/wD0JV\\/+pxe1pE4RulQXcr0vqjMKeoVfIJ6BsaY6rMZfhJAyIzzO4RNv+7Z4Ef4JcW\\/XZ39I4+k\\/7tTos\\/8AkDj\\/AP8AJbDr\\/arAfKd8uGXUhS9jmCXQb+gmgVt1JsB9fzbH+dAubi6k5tQL5VWWiU2DPBQRjycRbLquabaOu63b0NIVuN8oOW+ttIlaMY94STSlJbvFlGonWImKXXpRJB3eYqbpbKVHPilOsvn6DHJN4z4XPN5pvWjjeU5POPMLOR\\/FeYQvLMjI5FJ3b9wiKZL8stonOtNuLoGNMqtYKlS79oWsXWid2o4qWvp9gkcRsn1p4DWzEfWSfK56G80620\\/Xr9pyFpUpUxPWJUXGWiBrBK005+oTGus+aNmw4nWy1ylPnh9vyuvK\\/lUD6Q2BUGaUkLKjT6Bi5AJSRlKUIxJU16DTRau0P7XYXTChRdijygGNo6WwSkDt6jTgPS5qXIS48TYZPzolONYo4cvZhN92klQTrZOV6msJGWWZCnplpBUd2SQrW35gEZGG1Rawru3XVV2sP7lExLIacNSTblZ20mCVNtrM0mZDkuFK1kIVmySsZZkxGgp3KkaDtRS0XsZJilvOvlkS1Sw7xOQtJKghDjsxKWfOSDLSiQdo5OANDznktJSTH3tK5QbQyrBSJTSBspkre2AFURW6ElLgSlesV1ykU9LbIC06sw4US5XrILuslwIyGvLk29yOf6e8mapONgnWXksYU1sAHU9pM0OqNLSR9VQFtFG5B0dOB9mE6kJldqNBXmsQhyqUF862sC2mfZUFam6VJSQNCN4O+mqaNGjFdSnF1vR\\/wGuQuOtPPOVLCnD2sla229iw44qboMyS4hlOo0pRKkt5to8wx1FXuTk0G7jK\\/nDRkwul9oCCKDRn7WAzdDqtn9zU5SNkrPMJ2Yb1WwWctkA0NX9F0sNGSsBl+j6ROCzzxCnmWkYo2ZK1BrYOlBfXJzFZYn5fVdGshxxlrWCkuJKkLQs9425jJJVhSG7PxVlao4pSkNotu+Wp9eulszSkoRS6s6oqDQ8pWkb0oBePm+dCFf8AtBpNvMrF\\/k31CQKLhx5VYamtEkZs6Kpg6nFvLf0kl9YuLkpzEQk7D8PVDKJDFeHakXCChBp0i7mzgEFJZqMyV57gpIQM1xa++O47i5HPQBrwdVJYRVm15h1Trq3rbxKxGB2j7qXlFqUrtyV2nMBAC22mJeTal22nFJaYJ2BZ6JuXkGdEeqhblv31jpbEwSottt3JZtZpjaS64vJUvUbF+cnFBJQ03\\/uugBpvN3auFbo7lk8XcTZEAMXvcK8iQPLKg7UTvVrDNU+JlRGv+MfqgtjzPMj6mR0icWZPIOXAxPoSBkieo1IXqkax+vLScrMK18wcluqUnVGrqc+xkfLs8meplDdb2TYppS3LF12RoOFZllpZAJJfla9Tp1SL5gFNyqlrUQVNAXUnUznk2PqzKZRhh4bgAJuSWobtEsyakBXMlwc8xMa67m+T30d1LjtmaUFSk3BkWZO5cK5WpJeOTSVJdqVLvilKlylflDgWmkzGaVMtBobJyZXjTdfIGaT1PDj1pYp4I3MhveGalUL1tqoTHnNpyZZTZ9bkNbWU6VmYqkujZtg66nHAzG9eQ0qr7YVq1Gj2xPtBIzLcrUJKYUfMOZcRUX2UDVCvNEp5ritYeYgoP2tO0tmyoJq1kqCQkaz1PriXFZgoGqJaZpyMs8lkEznEIQAfOWJfIeUf5FeICA9WarheYeISBP0bGLAQQE2zLkGKzTWQbWKlrS3bVRBIVEQn\\/JvqzVyzQkuAAkqkK00b8bhE7NJUSOCUt\\/8AdOsRVLu5HvT9tRLrzGDcjdsmxntJq0L\\/ALDqCyCGlJLNLn7gpNdmCS4pGqxSnXAph7bajQbcdxQvXQ80qsPis3ho540UOXSSTUH8OLsmKP5rhZ1UVmRpkzSHFa4HmNzq16rjLu9p5ouzkadpS4ezQCZ+RuWlrAGanpKUmWSSkjzVyk868dQjLz5ZsDXQPOOvs\\/uabjjhXVCAxeEhLqyyKKnLz1LyVlwW5UJaWaUd4GaFrRxGeaFZTqmzvky4qKfwa23YaZfeylqTn8UUGWmNLZkop1WRS6iomxVY5lAXVqgpEQio7C63KBRNLxGwBe6zIefMpO8XclGUoy621c13ZjrHnVTUpMSb7srOSz8nNMLLbsvMsuMPsuDeUutPAONqAIOSk+iG8ejXW7ewexYlkSty0PDXEuUKNRuUrlNte8ZYNpUpWqlioMVFrUClqWEhsgKcOfXixffJiaB2IPlBrWjbYdKefDhD1jfPeHIZWolQcZYsOrW3IpLTm9tpUq5LEEMuMrZGyiWnYa7Py6ZvDuLqPV5Z1JWy8WlIYWFBKm8szIv1JtaSFC60gC3pJQQbCDzmzipSy1NonGc6TYom2H5NY4G6QJggg6WO\\/jaIG6k57xx5x0\\/b7+3ikpIIKSN3R0d2US+b\\/wCQT0TrjExMWJfGMGHU64o7GVFYoN22\\/LawBSnyCsUFmvu6pGYLl1HME8d2zwdxE+T34t09U07hXpAYe3agKLkrK31bVxWHMbLerYOTNBcxAZcmGwUNNvFiUYmF5OralE5NJjU7sex3IZslOl6ihNznkJ2XX6IF7pamVSswq+4JSyVXFraiNBMYPxBL3Ikg+kfnS7zLl9+5BWl089G\\/HXSI7i0FB6uY+OeEVJz3jj7\\/ALY2cYjckVp8YdCafdwSfvelsa5FTw7uW2rsL5QMz5NQpeqS12rIBBTnbqAr6jesd0YE3zhXibhjOmnYkYeXzYM8l5TCpO9bTrtrTXlA1iprYVyRkXS8A24rUSPqoKohk\\/h+u0gk1OkVOQCb+nNSMwy0rLlzZXVoS0tIzJupKynXQ6XjRTEjOyhtNSkzL7gO2YcbBvusVpAN+BBIPCOuIIUUniR2nv8AHv4pxqSM4uN46t8oxYSWnLeOHOOj7ISUnMZcCPGUOu2EVJyO7gfGUeoV36jd39fD1w6hV9Dv+I+fXOGpHEHsMIEEH3Hph4pOe8cff9sIqSDu9RjKSbjv4wuGa05HMDcePV9kfXWLiRiLhdWW7kwzvu8MPbgZLZTWrKuas2vVMmV7VptU\\/RJySmVtoVmQ0txTe8+aczHyxHEHsIhBQyOXq7Iy5aYeYcQ6w64y82czbrS1tuIPNK0KSpJ3i4INjHqVFJCkkhSSCCCQQRqCCLEEcwQY3B4IcuVpy4TmSp933BaWOdvypbaVJ4l2+21X0Soe2rolbvtJ63qq\\/PrSVttz9yC5w2hWqZZ1LTKG9xeBPyg3RjvcyFMxxsO\\/MD6w+tlmZrEghGJlhSw8xDk1MT9FlKbecukrJe8klrGqYZZ3mdfcT9LDqUnI7uB9kJLGYz5x7osyhbYMeUIoSmsKqksi37FrKPpBKrZQAZlakz4ACbAInEpFzpcC28k8R1aUKUom1vNjKA3M\\/l02FgBmWe0SOFkOJsN24R6VGD2klgFpAyCqlgri9h\\/iSy2x5TNSlr3JTp6s01slsj54t5LzdeorgS62NjWKfJvDaNHZ5LGfeceXjSaxV6BUpSs0CrVGiVmnPJmadVqRPTdNqcjMAFKX5OekXWJuVeAKgHWXW16p4xs\\/wC5ZrTuwMMlT57EtjGe1pTZNqt7GiRdu2bUy2kNuhq9Zabpd\\/eULZ1UsrnrmqMoy8ht3yB0F9qYuvD\\/lD0uYyM4jo0zT3CQlU3TVpnZa5AJW5LulmZZRe4ytqnFaDfc2lcnjRpYSmelFNnS7ssoOJuQLktOFKkgdy3FW3A6CJ58ER7tHz5Qho4XwmQo+kDYF44IV15xhh+46LniNh8nWcLT09Mv0yVkLzpjSvon0yMvalwhhvatOVJ0y7Tk3uwwkx5wXx6oQubBnFGx8S6OlLRmJi0Lip1XmKYt0BSZetU2XeVUqFOFJTryFXk5KcbzycYSMgbsoeLsNYkQldErMlPKKQsy6HeznEJIBu7JPhubbGu9bKRcEX0MSmUqkhPAeazTTiiL9nmyOjndpeVyw55bciRHcMEEESOM+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCOo8W8cMIcBrZXd+MeI9o4dW8kuoYnrqrUpTl1F9gNqdlKNILc+ca5UQlbbnzdR5WfnlBSS3L6uRLTz7Ms04\\/MOtMMNJK3XnnENNNoG9bjjhShCRvKlKAEJWtDaVOOLS22kXWtaglKRxKlKISB3kgR25DV55Euhbzy0NNNIU4444pLaEIbSSpa1EpSlKQkkknJPZmYjoaSnygrDW21z1A0WsNZ7EqqNqdZYxBxJRP2pZSXG1q2U3TrSlXGL0uGRfaAzbqs7YM42Vb23SFZ6BdIvT50sdKZyZlsXMXrhnbXmF5ow\\/ttwWlYTTaSvZNv2tQhJSVZdYDjrbE\\/cZrNVQhxxry8tnKKZxRt2wZQStimuO4knUnKEU0hEglV7WcqTiSytBG5cm3OJJtu1Ii8\\/i+mSuZEtnnnRcfkvQYBFrAvrBvfm024m19b6RL40jOVv0KtHhdQpLuI7eLF6SKXWxZ2D6Ja73G5tLeXk9RutuclrJpamX8mKhLO3A5WJIl5Jo7rrDzB0R6Q\\/L1aTGI3zhRcC7YtjAa3Xy+01WVBq\\/cRHpdaXWNp88VqRl7YpJmGVIeDVPtJ6o02ZCfJbgeLIfc0SJGQ6zx7oujnTEu3XHGIFOMSUy3h6RWCkM0nMiaKDb9sqTmabC+GaUVJpVpdHOET+LKrOFSEOiUaNwESpLaiOGZ7V4kcci20nflGlvvsRMUsSsXLhfurFO\\/rwxDuR8ulVZvK4arcU8226sOmWlXqpMzCpOSTkAxJSmwk5ZpDTUuy0yy02PhEJ5z6PHjvolOseocYWAzyAHUAIp+ZmX5l1x+YedmJh1WZ195xbrziiAMy3FlS1qIGqlKJ08IjSlKWoqUSpSjcqJJUSeJJ1JMXJSVnIenqHTDxKQgZD09Z6YohAQOknifHNC6E8FH0D493jPEJsL9GExVKct548w6O3x9l8EAGeQA6gBDJN9T+qCADPIAdQAhZKQB1858c0chSaPVa5UJWkUWmVCsVaec2MjTKVJTNQqE46QpWxlJOUadmX3CErXs2W1ryRnvAMbEMGuSi04cZhKzkthDNYdUGZU0Pn7FydasNloO7Ipdct2dbmb5eYDTm0MxI2pMtaiShLhfIYVsqZRKxWXC1SaZP1FQOVXmkq8+lBsCe0cQgttgZk3UtSUgEEkXAjIlpObnF9nKSr8yvS4ZaW4U33FWRKsotc5jZIsbkC5GuVtsr3ncnp6ez4w7AAGQ3ARJqwi5AG2ZQy0\\/jvjzWawv6NU1beFlClKFLNrABLaLuupNcfnGHHCEeZZ1LeDafonmnX9oztJwk5NbQnwZ8lftrAW0a7WZZA\\/74MQ2n8Raqt8K1xONovF2q0qmTSdXJt2i0ulpbyJabQpbxXZlJ2IYvqBQuouSFFZOpS+8JyaCSQLpZku1ZJt6VnJpojQGxKgmSymBa5NWVMCXkUGxs+52jtjbc2wHNeYcW2RY3tEKLDXAfGrGOZErhXhRiHiEvabJ1607RrlbkJUhWqVz1SkpJ2nU9pKskrmJ6aYYbX5q3QeOyLCrkTtNS\\/wDyeau6mWJg9THQl1a73uxiqVgy68svJ6NYzN1lM0EHXMpWJ2jrQAUvOMvJ2US46jf+G9lSzdPmbht+ksU9ltiXo9NUy65Jy8unUalWKPSm3nWGkJSG2WkyrTaUIISMkb+o67pT2lJ7RFCotYrbqc0pdmSxSJNauYocWZycI5iFyKDuAGe8jArp8nfZtmO0LaxSFzsv+30mUqUu5PAotnCqFRE1avAkoWgFISTcoALgBFm0HYbVap2am5Cs1AKtZ1EumnSS78POJr8mRqD6Myk\\/nHQ2jU5hfyA+EVGMrNYv4233ez6Al2Ypdj0Wi2JTVO5pPk7k5VVXpUpqUSSptbzJpMw+PpkeR\\/VGxDDHky9BzCgy71C0frQuGos7NSqpiKajiRMvPt\\/VmvIrznazRJOYBCHAKXSZBlp1O1ZZQ6d7CtaT1\\/VHWRSJai2+yoHUcalV1GdSVpy1g9UFuSi9TdqDyFPOVlYyEdJXZixcjslNVO8b8nJKlMJUubfqdbTSKLLoJyKn0F+TpjCd4AWUI3ZJz3ZGo6x5bPk5YSX5vgLZ3XMYzyFJTLzbtNlaZKPE5EI7Ko112frqVr0NvoZKiVAm6iQLjo3k6vS6Q9ON0OlNoTnWt8uVSbZAAUpZLgLKQkXJUmcFtRdKbRswbqmGOGtNaoknM2VZNMlAoMUOmJpNElmSrVK\\/JqNTksBOZA1y1KZ7hmMgMvgqxpKYY0vaIlJuq11balI1aVTHUNrXnqq1ZiqLpza0BQzLiC4hSDrtB0FBVoiv7lAtDnDZTzNdx5supTjOsDI2U5P4gvl5OsDLKdsqRrkpLPhaNRaJ2blUy6\\/NmlskExhHfnLZYGUcPs4e4W4kXvMtFYbdrszQrHo8ysK81TM63NXbVwwsb9eYoDL43pMsBviMzXldeVNjYFvZzsTkMNyLwAl56syFVn1pQpFkKl6rV38MUNzKSTnXT3W02QChKfr7x3D2x\\/DQy4gx5LzTrAsuVp0zLqKSgpuhUjS2qnPNngEdogkXte1xJoq2lm7rKRQ7PQhIGYfqtV11HozlJOVBQEneT5asqyO5OrrR1hU9JDFGohQlp+l0VKs9b5rpUstWod2oldVVU3EjnCg4Hc+CwMhERe9+Wp0hqyXWLHw\\/wwseUd19nMT0rXburUv\\/AL3s52Yq1Io6igZ65ftx4LUUlIbIUlWIl3coFpqYjuhicx0vuTUrXDUrYTNPsVxCFk+YlyxabQ554ozAQ\\/MPzD6f99194jU7TPLdx0FLxNtfZwdKLCs8rRaizQ5lhC8l20HBNKlkuJQEJSVPVgrylZ7RedZVqHtqWw+hC1JwrUK66nKUvTEmlyWWUnVS1VucLrdwcwCJEjd6KSNJp9zYrXUqUfqF03\\/VJWly7ec0\\/UbgXTKSwjNWbj6VTMrItZEj6VYB1dUZZZRiJemmboq2Kp5V0aQOF7c0hbvlMpS7sp901VpxIKnPKaZbLtaqjTpO8Jelgt05pQlSt0Q7qlScYL\\/m0T9yLvG4p0ghM9d1XnZiZCSolShMXDO7YJJKlDzjtAdZGtrb+SkcELrmNVU3N0mQSrihUw\\/MPpOY\\/AYl1MHdnmfKd54dKYk95K8pVH0zu0TbRX8TTRUVuhAL00gmwWEztWqddeUVkek4qVRewui6bxoZzyo\\/M0Kaw7g2iUtsCyfOJ1cwnS1iqWp0rTCkW\\/MDyrcFm2WJLl28rnoa22txuk3Bfd+FkE69pWLUZZDyw3tNm0u9X7OCiHB5OVK1GFr89twy5DxxoujlwLElVOJsrAK7a4jNQaeua9aNaiuLZStxilUa8wTvdJQH92ohIc+lUtrTXJYCSacjUbimnuOaJKRalchkQAHH35zPI+drbJOsPNyTxj6yTwYseV1dtLVCoav\\/ANeVB5Gtu4qEgJFPXkAB6CREip\\/k6bAKSEiZk8S4lKQLmfq82znKRvP0WigpuTqQnKm9tBreBVLym9oU2VGWqFMpnpFQTTqMw4E3N8qTVjUCbXsCok6m6tNM3bl5bPHmdLqbSwpwooDTiSltVcN23NNS4IWNoh2Tr1ryy3Uazamy5JLZ1kHXZcQrUT0DX+Vd02K+4tNNxAt+1UvkpTLW5h7aD2qlRcGyZcuSk3FNo81YShSH9ukNoUl3XClq+Lk7Ds6Ty8mtqkKKd4XMSbc4pKgUkKSucD60qBAIUFAjdqnzjH00tISsojUlZaWlU5ZBEuw2ykDccghpKBlmBmCeiJnJYF2L0i30fsqw9MZbBKqtLM1JRy2sVGqJqhUdLkkkk21vrEFnttO0SoX7TFmIUg6nzSoKpY1sd1NEum2twANNQALmOsappdacN5KWt3GvG\\/J05lVt1mt2wyM1Nr81VrIpDLKc2kAahQkJK2xkl11CutqpM6R94qLtw3TiTX1n8O5r5qs2s5LW+nW+eq4pw6rj7iwMs9ot0pG0LmeUQQOff7PHriuqkcw9O\\/3xK5SpUamW+hsIYYpQTbJ5pS5VjKBbd5ozKgbuAFhpuiHzmLsQVC\\/ntTqE4DYkTtRnZu50uT2rxBJtqeO7vjDuXwWvZ7LaN0uUzz\\/8In9YjJRG\\/wAlZmebzt2fmj8bdHNsYD3ArIzFYo7XDMS6J2ZGetwG0l5YqyTv\\/BzO7L8KMq4rkeg+oxmrxhWV\\/VVLNf2jAP8ArFORpzUJo\\/noGvBHeLfWKuXtMY1tYAKzBmLn3b80MUYgkcxDjlTPA8QWz+LrDLOOUZwEo6cvKK3VHd28ssyrGas96slomDkd\\/m5nI\\/hxkBkeg+oxXUV0e0d8Yi8UVtehnyP7RmWRy4pZB48+PhCDPTR3vHlolA5DgkH179fCOkGsDLTbyK5u4Hjq5EKmpFCdbdmoBumpUCMjkNdQAPnayglUPW8F7JbCddipu6pGZcqC07QBWeqrZNsjIgZHUCDlvSrW86O4cj0H1GDI9B9RjHVXqwvfUprn6LpR\\/wD0y84bMzM\\/vh0aj863Efo28Lbu6OqkYRWElQKqQ84Mj5i6nUwnPmJLc22vpy87Lm6iunCiwEKChb6SRvGtUqwtJPWhdRUgjqUCOEdmxbqpPN8PdDRq9VO+pz\\/LSbmAPYHAIQXpn98veHauC\\/jZWunHodefqYWH\\/wCTssP\\/AL5n\\/jNGLThfYvNb8t6Zie9\\/lXwjsQoHMcvbFuoR1+\\/t5hCRVamP\\/wDIz3rm3+7\\/ALTuH2Qnt5of1Z0\\/\\/wAizy779GOujhjYw427Lf5xPf8AW4p+plYv\\/k9Lf5xPf9ajsMgjiMvHN0xQpB4j088KFWqXGfnvVNv93\\/ad3uEAmn\\/znXfU4v4FUdbKwpsJWavmEZqO8Cp1kDMnMgJTUQAOgZAA8BDdWEdiKUSKS8gE7kpqVSKU7huzXNLUeH4SjvPr7OKOg+v7IsII4iHU1ep8KlPcrGbfPuLh9ohYmXjufd8O0Xfh334bxHUy8GbLWCEoqbRzz1kTxJGXEAOsuJyPWknryjj3sELWVrKZnq60TuSkTMi42nLnKV04uKB5xtBvO7zY7ogh9Ncq6d1QmT\\/bOFf\\/APa\\/XiYcE3Mj+ruetRI0tz0+evfHQjuBtJVrbGu1FvMZJ2svLPZEHfmEeT5g5bgNXLpMcU\\/gU4MzL3Kle\\/6r1JKCE7\\/w0VFesc\\/\\/ALGN3QMs8jlJB6j09\\/TCRSR2cxjIRiWtI\\/66pQ5LZl1e9TRPvhYnppO50+tKDutzTfhHR9JtnGG11IXaeKFaoamtUNqpV0XRQVNDYlgpbNNdzQEy6iwMuLBU2cknI9pUnHjTotZSF0vSExOqAby1U1LESrXG0AFtOAFi7JidZLYLKM0Kb1EoUtoJ2TryV82Ug9R8cYSIIORjEm5qSql\\/pWhYdq1xZQqVEkJu4Nrj8o1qD0Oe1ksU4gp39A1Wek9b2lZuZlhcAAH8g83qANDvjsGjcohyhtshtE5ektczDAASxWbHw9qKlJ1NyHJqg0iQqUwfO19o7OOPhYCVLKUqbHclD5Y3SloYbReeDuHFZZa3rmJah3vbM6+2FKUVLmHLgq8gFgJUErYpzbYQkeYspUpWKTjWe9O49HMe4+yG5BB38efPj6Yic\\/gHZZVf3Q2YYOBJJUql04URaid6s9LMsvMd5VmuSb3vrEyp+2PaTIW7DGFdWAAAiaqMxPJSE2sEpqC5xISLWsE2tpbhGym2eXAtl4ts3to+V+kKR5kxM2xfchXVLUlKApxun1a3LbLGa9sBLLqDykBKAZhaiooyVtXlgtD64VtorM1iTYm0KA47dFkmeaZ1nS2pSvuJqt3vrbQkbc6jKlqY+qgzP62GjeYkpObGU3KS00Mssphhp4apz3ZOoVu847uG89MfPzVkWlOZ7agU1JPEy7Akyc8sznJlg5nLjnnmSfwlZwuoeTxsQqYPZYexBQSoG6qNiOZmSlRIOZCa4mpITY6gFOXcLWAib07ymdpckU+dTkhVAnKcs\\/S5IXAIuCqnJpi1A21ObPxzjWJQtoacmiLfBbFC0hMNGlupCm2LkrqbKmHCpZbS03KXm3QZhb6lJ82XQyZhQ1F6mqpK15hWji3V5uVaqlk4jzVTpoWQiboF0mqUpw6mqQfI5yZkH8k79VYWAUo83dEJOawltGYz2LdQkM9bLyWeUsDMkj\\/w1E2SADlkVcBznzo4uTw1q9uTianaN7Vy355ojYzci7MyM4g+cBlPUydkn0eapQBSlXPuTrebFE+TDR6XMKnMDbV8X4SnAptbTsxJqcfztEqaC56hT1GcQUKOZDiWV5CSoN3JMTqS8qt6ZSlrEeDaPUW1ApWmWmH5RHpaEpanGKuki1roU6M1gM6dxnu0rSLxSphCXqxJ1hCdyW6tTJNW7d9Z6nop8yeBOup9ShrZAjzcuzaTpZVBAbTXbPk5jMJDz9Jqb0lqk\\/WLcpOS89rAk+YhU4nIH65yyiCZaukvpzYcFtVraQ94VZmXRsmZW6K0m92UsgAJaEniFT6\\/JNoShIQyhK8mE+a0pCRuyXtHlaNMO0NgxfmHdg4hSjeqZqbTQqhRK2+EpyURULWqztCYCx5y1C2nEjikIG6JXT5LyxsF5FYR25y2K5dq3ZSdcq6avOuISb9kqXxxTJ9htKgMgLdSS4gEJStoJQqJFLbXthteIRV8JzlFdXcqdlpVlDCSQPSz0idl5lSgSbgyJBIBOa5ETa6RpN4a1AAVH57oLmWSlztOVNspUAclNrpTs++tIz4qlmlHIkNkkKjsdq7sM76knqOqt2lcUnPthmaotRep80idaK0qDczSKkdaYa1w2Sh2VcbCxrblZZw9rK5bXCyaW3L4m4K4g2bMeahxdrVaiXnLoVwLzjVXFizjLRWCpSWmpx1tO5HlChGadgcpBoY4hGXakca6DbVQfCNpIX\\/J1Wxkyql79SYq9xSEjbZUnLJbktWphhJz+lyyiaSXlYeVnghARtA2NUzFUkyAX52j02oMTK2wLuLeqeHp3EFEaQoZcixSm20kKzBd0pTu2aNsZxJ+4OO2pB526W5aozTLCVFVglKJSrsU6bdUbkFAfWpQ3WFydy+J\\/JvaDuLiZg3To34cSM5MoOtVLEpz2G1UDytYonVzlgTNtKnJlC1JcK6imdaf1AzNsvsZsxrixS+T8aPdwh+awlxhxMw1nn1qWmSuaRoeI9vy\\/HVak5VAsquIa3fXnbjqThzzBB+iPeti4uTU7T2axhziMmqUXIJZnbWuZqsUV3NKVpQlVOnJumvAoWhaUK1gAUlPNn33Q9JfEellpFSNJuFpJyWahIJlZpaMyQBMU1Uk2lxO5JW5KvqWAVr11+eZNR\\/Ll2BYmcErtE2Z17CNQWQiZmZeRkazLMKJCVpeqFOVR69dKnHFhKKQtXoEgJdUhs6qr+TyuaR28gugVdpxOZDjYXTZl4EXSpDjPaMKBAAzKnRYmwJTcxHmxY5CDTHsnyibw7qOGuMlORrqlZWh3GbPuZ1Kc\\/8Awil3uxR6Cwte7ZtS12z3nZgndmvWPivotaRuB23Vi5gliXYckw4W1VquWnVmrbcWFBChK3SxLP25O6qlJBMnVH962d+ToidhRNKy35nUauC3KrSlE5KmKbMMVWWHOXFtvJpsw2jh5raJlxPDz8847kouLGG10tpl5G6KQpybBaVIVVwU197XSpKpcytTRLl85FSS3L7ZDgB2alo43FQKx5Nu0jsxgXavR5Wfft2FLn6imRnFKUUhCGaJiVulVp9QUtCDkWsC4BNyFGoK9sOrFLzLcplZkUpuS6llNUkkAHQl6WK0pFgfrzN8uukebWRkcoRWnLeOB98egpi7yemhbjn5TM35o+4euVGdZXr3HadOcsK4HXHgpaJ16t2NMUCcqUw2pQW2qpPVBleQQ+y80CydVGMfyezCispmpzArG+8rHnChx5mgYi0imXzRHX\\/P1ZRis0UWnWKTJk7PKYmpS5ppsod3Oh9Ox31T2K4okruU2Yp9ZatdKWnfM5lQ3g9lNESwukgjLOLNzlF95rObwRWJcFTHm86kcGnOydsN90PhCb7yEpcWTaw1IBieLGe8cR7vshFQ1hlzjh3enxnG2DGfkZdO3CFM5PU\\/DqlYw0GUJJq+EVeauGbcaVqlrUtKsS9AveaeIOTrdOtuossLafBe2Iaed1i3VZ922LWpm3L1ta4rPuCS\\/wDDKFdVEqVArUnmSMpil1eVk55je2tOTrKc9QjKK6qVBrVFXlqtMnqeb2SuYlnUMuHT9qfy9i6NQLtrWm+hIMRmZkpySVlm5V+XN7DtmlthW\\/6qlABQNjYpJBAJBj5EjMEEdRhAjLcYeLHP6\\/Hj2wgtOYz5x7o14NxfoRjd3s8fv+wQ0UnI9R4QitP4XoPw8d0OyMwR0wgRxB7DCgbEH2+EOpNx3jrr2w1UMx1jf9kfQWpeF22JXZK6LHui47MualuF2mXHalcqdu12nu5EbSRrFHmZSflHMhkVS8y1u4GOCUMiR6uyEFjI7uB8EePRGU06tpaHWlLbcQQtC0KKFoUDcKSpNlJUDqFJIIOt4UCQQQSCCCCDYgjUEEbiDxEbqtHPl3dMvBpUjSsTn7e0irRllNtrlr5YRQL4Zk0L1ltU\\/EC3pRDz8y79IFT93UG8ZlIcAB2LLTY36aN3LfaFOOnzfR7xuSpaPl6TIaaco+KjbLFqPTbiloUmmYi0zbW2iTZBb15u6hZz7m1yZlHEtOEQX4ItfDu2LGlCDbbk+K1Jpygy1YzTLiUjeG51KkToVbRPavvNJFrNHjvpLElVksqe385aTp2czd3TQWS5cOpsNEgLyj9EgWj1FqRWqPcdJka5b9WptcotVlWpyl1mjz8pVKVUpN0a7M3JVCTcflZyVeR5zUzLuracSBqqjmo81vALS+0l9F2pIqeBWMN4WI15V5ZN27KzyapZlVfzyWusWRW2qjatUdWjzBMzlIdmmk57F9l36QSANGP5RaP9zrd0t8IzvWhh7EzBw7g2UIaRMVnDyv1DNSg8nyioz9Duo\\/QuO\\/Ntrl1lqWmL8w3tywrWOzYq6X8PTa7C80fOacpVhoieZQlTYNySqal5dpKQPypMS+RxbITACJpC5JzQFRu6wSbAWcSM6bnU52wlN9VkC4lSQRjdgBpZ6OWlLRfnvAfF20cQENy7c1UKLT53yG7qG04U6puCyqw3Trroba3NdpDlTo0ozMrQ4JV54JJjJGLjlpqWnWW5mTmGJqWdTmamJZ1t9lxPNDrSlIWO9KiIlDbrTyEuMuIdbVqlba0rQocwpJKT6jBBBBD8LgggggggggggggggggggggggggggggggggggggggggggggggggggggggggjXHpYcqRojaJLVUpN1X41f2JUgt+XThXhm5JXNdLFQaStJlbmm25tm37P2LxaTNtXFVZOrol3dtTqJU3GS0NfU6tTKLKLnqtPytOlG75pibeQy3msSEIK1AuOKAORpsKcWRZCSbAsTE1LyjZdmXm2Gx+c4oJueSRvUo8EpBUToAY2ORhnpMae+ivolykwMYMU6PK3U2wp6Vw5tlabnxEn1Flt9hr7lqWtcxR0TjbqFylRuZ+g0V5JIFUSRuioaVvLc6WGP4qlt4YzjWjnhzPIclfm6xqg7NYgz8moq\\/wDktiS7LSNVk3lA5n7jZG0yG\\/1tMPT7Rdcd08Tc5O1Kcm6pU5ybqFRn5h6cnp6dmHpudnJqYcLz81Nzcwp1+YmH3lKdefecU646vXcVnHPmK\\/KEp8qXJXCNPNSeF0pqdSS5LySVa+kzJpKJuYTYaKeXJWP5jibXhVRxq2nM3TGC4dR5xMApb8UMghahxBcU2QRq2REgfSg5frGu\\/jU7a0ZLNkMFrZeccYl73uVMhd2Jc5K5OI8pl6e+y\\/ZtpuTDTqQ9KIlrunJN5pLshcLK8wnRhf8AiTiFivc07eWJ17XTf111FRM5cF3VyoV2qOIU444JdE1Un33GJNkuqTKyLBalJJv6KWYZZGzHwqBz+rx454XQMzmeA9\\/j4c0c1YkxriXFbpdrtWmptsKK25QKDMiyb+j2MkyG5dBSPRDnZl5SQntHVkXMJnalPVBeecmXHrElKCcrSL\\/oNJytpNtCQnMRa5MXpGQ6zv8AsMLITzn0d8WAZkD19kL8Ihq1H1n3DrT7Y1y1WFhvPugioGZyHPFIVQMhnzn3QkegnvPDrlx7\\/GGouAyGXgw7aRqjWPE8OofbzxfIyc1UJtiTkpV+dm5p5tiVlJVl2YmpqYcUltlhhhkOPPPOLUlLbTaFLWrpGUbM9H7kkdNHHkSNScw+RhHaM4thX3T4vvTVpurlXNVS35G0Uyk7es6pcsoPyLjtvydMnS4yfnZpl3atbCm0WrVl\\/wA3pVPm6g7pm83YWtDd7HM87bsmU6j03loTcgE3IvkyslNzznZSks\\/Muaeiy2py1zYFZSCEJ\\/jKISOJA1jWilOZ38B7+jx8Y+ltWz7svqtylt2Pa9x3lcU6QmToNrUOpXDWpsgpSBKUykS03PTHnOtoAaYWddaRvJAiWFgJyEOjfYgp9Wxvu27cb66yUuTFFlnHMP7BU4pOapddOoc6\\/d0+Jd4+ZMm8JFidS0DN0dhp92UG22x8M8DNHi3l0vD+y8OsJrfATt0UCkUS2BUFtgJS7PzUuzLzdYnlDVzmJ5+cnHVrzUtxYBNn0\\/Y5UG5dyo4rrNNw7TmGu2mVLeafXLtJCVLVMzC3GafKoSN7pmn0JsbpKRE2pez2rTzjaZhaJcuEBMuykzk2tRt6CW2j2VzewKXVqBBJbNrGI9gfyLumbiwmVqF3UG3cD7efzc8sxHq2tcTrGQ86Us+3G6xV5eaLhyErcq7ZWUIdc2mRYD24PBDkJtGOxRKVDGG671xtrLWSpmniYOHlkukAEtikW9OTV0q1VgoUtV77B9BH6zZ3xs1uXSUsukbZmhSs\\/c0ygrTrtD5tpqlJOqQZuaaXMqTmCULZkHmXE70OnIR0HcmkRiBWi41TXpS2pQq3IpjCXJtSBuKXahN+UOa2tn58oxJ5HIZEa+0rvEe3fyU9lxdaTVXdo9bllEGVobQxE0V2G+eWqQwipGdNldnNvzDdzdtQAEXlhnyfqnNdm67SSwhVj51X3eyG9JNqe2gu2N7pDsoQR6Jc+sYycw9wZwD0eKKZbDjD3DjCmlpZ2E1OUajUWgTU8hGStarV1TbdTrD4AJ29VnpuaXqjN4gGGtwaROHdF125GbnbimkZgN0qVUJULyGWtOzplpdbYG5Tkr5YQTqoQrflqmxi0kcJ8LAuq41Yv2xbM2tlc00xdl0MOXDUGcwSqm0NcxMXBVwScy1TJCaUQScst41dYs8tJo92mJuSwos69MWai0t1EvUZppNg2nMgD6N9uerEtO3QrNWStlM2fJrUgAF1ClZJquc8sLbnj9HmGxLY9L0SlquzL1urMv1VDaQSkOMzTiaFhiQdBsoMTKqm2kIVqsnMLJdwbs0wUgJxfjCUQ6yATSpBTUs4kEA5fMJQTlTcRvAW01L3O8J3GRbcGlFdc6HG7fpFLobR1gl+aK6vPJT+CtKlCUkmyRnrIclHtXcCvPOMfb1xarjtOnqtfl+LkaFLtqVUZmsVmWolvSzaiElc2hTkhRpdBJCFLcaQklWzzI3REjxV5X3Szv4zEpZ85aOEVIcC2kN2hQm6pXVMOKOQmq9dhrakzQSdQTlGkKGsDz0Ntr86MALpvXGLGmqCp3pdd\\/YlVNK1qROXLWq1cglNYBBQy9UpmYYp7IQAhDTRlmEJ1WkJQkJREJqOyzykNqAU9tc20TVMpj\\/pTNEps4+7KZCU5mn6LSDQcMtqIBSl1C50JCipSV3UhWim9t2zbDIUjB2DFz8w3oioVAMyKL29FxE1Mio1NxKTYqQ4iVKiCApOixLQxO5SnQ1wuE1LzeLdNvSsSpIFGw1k5u9lzK8s1pYrlMR9yKVIJ1VJm7jllA6yfrpVq69MSuXEpzZmJXB3AucmCSoSdexKuGXktRIJCfKLTtZuoFxSgdYlq9Gg3qlJDuuFt6SaVgzdM5qrqLsjSGjkVJde8smgkniGZXXYO4kkKm2iNyTzlPZdKwStyVCV1OcqFVWMs0BSZCWX\\/wDcmNeYTmecTm4fxoz6J5N+w\\/DQQ5VV1fGE2iylCdn3W5RTgy6tS9HTTmS3cXDM1NzYNyFqcG6sq\\/5SmOaiVokZunUNlVwEUqRRMPlGosuaqJnBnIOrkumWOgKAjW\\/dWJHKm6ZuIiphpjEWQw7pkwV50rDe3abQgyFBQSJau1IVu72EtpUpKA3cg+sFr13UNqRh\\/XKljFivPiq3XWb+v2fWpTgq121mtVtYU5mpZFSr82+lO0J1iA\\/5wV0Zxk9S7TtujanzZRKdLOIy1XhLIdmgBwzm3w5NK5zmp4nPM9UfTJRlvPH3fb464talOYRwsgN4QwXQqJlTkD8tT5OUmFiwF3nJVlMw8ojRS3Ztxaha6jFNVrHWIa+sqq1WqtVJVmAqVQmZltBvcBthbimmkgk5UtBCU\\/mgRifTMEbqmwlVQfptKQQCpDjy5yZSegNyiVy6st+f68Tv1ctbztX7+nYE0NgpVU6vUqgpORKJZuXp7KjwyUFJnXtUfuH0Kz87PmV3pBD8ximtTFwJkS6T+bLtoR7FqC3R6nO\\/fEYXPzS72cyC+5CQPYTdX\\/mtePh6dhtZFM1Szb8m+4nLNyf2lRKiPwiidcfZBPQhtCeqPspaUlZRGyk5ZiVaHBqWZbYQOOWSG0pSBluO45Z88OQgnju98KAAbhGimJ2ZmDd+ZemFXvd11xwX\\/wC+o+oDdGEt5a\\/rOLcVzUpSuX6RO\\/kDpFgR0+r7YUi4IJ47u3j6v0QqEgcOPTz+uMQknfCMqlaqNu7rd69YSCCert7oUCAOvt7oUCSerti8IA47+3u\\/TCCoDf7OMKCQOFz9\\/s+3lCQB5h6hF+orqHjqzhWCEFw8APXr8o9JA3kd0WbMc5Pu74u1UjmHv98VghJUo8T8PhCStPefV87QQQQR5Hnad3v9sEEVyPQfUYMj0H1GCPO0PIddHoa0giuR6D6jFII97Q8uur9bzIHiM4pqpPMPd7orBBcjcSIO0HEH4\\/KLNmOYn390WlBHDI+Ovd7YVghQWod\\/jCgoHcfV17NIbkHnHrEWlAPV2d0OosKBzbvbCwscdPh11ePSAd4B8YaFBHX2d0W5A8RnDopI6+yLCkHjx6ef1wsG+oMJKOINuue\\/4w0Ujo9X2xYQRxEOSgjhv9\\/q\\/TFhAO4wsLI36j39eMeZlJ0UPn6juMIQRepBHDePbFkOAgi4hYIIBG7l1yhIoy+rw6O6EyAdxHeIcxapIO\\/gfHGPY9hmpJT2dPf0QitsL38Fcx74eEZbj+n7ISUnLeOHu8eOt1K76Hfw7\\/vgBtqI40ggkKGR58\\/G\\/wBEUh6tAWOvmPjmhmpJSSDDgJB+I5w7cLFjoetfDu\\/XFICM9xggh4EEXENkEGxhm43qHMfVPDq6vthFSc+0eMo5EgEZHeDDNaCg9IPA+OeHkKvod\\/DvhxCr6Hfw7446ZlZWbRs5qXYmWx\\/e5hlt5Ge7PzHUqA6zlvPs+VnrBtOe1tpR5eXWreFySnZMpJ50ty7iGDx3BTSkjmGUfaLTzj0+PHenGSzMzLBBZfeZI\\/rbi0XOh\\/NKQRz0sfdDqVrR9Vak\\/wBqoj4GOuKbZVTtSoprFiXrdVnVVrezUqPUpqRnmSMzqtTtImKZONp5wdsojrjKKx9NzTvwu2SKbjEvESlMlBXSsQZWm3Y7Nho+aJis12VbudvMFSFiVutgvJOTi1KQ0pHUZGYy6e\\/j6OMIkEbj+nrhiqSlKxE12OI6HQsRNhOUJrdIkKipA0sWnX2C+yob0rbdQpB1QpKtY39IxZiSgudpRq3U6au+YmRnZmUzHjn83da7QEeipK8yVJJBBBjZhYfLSXnSA1K43aPLD6AU+U3BhzWp6lsMjg4Ze3rkZrbEyVZ5oBvOWS3kEq2oc2iM8sMeVL0NMSthLv4hTuG1UmnEIbpWJtCmLeCCvIa79fp663Zsq2gq1FrmLma1SFrI2Sdcx0nUap1hwJ9R9EfO1C26HUgpU5SpJ1Zz1nQyGX1c5JmGNm8SOP7J64qKu+Txsir2dTFGquFplZKu3w7VnXGC4dxNOrKalLoauNWpZcqCLhKkE5ouGg+UntFpJQiemJGusJsMlTkmw5k4gTEiZGYUvW6XH3XyDa4UkZYmxYeYwCoU1iuYX4kylZoK1rSzUbPueTrtBecOTqk69LnZ2lTGYcDgQ4HQkrDhAKgDkfQNJy+KaEt1yTpdxsAJCnFtGlz6sswf1xIpVIoz4qHzao555jMZHz\\/KFQqzZdVauDDi97ww\\/rzCkql6tbNbqFLnGC2SUFmcpkzT6gnI55frw7ubcSczcOeUV04sLFyzM7eNu4zUKWAbFKv+kS0xUSwElCya\\/Sl27cj81kdo27UK5VztW0azLyStp3TUrZntw2bFLmx\\/bhPtSbAC2qBWJidpsnZKUpQ0mlTpruFpt1KUpQlcyzJt5RYBCQlJtCS2\\/wCzrE1m8aYLMo+5ZK5+RDE6QTbM4t+1OqEu3qSUsOzaxYfXJ9GdPb+ktYNW2bVXRVLbmFEJKpyW8tkApRVlqTVPDr+QI891+Sl2k6wIVqBa0fX3VZOCOPtC+ab2tLDTF638lE065qFbt5SUqt3IFbctVJWfMhNp3lC0NsTTS0BaFNusjOJLhpy0eGc4uVp+OOEV74bT7hQyqtWy4xelu62f0k3MMTSLerklL6u8MU+SuJ5J8wLXnrDZtg5pZYAYyTEq9g\\/jNaVfrLiS9LUqRrDtAvFtsjNTqbWrKKPdcslBJ13HKa0lJ81Z1gM7KkPK88ojZ2gS+2LZPJYrorYyTNdpLK6WVtEpC3X6pS0VzC7voXWmXTJU0OJCkLW16S0SdjDGyrGqbYRxjLMzD4GSlzy0OrUokZW0U+o+ZVJQvopYVMpGihmBTn7Vxz5CnQ2xMROz+GpvPAa4ZgOusLtSrP3TaPlLyf2WetS8H6hNmWQfPbkqFc9tS7WWzaDbWqgaZ8eeQe0vsMfLKphTP2bj\\/bsuHHGWrenW7Mvcy7JOu9M2pdc23SlOKZycZk6JeFfn317VlqWce2HlEiW3MfcR7fKG3qm1cEokozlq8z5W4EgnW1aiyuXqBcUncC\\/MPoSsBws\\/XC+\\/ba0obXnw0xc1Jn6A8QAqblcqtTxkM9dZbSzUG8xvDbclNFOWRJzCjbGGfKR8lbaYptmoTc1s2rUxZOSuS30LKhy6UrUKrIrn8MJReyw9UVybi0nMptKu0SiA4k8n+py\\/aOs0tqbQNfOKC8A6BvSDTnUIUVH85LMq7Y6BZuDHnu4j4VYmYRV9y18U8P7yw7uBsu\\/7j3pbVXtuoOJaKEuOyzFWk5RU1KnWbWzNyoelZhp5p5p11l5pSuvVjn6ePwj0sa3SMHsd7Xmrduei2Jijas4P17btzUikXPTVHVKAubotZlZoSswhDig2p6Vbeb1wUKTmBGqLSB5CbQ7xWE3U8LXLr0fLmmC84lVqzjl1WS7NOKBcenLNuiddmWW0ZZy8nbVz2xJM63\\/g+9OpbEzsmXUZNqrYNxDS8SUyZQHZV1qYYUh9uwF5aflHJinzYJtZztZZFtCbp9Kjans\\/qsg642wrtHGiQuVmm1SU2g\\/oFDv5PMBa5Wpm51yxCkWMxnzj3QioZgj1ePZG47SF5EbTSwWRO1izKDR8frUlQt4T2GMw8u6m5VAcIM1YNYRJVyanDswBI2qu61kvNaql5PbLUdcVt3DaNaqFu3VQqzbNwUp4y1ToVw0ydotZpswkDWl5+mVFmWnZJ9I+s1MsNuAZgjprip0Gs0NzsatTZuRVmKUKfaIZcI1IamEFbD3E3adWLa3iHzUnNySw3Nyz0uo3y9qgpSu1j6C7ZHBr9ZClDQ6x83BF6xkc+nx9vpiyNcg2NuB3eMY0EMnE6qyOY7x2H7c4ewk8nWRmOKd\\/Xlz\\/AAJ7IdhSTY+OkObfuW5LNrlOue0bgrdq3HSJhE7Sbgtuq1ChVqlzbZGpNU6q0uYlp+RmknLVflX2nATmDnvjdnot8vjpX4L\\/ADbb+N8pTNJGxpZbDLk1cDzVtYnSMmkto1pS9aZIvyldW0navuKu2hVmq1F9SGl3HJNALRo1cTrJI5+I7Rw9fCGUSSgYpr+G3u3otUmpFRUlTrTbmaVfI3ecSjgXLP6XA7VpZSCcpSbGMuWnZuQcC5WYcZJ35Feiq36bZuhduAWlQ3er0LtFLlVdDXS4NMo1l4kNWRiNUVssIwsxR8ls+75iefSNnJ0B5+dmbcu59xxLgalrXrlWqQbb205TpLaNJjZFHlU+che4lKkncQSCCOBBBz6++NpeiXyw+mZop\\/NtARegxlwzkGmZJGHuLb9QuBun06X81DFrXYJpF1275MwSxT5MVGo25JN7EKtx9tptpPQ2F9vDTvZy2Kqf2KjYfSdMSpbWthmmJFxSnUD85a5Z125NkSqEiJlIYu+qioM34ecS49hWyTrzUptY\\/itcI9AuCNPGiRy12h1pPOUm2bmuB3R+xSqCWmfuPxRnJKWtuoVB0EeTWviSlMpbdUStamWJOXrzdpVypzToZkaDMEb9wiFodQlaFJWhaUrCkKCklKhmCCNxSRwPBQ6QYvqk1qlVyWE5SJ+Wn5c2BXLupWW1EBWR5vRxhwA6tPIbcTxSImMtNy0432sq828jS5QdUk7gtBsttRt9VaUq7ovgggjaRkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRH65ejS9uTBvCfD3AXDS7qta97YvT9Qr921K3KtUKPW5HDO3m1U9VMXOU56UmWJW9a\\/PCUdDcwpE5TLartNm2SxN74d6c1KUpSipRJJKjmVKO8lRJJJ5+PPGdXKU6SX9lPpi4uYj0+d8ts6kVb9T7DpTa1LlfuHsdx+k06ekipx0ol7kqSatd+zzCUTFxTGTTIOxGDCRkO3fHz72pYoXirGNUmm3lOU6SeVTqYgLKmhLylmVvti9gJx9Dk1mABKXEJJOQRTFdqBqNSmXQsqZQstS4vdIabskKTroHCFOnvXuG4XpGscubn9HEfAw4AzIHTFiBkO33c3fC6BxPT49\\/uitVG57hu+2NNF4HADsELpGQHw6emLEDfmewe72cP0Qu2hS1pSlJUSQAAMySdwAAG8k7ukwyrU21038dSQLeP3iDr2xcgZDPp3+jm8dcXxsw0aeSc0v9I75trH3EqwisGeLLwvXFZqdtwzEi4naomaHaRl13bWkTDGTlOnE0mSoVQLjI+fWGFF5qQTo38inom4MeRVnEqWqOkLeUuEuLfviXRTrDlpkKaUHJDD+nzD8pNtFCVMuMXXVrplng8t0S7JDGxmdC2dYkrikPCWFOlFgKE1UQqXCkEA5mmMqphy6TmQrskNK0PapBjfU3ClaqpS43LebS67HzibuygggWKEEF50EHRSGy2SLFabxFNwI0VNITSXqvzXgrhTdl7oQ+GZ2uykiKfaNJd3Et1m76u5T7YpTobO1blp2qtTbzYIlZZ48N7ejxyAUw4uRrmk\\/i0hhv6F53D\\/CJJcmXFEhwS9Sv24qfsWClSUy8\\/KUi1ZlTgW75BcDP0T5kQTtzYd4Y0mUoqHaFbdOpcsiWpds0OSlpVMpKIzLLEhQqWyhMnLaxOz2cuzKIJJJTvjoa6dJSbd2kvaVGRKNb0pqVY1XpnLNWS2qew4JdlWQARt5iaSrWyUz5sO4nxLsG2PBf4dYtlq1XWQFDD8iTP1EujVKF0WmuOrlO01CV1uaYk12N1psYujCexKdqnZupkZmoIOX9lTd5Clp1FygqIcmMqj6SWnHyob2QLg\\/QYH6IWjBouU1tzCfCmzLNm5SW2c3es\\/LJq15TCA0EvuT173A7PV4MTCto47KM1OXpja3XfJ5JlrNmPs7mx+sS3ypmQmXrlnEZhKKQhJk0Hzz59RfLcsts5Z60p5afOb8wDaamvzFDGSm0SlP3Xi5iPSbet+SWC9VryuGn2\\/QJRxQOybaVUJmQpUu88fqNS6UOOuZpQlahGoPHDlmtHHD7yyl4S0W4sbK+yVttT0q29ZtjodSChwOV2tyTldm1tPAkGmWtN0+cbStTVaQhTTq6OqPlcbT8bldD2AbLRS6e2ssorlWlW5xTAWQUK7BlUphmjPC4Jbnp6rNK9OyTYGLq\\/AbAWBpZtzGmJJGTASFopMhlli4ABfs5ZlDtTnEaWK5aVYIunMoEi+\\/m5tIe+K2XGaQZS2ZNas8pJPlVQUklQKXJ+aaKQQSCHJOVlHARkFERhPjTpNYNYPNrrON2L9s2zOusmZTLXFXFVC6qiyXFEvU63JZVRuirNhwr1jTqbMpQVEq1d0RVcbuVQ0t8YzOU+RvJjCe2pkLb+Y8LZd+hTpYW2WgJi7X5ieu0vKbUrbmRrFNk3XFqWiQa1W0N4HS1Gu6856YqWwqtZnJ99b07Wak+68ZmYcObz83VJ9zOYmFHNTinHnH3CSUoUrKIPN7Ddqe0h5uq7c9qtQm2AsPfQ0nNmbYllL1UlhLqZTD1HdFyFCnUmbYVcAKsBEZqW3zCuHG3JXAOEmUkAt\\/SlVCZRtdrBKlMtLcn5xtVgQZmflHQBYoBOki3GrltcL6B5VS8CMNq7iDPNh1lu6L0e+5C2EOBeTU3J0ZhE9cdYlFpGsZefFpTKVKGeWpqq1S4xcprpgYxeVSkxiSvDmgzSiTb2FMs5ZrLSVILbjRr7U1O3pMMOIOq9LTVzvyiwVZS5354+0XBRxQQ7X6qGhuK5OmIK1kHfkqcmEhCVgbiESrqcydVe7zu16PY1rUPUVI0iWU+jIiam0+WTOsngtLsztNirPefJ0spO7zd0WDh7ZjsbwP2aqThaWrdRZsRUqygVWYLqLWdSufSZSWcFhlcp0kwBqRYqJNGYn2143xEXW5vEE2zLOXHmFHP0XJhB3trVLFD8y2SSSJp+aJ0BNkpAxflLZvO7JpyoeRVSovzrhffq1TW4BNOKy13nqhPuJM0sDipLjzquCQTkI7IpGCcyoocrlZbZTkCuWpjRdXv36vlUylttCk8DlKvJz+qVJA1shYqAScufhl19ETebxXUHE9nKpZkkABKQ0gOLSkWATmcBQAALDI0ggbjuirF1GYdJIs2k3JI9JRJNySpXvIA193xNHw4tGlFBZpTU5MJyPlFTJnlkgkheydzlUKTxCmpZsg\\/ugmOwGWUMoS22lKEpSEpShISlIAyCUpACUpAyyAAEVbQED90ePcOqF0pz3nh7\\/HjqjUxNzEyrPMvvPq4F1xThHcnMSAO4WAHdGvcdW4SVLUrXeoknhz4ch8hYSnPeeHv+yFQCeG8+N5gAzOXOfGZyhZKQn4mMIkk\\/AcobgSnLt5zF0EVAJ4CPI8vxuLdW1igGe4QqlGW87z7IuAAGQhRKc+O4e+GlLJ0Gg+MNlRVonQfZ38h1rFoBPDx2wqEgdZ8cIuA5gPQIVCBxPq6O3phskDfCwkDvPPrl7YTCSrs6+BhUJA6z093RF0ENFZO7T4+39UBUBv9kEEABO4DM9AhZLKjvUdXq4nuHt7ITDZWTu0+Pt\\/VCMXJQpXAHt5vXwh2ltCeAzPSd\\/2eqL8ieAzghMNgwedQHYCfflCgZQOOZ7T3ZQ41FdQ8dWcV2Y5yfd3wkqSOPsghEISOCR6ouhbVSOb4++K5AcAB6I87QcAevbBCEEOII87Tu9\\/3QQ3ghxFMgeIB9EHad3v+6CG2oj8VPqEWFlB4ZjsPfnDvVSeb4e6LS2OYn07+6PQscbiCGRYPMoHtBHuzhIoUnik+8esd8cjqK6j468osyI4jKFAg7iII4+CHqm0K4jI9I3fZ64QUyofVIV1cD7d3tj2PQSNx9XCEYtKQeo9Pf0xcQRuIyPQYIASN0LCxx05Hq8IFJT2dXARYUg9R8cYdRYUDiPV09nRDoWDv0Pu+6F6EcxDMgjjCakZ7xuPsh2RzEegwkpOXDePd2w4CQbiEFJTqnXu639eMNCMtxghcpB4+uESCOIh1KgfHl8o9CgrkFde7u\\/XFpAI9x6IRIIORheKEAjIwqFwzUnLeOHu+yEVoCx18x8c0PCCDkYQUnLfze77OvwXEqvod\\/A8\\/v8Aj47wG2ojjiCCQRvG7Lx08YpDxxGuN2WsOB+HphmcxmDzHeOsQ6k2Pdxh3RYtuI69h93sgi1SQsZH0HnBi6CHweI9UNag8iIYKSUkgwitORzHDmHR1RyDqNYZj6w9o6O6GZGYI6YeSbjvGh67\\/drDyTcd43\\/OEO2LVDMdY8ZReQQcvBHgRSFA2N+UKhsoBQKTz7vHZxhkpJSSD+kZ8fTlnHIrGRz5j7\\/Hxhs8jMaw4jj1j7PdnD4NwDzg6EceoZHqPjKLYXUMwfG+EOEOg5k2O8dA\\/P74ISeabdbUhxCHEKGSkLSlSFJzzIUlQKVDnyI4x8jPWVb86oOpk\\/IJgELbmKasyi21pOaVoQgGXCkkAhWwKgQd\\/MPs4RUMj1HhD0vMvsE9i840R+gtSb20soAgKHMKBvuIh9pxafqqUkjUFJI+HLrdHcGGOlppg4IJl5Sw8b6zXrfldk23aOJLTN50hMpLg7KnyT1eaqVQpEoOBaoE7QxkQkLSnPLY\\/hby0KZVUvT9InA+pUM5lMzd+FU2isUgKWkBCl2rcE63MyMuhY133W7yqsyWFK2UgtxoNvaeljfmOw+728P0wgsZjPj09nX46YhmI9mezzF4ccruEqSubdzFdUpbX0JVC6oAF1yapoZRNuAaA1CXnEHTMhVhFl4b2uY\\/wsWm6diGcdlGsoTI1FYqEmG0\\/wBSbanA6JZB4mVLC9bhYOsS48EtMHR2xyckXMIcYbaqlfdG0lrdVUHrZvhl0Ml14NWzXEUu4XRLIDiX5yRkpmSzSvUm1oyWc9rYx9xBt0Nszc81cck2AnYVptb0yG0gZ6lSYU1OqdUnJIXNvTiUnJwNqiABP2xRZ1aXzJol5ptaHUzUkoycwhxB1kuhcvq6ziDkpLi0qKCBnwEZUYQ6bWl5gSZaXtPFmZvy2JTZ6tlYuNv3hTNizqhuVlaw\\/MNXPTJdCNZtmUo9epEolKxmyCltTdXymxjHGAJxysbFNqdbw5MFfaqpNTmnpJqaKALNzU1TUOUqqBSQlKWKnRGJYFCSt0aZL0pXlFYdrzTcltCwjLui2Q1CmoS+lvNoVIlZxwTMsEm6luy9SW6QTkZuAFz4bX0kLLrGzYrrE7bE24UhS5hPl9LK1HIAT0o2H0JzO9UxIS7TeuCtzUDi4Xxb0e9HLSltxqn4uYbYf4tUYMOS8hVKjJSk3VaW24lZWLfuumOsXFb7q9utSnaFWKfMay1ZqCvOiLHg7yy+F9XXI0jSCw5uXCWpL2LD92W8Hr4sXaFbbbk3MtSbDVzUxlRcDiZOTp1zutISUqmluKGtt1wdx6sjECmIvHA\\/FCiXNTwGfKKhZtxMTS5Va0qW1KVqQl5jyqnzISta1U2tSbEwhClpeYSYtGkeV1tm2eBqlbdtm0viairUmXdxJSWWJF19BUAXFuyqZzCdWdKcpTJy4oirK\\/KqFgmJe1hHZxj1ha8E4llVOuozqo08fOLDT0VSc52VTZbB+s8tE42SLoun0oxZ0k\\/k8th11M7XNFjFao2PVCXHmbBxU21x2m64VEoladeVKlhc9ClGEbk\\/OtHvOZeX9ecZGRiP3pHaA+lhorPTbuMOD9x022ZdzVRiBQG03Xh9MNrcLcu6u7KCZ6nUtc5lrMU64F0isAZbamsndE3a1dJW4qfs5e6qZLV6XTqpM9JBFOqacgNdTjaEKkZok6uTYZkSVFai8c9nGSFsYnWFfbIk5OpypmZtlbD1BrLbcpOOodRqLlzKvky08lxLmotEq9NtqRrDP68X7hHH\\/k77Zg01hHFDeF8STJTlw9Vkoo0+p9eXKyzTJ53zCpKF83Z4eqLyBvURZYFRYr2KVKldo8qnvSzSbnz2m3nqeQBbO60LOyydwHaiVG+yVXBjzM4IneaTXI3aFukcKjWabZJwPv2cTMPC7cIWpKgU+ZnnPpEP1uxVyztnVFtcxtHqg\\/TqbRK3Ui68X6626Wnmo6uk\\/wAiBpgYD\\/OVfw6p0jpGWFKbR5FQw6ln5a\\/JaTSNzlVw1nXX6s\\/MlQATLWZUb0UlvJ95xgB5DO2r2zLE9FzutS6atKJufOKcFOOoSNQXpQgTCDYFRLSXmkgek6DpFM1DC9WkMy+x86YGvbSoU5Yc1tWDyLD6xyFCbH0yBeNL606qiOvd2c3shi6nVUeg7x8Y5+r0uoUiem6ZVqfO0yqU6ZdkqhTajKvyU9IzbCi29KzknMtsvyr7DiVNvMvNIdbWClSeaOHeTmnPnTv9HP8ACK\\/AKFWIIVcpUkghSSCAQQdQQdDfkeOg0BOZJ0N02++\\/shgsc\\/o7fHXDdY4H0ePbDsjMEdI\\/RDcjMEdPj2RlINxbl8OrwtBuPDT5dd0NVjdnzjj2fp98S9Pk6mlnUrzsnFHRQvavz9WrGHZlMSsLzVqnMz8y3YVSXJW7dltyCJt1S5WjWpcH3P1CRlJfXYS7ek9qNMNyzYdiHHeCOmMvtAPSUf0S9LjBfGt2afYtuhXSxRb\\/AGWddflWHd1trt28wqWRmJ16nUWozFcpko4NVVapdOeCmnmWnWp3s7xEcM4qpk+twtybryZKpDNZBkps9k444OIlVKRNgb8zAAPpERtaRPGQn5d8khsL7N\\/kWXCErJ55L9oN3pJTrHpRQQzl5hibYamZZ1p+XfaQ8w+ytLzTzTyUutOtOtKLbzbzZS4242opWkp87LIl5HeG\\/dFuwQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRrq5U3SNVoy6FWLt302dEneN5yCMJ7AWFFL4ue\\/mJ2nvz8q4EqQiety1mbluqR2qFNOTNBaZdGTqhGxWIf\\/AMoR0iDeGOuHWjdRp7aUnB22xdt3y7ZyBv3EKWlZunyM0hSM1qotjy9FqUi6heoW7ynWdn9FvgG07Ef4L4LrFQbcLc4+z9G08pVlWJyfBZQ42bj8pLNF6bHIS6rXNknS4gnvMKVMug2cdSJZmxse0euCQf0kNhbg5lGul4j0JGZy9cOEjMgevshNAyGfT7ocIG7Pp4ePHCPnqo2BPs698Uz3da2hQDMgdJjl6VSqpXalTqJRKbP1es1aclabSaTSpR+oVKpVGdfQxJ0+nyEo29Nzk7OTDjcvLSsuy48+84hpltTiwI4tA4n0Dx4543QciDo7\\/qs6Vz2KtakXJm09H+gruhDq2i5Jv3\\/cYmqJZUi+rIJSuTlxcd0yjiHAtqftqngtFlxWWXR6a5V6nJ05olJmnkoWsDMW2Rdb7uUkBXZMpW5lJAUUgXF7xnU2RcqU\\/KSLWi5l5Dea18iN7jhA1IabC3CBqQk2jmNF7kQdJLF9MhcWNU3KaPtlPLQ4ZCtygreJtRlclkmWtGWmmJSgJcW2Zdxd11el1SUU4iZRb8+zudkV6MnJy6J+igiQqth4eydwX1TktvfqoYhmWuq9m5tlBznqXNzMqzSLUdKStKlWhSaEpxtWzmlzGWscmcR8RWrBkpNSZT5wqNRU8mTllP7BptLAb2szMEJWtTSFOthLSdVTq9ZCXE6q1ow5vbFO4q7KTk5ctwNUyhyjLs3ONB9FIoklKsI13X5xS3W0GXl0BxxT9QmnQykaynA0Dk5j3bPsr2IzrtDlaTPYpxxLoYcVIt9mDKuzLLcxK+fVZ9ky0gX2XG3EopknOTSUONl9hAcbWrqjA+xlE0w1UW22GJS5P0tUSmYfV2Ssrq5SWGVtsNrCwFnzbQKHbuZTGYF0Y2Wbbe1lmJo1+ooJSZWkKS4w26CAQ\\/UCoSiCnJWuJdUy6hSdVTKYxtunHC9Lj2kvJTCLdkHPNTLUla0zikFJGq9UlATKl+cokyokkniUZAxpM0iuVz0Y8GDUKJYU3M47XpLLcl\\/IbJmmZay5aabXqkVC\\/wCZZmabMskZrRMWnJXW0tYSy6qV1lON6ItITlO9KzH8T1IXeZwvsmdC2lWfhgqdt1MzKON7FUvWLl8qeuqsNTLOumoSblVl6JOqdcBozbS0st0lUcQ+U7twuhc0jZbg6ZOjEmZulTMxKqAB7RwXxFUVLaJBStymUmbBJCUj0RLqhirZPs\\/uhlSsY11rTJLlmbl2nkgfXfJFLl0pWkp\\/IicnmCAFpMSb9IHTu0ZNHNydlsSMTKfP3ext1O2Jaaxdt8OTLYSpUtP02nvql6DMPa+bTl2VChSz+qvZzBUhWppDx65bDFu6\\/LKNgDZVHwspCw40zddzJlryvZxJzDc3KU+YYFo0JakqIdk5qRu0hQCmqkkFSBplo9q3DcThckZJ5xtxWu5PzJLUsVlRDi1TLuQfWVZhaWA87nuKAY7ioWEVPYCHq7NuT7oyJlJUrl5Qb8ilb3mzTyTvyUgyqgPrDONhhvyf9luDSiaxAlWMqyghbi6olK5PtrhSiijsqVLFLm9SKo\\/P3VdQWLgRT2LfKAxhWe0l6fNN4akFAoTLUhSlT5RpYO1JYD6Fo1CXJNNPBTYKQTqfgr5xIxWxsuM1zEG8rzxIuN3aBmZuGq1OuvyzK3C4uVpzEw6+zS6ehxRKJKnsysjLDc0w2gRyVFwkrc6EPVZ9ikMK3loas3OkcQNm0sMNaw51zBcQfrs5+acgafS6dSmfJ6dJS0kzzolmktBZGeSnCkazq95zW4VKJOZVHIoGZ38B4A8emLUcxCWGG5OjyUtTJRhAaYbaaaSlptP1UssNoRLMoGtkJbWBwMUTN1eamnXHluOOPOqK3Zh9an33VnetbjhUVKJ3lRUTprHxdEw6tajJQ4JBNQmk5Hympas0rMZ70y5SmUbIJzSpLAcTkPPUpOcdgMtgBOQySgAISkZAZZAJAyAAHMBuTCSUlRAHP7OuHwAAAHARHJqZfmV55h5x5Zvq4tSsoPBIOiQbbk2A1FrGNS86tZ9NSlE8VEmw5DgAbbhp3axWCCCMNRsO\\/hDKRc29vhBDlpvLzjxPDqB+PwhNpGscz9Ue09HfDwAk5CGSd5PiYWs29Eev5fP9cVSnWPVz93phbsigAG4fp6zCyE5bzx9w7\\/HTDKlZj3DdDcVSnLt5zF0EVAzIHTCd0G6AAk5CFgABkIAABkIVSnnPoHRDKlZvAQ0SVmw0A66HjrAlHOfV3936IVAJ4RVKSo9XOfHPCoAAyENqVbTefh4\\/KHALCwigSB285i6CLkpKjkB78h29HphoknUwhS+CfWet8Wwshoq3q3Do5z3QqhoJ3nerp6Owd8LAE8PHbHkNxYlCU8B6ef1woEk83pMXhAHHf2936Yvhsr5a+MEWBAHHf7ovyA4DKCCEEk7zCCscBf3QQRdqqPN8PfFwb6T6oSVAbzCbrV3D2e\\/f7ITjLTBHQxxl0jMMr2xGwdRa94zlgVtqlV3DWSrzTOJrki\\/TmqixcVMt2aYZlZ6izKlTUhJatURUqlUadU5Ol06ddlHEjFHUT2+nuyjIfRf0jb20WMYLaxZsh0vKp7okLnt159xmn3daU64z88W3Ug2SnVmG2kTVNnFtvClViUkKq2y6\\/IoZjdYdcoQqsunEbc6ujO5mZx2nuBuclA8koROsBTbqXlyqyHVS621h5CVISCopjMkPNBNNJqPbGUcVkdUwsJdZCrJD6MyVhZZJCy3lPaJSUgpNlDoWrUmqUGpz1GrlMqFGq9MmXpOp0mrSkzTqnTpyXUW35OfkJppqak5plwbN2XmWmnm1bnE80cZExDE\\/AHRV5TDDGi31KNs23iBVrblKlbGIlFl5Rq76ew5Kp8mkq8w2tqVu6iyL36ynqTUnTPUd1mYkpSboU46\\/rRi9J7RTxb0Tb8csrE+jASc4Zh+07xpQcfti8qUy6E+XUedW2gtzTO0aTU6ROtsVWlOrZE3KiWmpGamt7XMItS9IlsWYWrEnjDBM+4tqVxDSrkSr7a+ycp9akyS\\/SalLPBUtNSs0ltyXmkqlZlEvOBcqiQ4owdVcNOgzDZeklpbcYnG0\\/k1tPpS4wtQSpaAh9tSXGHm3HZeYQpK2Xl3sMY4IcRTIdA9QiC9oOR66PR0ifZ9\\/uhCCFtRPZ6e\\/OLS30H1woLSe7xgyrG439fzhODIHiM4u1VDm+Pui2FA8j7IM6hvH2deyLCgHhu90JlJHH1wvBCgsjv8AH5woKB3ew74aqQlXEenn9cN1tFO9O8dHOO+H5QDw3eOj9EJkEcR6eaHAoHuPL5c4VHHQQ7W0FbxuV09PaO6GyklJyI9+R7\\/RCo9CiPDlCZSD28xhIgjjC8UIBGRhSVEb9R8PD5Q8CDu6664w0UjnHq7vHs4JEAjIw7UnLs5j3wipPOPSOmHgeI9UIUninfyH2d\\/W\\/e0IIORikLkAjIwiRkSOiHkqzeMKSrNw1HXQi0gEe49EIEZbj+n7IcRapOY3cR4yhUKhmpOqerm7vRDZ5GfnjiPrdY6fR7uyHxGYyP6D7IRIIORh5KrjvHv7+vtj0Gxv0Y46CFXUapzH1T7D0d0JQ6hVjbgfjC1AKGYb+tPVBDV5GR1hwPHqP28fXDqKKAUCk8+7x2cYeBsbwhJsb+3wjjlJzGY4j2+Pj6kYcqBSSk8x8H0jKEFDVO7n3jqPR6IeHPgd3XXyf3xYQCCDwhAjLcezfz9+cOITWOf1+PHshxBsbcD8evsgjj3U6qj0HeO70Q3WOf1+PHtjkHUayetO8fEen4QyIzBHTuh5JsQfb4R6efVxa\\/zhCLVDMdY4d0XcIIWrQhQ7uvWIAbEHlDYjMEdO6ECOIPWDDpQyJ9YhBYyOfT7\\/AB8YfbVw4EXHj+qHxqAecNCMiR0HKEFDIkersh2scD6D48c0ILG7Po4+PHGH0Gx8dPl13wQycSDrIKQpKhvSoZgg5g5jgR1ccuvdDWjGpWjXJW6rGuC4bCuiTJVJ3FZdZn7cq0qoqSpexmqY\\/LONpcKEFxKFJLuR2h4Q\\/WMxn0e7x8YQUMwfWIyAo5HGyAtt1JQ60sBbTqFCykOtquhxCgSFIWlSFDQgw8w+9LuIdYdcZcQtK0ONLKFoWkghaVJsQUkApIN0kAg777HsFuVf0mcMDKUvFSl2\\/j9azIQy5PTGxsvEViXTqtpU3WaXKPUGqiXa85SanQX6pU3UJ8orTDji5g7gsBuUh0VceHJSjyl6nDe9pghCrHxUTL2lVlvkpRsqZVnpqYtisLecKhJS0hW3aq+0kuOU2VJKExWCMwR0xx83Iyc8gtTssy+jeAHEBRRnkCW1ZayFZfhIUlX7rpqLFGwzZ5intH2qUnDdSXmPnuH0Ny0upatQp+jrSacpF7laZJFOeWfrTGgtduFNvWO8N9kxOTqcRU9FgZarlTsylAtm7GopInAqwCUecLmmWxuZ1N\\/QBtTGS+bSLTTNTNWpzeqFU2tlc8gNHiiXmitM5LFIz2aWpnYJUCpTKv2MZOWjpB2dXtlL1oPWxUFFKSZxQmaU45kTkipNpRsASjXV5bLyrSCttCXnSN\\/n7YGaYOkxo4uScrhviXPVe0pNxH\\/0tsRFTF2WUqXQUHyGnImX01q2ZZeoMzbVVpTi1FSlrUFqC9zuAvLA4K3oZCg4829VcD7ndLMt8\\/lUxdeGs\\/ML2TTbjdep8p8828Zp5S3TKVujrpdMlgDPXK+ErcOPQMR+U1sRLacO15vafg6WtlolUTNVR5iVRlSG2ZJ538IKcW2grsmaHUp2nMnKt9pywbi5qdjrZHtDyt1NpWDa67Ydo6tqVl3HlWuRUG2xT5gZiMzlQl5R5eqW1DUmRPpH6D+itpgUd1WL+GFu3FWJmTLFNxFoOrQr+pyUsttS0xI3lRtlPzrUklhgytNq66pQTskszFLmWNqyqN5pXfJ9MYbEFRunRVvOWxmtltUzMCwLucptq4l06XSlx1qWp1YU7K2febiGWxtpharLn3H3m5eRoc4Qt0bscNsW3006RufDS96fW7aqaTMyU9b9WkbgtertFZbW\\/Luyj85SZxBKC2mal1LW3qkJfQeGd2EeKLmIUtUZapSctIVikplnHkyrjipebYeDqRNS7Luu6wG3UajzRffSEqaUlw7TVT0ns12+7LNvVUlMK1\\/Dk9g\\/aDOJmEy8uoh5mdfk5dyZmWpKtsS7BdeZYlpl3zSt0+WsEKallTLxBMdxvseTJSrtWSqWqNOs2v6UkSmXnG0PrQhp15kFxt5C1ONhLqFzKbKC1BtGseahdlqXNYly12zLzoNXte67Yqk5RLht2vSExS6xRatIPqYnafUZCcbZmJWZl3EKQ4062CCDmNXdHyqhkT1743s\\/KH9H13BnSrs3SLo1PCbI0kLZEpc3k6EhMpifhvK0uh1aa2batnLmtWfM2fNpCmmvnOo064ZwrfmA+4nRProdbQ62oLQtKVoUOCkLSFJUM8jvBBEZWI6G9h2sTdOcKltNPKEu8q13WFBLjC1hOgcU0tsrSAEhRIBNjbmKoSLlNnn5Rwk9k4pCVkWzp0U2si5sVoUlVrkeloSDo2WMlHr3+PTCCxkeo7\\/Tzw6WN2fRx8eOMN18Ow\\/Z8Y0sY6TYjv09segFyMekx\\/ZIaCmGgqtQE7fODKncFLy2jifKXPuOlZNdm1NaFOLmX0VKwqhbSJiovJAnq5KVtttS1yrxjbDEJf5PRpJHDHStubAas1ES1s6Q1qKbpLL77bcu3iRh6zUK9b6kKmFBtlVUteZvOlltkofqNSXQ5bJ5bcu2mbRHdezSv\\/hDg+lzLi883JoNMniSSozEklDaHFkkkrflTLzCzuzOkAC1halAnPPKYwom7jA82dJJJKmgkJJJtcqbKFE\\/pFQubXggggiexuoIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+cuq5aLZls3JeNyzzdMt61KFV7lr9Re\\/YqfRaFTpiqVSedIBJalJGVmH3AneUNk9UebTj\\/i7W8fsbsU8Z7g2qKniXfVw3WZV1wOmmSFTqDzlHobS958loFHEjRpLerVlJBoFagnOJlPLhY\\/pwa0JLismmz4lbqx9rtNwzprTLy251u2ErNw31OpQkAOyLtDpiLVqIUrzU3dLZghZyg9IG\\/Po+Occk+UTiHzip0fDLK7tyEuqqTqQbgzU5mZlULTwcYlW3HEki+SdFiLm9bY1ne0mpaRQfRlm+2dA\\/rr1ggKFt6W0hQ5h7W8KgcAOwQ4A4AdkJIG\\/Po8d8LoGZz5h4Ec0LOoHL7YhEKgZADoibXyPOj+nA\\/Qzs+u1KQ8ku\\/G2bcxWry3mNnOCjVhhqTsaRU4tIeXJJtKTkK3LMLAZYm7gqK2R+uHHnoiOi5gpUNIrSDwkwYkEzOrfd40ynVl+UQpyYp1qyal1a8Ku0lAOa6Ra1Pq9STrlDetKEuust\\/TCf8AVmZp1iWW980ysrTqfb1Hl6bQ6fJpRLycmiXZbp1HkZWXSAhqWlimXZbYbRqtMNqSEEIBic4PclKPKVvFNRUGpKkyMwtx42\\/Isy7JnJ14X\\/OaYbRbmlxYJANjaey+iOVCovTiUZ1pU1TpMEGypqbUkLykblIbyIO\\/0Zg6E2jF3F2vi4L0nw24XJOj5UeUCVEozlFrM2tIAAzXOreGukfSNNtEr1EoiEJykGlve2POkHiXa9HvivqwVs243LTtO0ZOrzLVq1BdrbKmVO5n6ZKvNyNXma1cEnUqpTKlUGHpmWpMzJSzC20tFJlDaceOo0dtGDFzE9moKlbnat6Yt6yXA+hM4u+bsX8xW9NyyXVpdm3qROzxuOcaQsOqplHnXkeaypaYMUq09PzcvKMAuTE4+2w0CfrOvLDaAo5ncVqGZP1R52\\/cBzXsMpjuMMWY52tYglmnZmfqb7NNU+gPJlHphaZ6bMuXUnszT5P6OkZR5uy0S6nmsw9IG79vFd+iKVh3AlNmFttNSgn6oltZbLrLSVSsmh4oIzofdE7MvsruhS0sOlJshQ+wt2xq5cTaJpoNSlPWVAT0yf2QJWpC\\/J2UfSulCk6u8IaKgobbMHLuqgYc2\\/SlNuzDRq02kBSn55KVMJIzzLUmM2UpJyKQ\\/wCUuI+shxOWcfV0yRZplPk5BgANScu1LpOWRVs0BJWofjLUCtZzJKlKVrK4xzDKdVOfOrf6OaLkqFdnJtbiG3CxL5lBCGR2alovZJcWDnJUmxUkFKNSMto5AenHXSoBWRFzYJ0JF9LneTbU6gb9NwhRCEjVQlIQkAAJAASEgDIJAGQAAIATuEORuAHRCaBxPoHjxwhSI8s3Ph8ePXdGJBC6RkMvSe2E0DM59HvhwhOsoDm4nshsm1zyjwmwJ5QuynIax4nh2faYWgghkm5ueMMk3NzxgiqQVEAcSfB9EUh0yjIax4nh1D7YYUbnu4dd8OfUT3nr3db4USkJAA\\/Sen05Zw4SMh1nxlFiBmc+Ye+FgMyPGQ54ZWrh7fs6++GouQnM58w98KwAcw9EENwdddcIAM9whcAAZCLUJy3nifdCqU5nM8B7fHx9TS1XNhuHvho+kQkbhy+Pq4ffFyE859Hf3fohZKSo9XOfHPFAMzlCwAAyENKVbdvPuhwAAWEVAy3CCDsi9CCs9AHE\\/AdcMw2pV9Bu4nn93x8N4hBWegDifHPDtKQkZD1857YuAyyAHUAIVSjLeeMeEgD4DnCItSjPjw6OnuhYtuoS0VIWhLzZdZKkKSHWg84yXWzkQ4hLzTre0HmBxt1sb0GKRtW0NNOLDq37YoWjNpf4d2lido6tvzcrbNZqVqyFQuDCiZrc+9OztQllSsqKjPUVU\\/PTtQnpullu8qY9NzM5TJ+oNMtUc7nDtOpdYqHmNVrbdAQ80RKT8xKqmJBM2FJLbdQcRMMuSUq4nOlU6luYQysoLzaWip1vLkWJeamAxMTiZILSQ2+40pxkPFSQ2l9SFBbLShmzPJQ6EEJzoCCpxGqmCJAOlNyQ1Due2JXFnQJqsletLqEs7VXcMKtfdOmWKzITZknqWMML0rnk9OS4JR1575txEulhibbU1Mi8pXV8ie0G12Rqtp3hW8Pb0oFfsbEO2lJFw2DetFqFrXhR2l63k87NUCssStQdpE9qFylV6TTM0CsS+rNUiqT0otEydhiDAuIcOMszs1LNT1GmkNuyWIKO+ip0KdYdALT8vUJbM2G3b\\/kxMJYcWPSSgpIJyqxh2r0R1SKhKuISlWUPISpcuo2BAS4EjKSCPRcShYNrosbw0CDzn0Dx3xeABwEXhJPUOk\\/DphQIA47z45ohBUTv9kakADcPXxhIAngIuCDz7vb49cLAE5avoI4buvhF2zPOcuzf748gKgN5hEIHPmfZ3xXVSOb4++HAQnnBPpy8eqK6qegeqCE5xyPu+cbeuS+x9naTVKngxPVByVeYXMXnh5Mh1aXJebYKFXLQ2VAk7N9sorctLIDbQ2VxLeU+Zltsby7eqWDPKG6NVJomItFlp+kX5QmamyGnWmqrbl0SaH5Oan7eqKmlfNt1WpV0VKSceaaVLzrbMzLvS83Q6hOyDkPHDe+Knhpfdp39RVKFRtWuSFWbaCg2mbYl3QJ2nOqy3S9SkVzMhMgbzLzLwGW6NzXJS4wTKPu4wemZ51LkiWsRbPcS4ElhKnZOkXKww4VBSU7dVBnpaXZzSFv1WZ1UqU8pWhwXiCrbG8c4qxNTk\\/SOC8aooz2KsITCu0plSmmhUJGuzTcsvOzL1CZlHaY+idS2FOzAfRNB6WUto9dbJ5mT2hYAm8LVYNu1PCaksST7qQ44uh1ELVLMLB9J5mVmG5hhbZuhmW82Q3kXkMay9LnRTvvRHxXqGHt3ocqVDnNtVbDvNqXEvTrytovFlmotMpdmhI1WTcKZSuUh1516nzm5KpiQmqbPzuLOqk83w90TQNLrA6l6ZejJeNos0KRquLdq06euLDNbk9K0eYavqRknnKVJt1eabXLyNIu9DZoFXanNSnJD6ZiZMs9TadUZSGQpKkqeZfl5mUmpaZmZGekZyXekp+n1GQmHJSo0ypSb6G5mRqdMnmJiSqMjNNtzUlPS8xJzDbbzS0Jt\\/G+HaTJopGKcJzC57BOLZU1GgzKgSuTXmyzdFmyVKUibp7gU0W3VF4ZFsuKcfYfXHO2NsKzGEqu9KKbWJVxaywVEq7MixUwV29PKFJW0sk9owttdyrPZqUDmzHt7otKDzZH2Hx6YdlCeYEenPx6os2Z5jn27vdFfRDwtJ7vGGpBHEZRaQDxEOiCM9b0k8N\\/XwiwoB4bj45oASN0K0PeIalB4j1H7ePp9sJw6KSOsdI+PRFhAPEQ4F8\\/b93XhCCjiDY9buUIQRepBHDePbFkOA31BjwKKdFXt1x4wkpGXDh0dHfCSkhQyPr5x2Q6ixSM944w4lfA+35\\/P9cLBB3Rxq0FB6QeB8c8WQ\\/IBBBGY5wYZrQUHpB4H4HrhyFAkG4iwjPcYRUkjsPA+OeFooQCMjCkqt4cRDyTcd\\/GGi08SPT3+PdwSUMxl6odEZHKEFJy3jgfZDwO4jxEIUPzh4n52+P64akZbjBCq057xxHuhKH0m47+MKBuLjfpfr22\\/XCa0849PfCKhmOseModdsIqGR6ubx1R6DY35QqGakhQIP6D0+jPOGSgUkg8QfB9McksZHPmPvhs8jMawG8cenL7IfBuAecKQbG3A\\/HnDWCCCH0m47xp98CxY9xhF5OY1hxHHs+ww0UMwR6vHsjkTvBHTDJxOoojm4jsMPIPD1\\/D7dYUg8PXDSA7wR0xesZHPp9\\/j4xZDkOQ3IyJHRuhm6nVUeg7x3eiOQWOB9B8eOMNnk6yc+dO\\/0c8PpNwD7fGDn11x9scesb8+Y8e0fZ8YshcjMEerthCHR6SSOI3fZ8oItWMxnzjwYbqGYPrEOoQIyJEetq9oNx4Q6g3FuXw6+yGpGYI6YbkZgjph2oZE+sQ3WMjnzHwYywdxHjC4akcQeww3IyJHR4z9MO1jfn0+O6G6xvz6fhlD4NwDzEHQ93XqhsoZEwgsZHPp8fb6YcrHA+jx7YQWN2fR47oWk2I79IfSbge\\/xhqsb8+n4eBCS0haSlSQpKgQoKGskg55hSTmCDwIOQI64cKGYPVv9X2QjGQk2UPG3Xxj2Mw+T\\/xgnMD9JnDV8XRXaDh7dlyJti+LclKxMyloVRF0SU3b1JrFdo6300om3azUKbWk1MsoflGZB4JdLDkw25NAwluNNq31SJx1epJz7ho9QKjkkSlRUhtLq1DPVblppEpNr1QTqy5SRnHn9JUpCkrQpSXEqCkLSSlaVpPmqSrcUqSRmCPq9eYMTK9D7GFOPOjphhiJMzZma9N0Fqh3apTiVPi7rZcVRK8++nNxbBqs5JqrUsw6pTvzfU5Va1KCgo8+bYW5\\/CmLcDbVKKhAqNDqkkh1zRAdmabMGpU9MwtKSp1E00mek5lTmbNLJblzmbIQOrvJ6rrdVpeJ8BVJ5a2n5ddRkUrUVlDEwhEhUUNBRsjsXDIzDLaNO1cfdACsxOSXLR6Mp0nNAHF2m0yQM7e2ETDGOljBKUl75xw9lJ9+55JlvWbU+9VsPZ+8KZJyiXCZiqzNOdSzMTEuywrz+bQnvLaSJdas3ZFWwOZOZZIK5dR5gAnWaSOhnhwz9SXD+vN3jZFIqE1qTDr0iqQq7TqUupcnJZKpOdD7awUKTNpTty0rWbUzMDJJGZPm4aauj47of6buOmAyZZ6Utmi3pOzVjbZaHS9h7djbF24eOqmGipqZmpe2qvTaVPuII1KrLz7DzEvMMPS7P0Ax55jijDeHcbUchyRrVMkZ5h0WuWJuVTPyRWE3s4ZZ59txJ1SttDZJIAFQ7QKM7JTai6jK\\/LPOyMyLEgPyrigDfQnOkOgE\\/WS2ki43dFkZgjphA7wR0w6UMlH1+uGyhkSPGR3j2RTAO4+BitwdxHiI+7wjxMuPBjFPDvFu0nlMXNhveluXrRl7UtIcn7cqsrVGpWYOosGUnTLKk5xtbbrb0q+8062604puPTlwxxAt\\/FrDiwcUbTfMxbOI9nW1fNAeUQpa6PdNIk61Tw8ElSUvolZ1tt9v+9vhbKiFJyjy2FjJR69\\/j0xOE+T76Q4xY0M5\\/CGqVDyq6NHO8py2ky6ytcymwL4dnrtsqcffUTrN\\/Oyr2t6RZBHktOtuVaGTWyEdAbBq8ZesVLD7qsrVSlhOyqSRbzySv2iECwOZ6UWtxR1GWUTEvwlNdjNuyilejNNZ0A\\/11n0rAHippSyojUhsXuBpvigggjqiLBgggggggggggggggggggggggggggj5e8Lrodh2jdF83PNinW1Z1u1u7LhnlDXRI0S3abN1aqzakgjNMtISjzygPrBBAUN0JWtKEqWtQShCVLUpRslKUi6lKJ0AABJJ3AE8I8JCQVKICUgkkmwAAuSTwAGpMQ3OXzx7\\/AFS9LmjYP0yc29vaP9lSdImmETPlEsL7vxuTuq532S2SyhxqgGy6RNtEreYqFGnGXnQ6nyeX0cIGQHXv8eiOw8ZMS61jRi3iXi1cRUa1iTfV03vUGyorTKvXJWpyqiRZyzQmWp7UyiRk2W9VtiVl2mWghptIjr4DgB1AR83sY1xeJMT1utqJKJ+feXL3vdMm0QxJINyRduTaYQbW1SbgXijajNqnp6amlX\\/LvLWkHelvQNJ\\/7rSUJ56awqgZDt3+Pf6YcIG7Pp8d8JcIcDcAOiImTck84wokIcghgUmt4iYs6Q9WlFLlLGosrhzaDzzSiwu4rs1anc07LPA6onKLbtPp9OdQTqmUvFZLYyaWiQpjdWQGKVb7ThydWuqTiUKGezRry8mhSRxS4tc2tQVl57DSupGO\\/JnYFpwC0N8JLbmpUytyXjSRileKXEFqZNfvxiWqrErNtEZszdFtxNv27Mo\\/36jKzy4R9hfNXTVrkrNScfCZRhxxhl1xSUstykgksh0KUUoQ0tDa5kqO4B1W9KQAI\\/tqrysP7M26BL+hO4kfakXCldnPNQpM7Uj+bdOVLMg4LklqaIGl1Ds7YvhxMmxTlvICTKyqqnM3H\\/XZ0AspXycZaWADuBlRYnjGG5dvHFMxWcItHSkToUzSpaZxXvSXaWlxtVQn\\/LLbsiXeKEazMzISDd3Tj8sp3NctWqZMqaSkSy3NGeFdI8vuBdQWnWZpLBdBO8eVTGszL578gUt+UOAnPJTaVDpHYemFjY9pEaS2MGLQmVTFKuO7p2WtbMLQGrLoCWrds9AaWSGXXLdpdOmp4JAS5UH5uZKNd5alPMM6R822yw+tJExVXFT68wM9irJqVSDxKSwhLyRvyL6+aJLhmiJwRs4o1FDYZnXZRKp1IFlef1AmbqAUbBSuxLrkqhRsQ200myQkJjnfaTiU4jxPXqslwrYmpxUrI3Nx5hKAS0qUi5CO0l2Q8sJuO2eWq5UoqPYiE6ygnpPs4n2Q+A4Adghuwnir\\/i+4n4Q7QN+fR7+HujUE2BPKKx6660hQDIAdEVgi5IzI9ZhiCFEjIZek9sPGU5JKj+Fw7B3n3CGyQVEJHOfB9Azh+BluENrOgHPf14\\/CELOlue\\/rrdBBBBDCzYW59fd64QgXPhr8uu6L0J1lAc3E9kPeMJMpyTmRvVv9HNDlA5\\/V8fHbDJNheBRue4aDrrhF4GQA6IXQMh1mE0jM9nHu9MLQxCTp1z3QRegZnPmHvi0DM5DnhYDIZDmhC1WFhvPuhCjYWG88uvUPui4DMgeAOmFwOAA7ItSMh1nxlC6BuzPo6uv0wyTYXj1IsO874uAAHvPTFYIuSkqIA\\/QM+Pozzhgm+phK1cB6\\/lFUIKz0AcT454egZZADqAEWpSEDIenrPTC6E5bzx8eP0x4SAPgOcNwJTlvPH3ePHXfBAASchDJJJuYQpXAb+tB39b9wASchCqUgcd593Z3xUJA7\\/HNCiUk9nT3Qypd9B7YEptqdTv8AD5mNl+ghpw3bgLMzWHNWuKak7TqcvUVWlVph0zEvaVyuMTDslIzrEzryz1q1ieyS9KTLTsrTKrMipBEvLzVXeVuXq9p6LnKg4Yow\\/wBJ2yKbT8U7SbmPuYxCtGa+5XEKyJudb8mZurDC+Uibq9uh59TPzlQKiurWpU6jKyUtc9FrUkuRk3on4HMBGyvRHx4rVMmqY4mcU5dFnFpSUPuqyuC2lES7ktOKHnP6jRRIzrigt7NcnPBTk6HHkaaSxxi7Y5PzeJsJvmewtVZlCsY4FqSnJrDs6qYWUTFXk5FRKaVUJsrSmozkh2RmX0y8zOtTSfOw70vshr9LxdLfi6xWG1zgl1\\/gnV3QjzgJYbKl0GZcXfzmXS2lbtNbfzBlCX5VlaLSbacPNNvRC0heTZuOWdxrK8WdGiv1Rul2PpT2pRVyiKLMzkwlimWtj1acgJhFkXM7rtsyVy0xx+0rozaVTFs1IVyl0XpaTflJ2Wlp6SmWJ6Tm2WpiUnJR5uYlJmWeSHWX5d9lamn2XW1JcadbcU24hQcQohSVRNksLEbDvHDC963bzp1FxBwixIt+pW5WqRccjL1ilzNKmxM0av2zcNOnEvS89Iy8w1O0ipSb6HTKvMPNoUtpptAiNcpfyed38lLeDOL+DMrcuJHJ9YhVlpqcoyn52v3Low3LV5prYUyZq74mnqrh9W5iaUm0KvUpoPPzOpbFenU3GaVXL5v1FEwftaw5MY12WAyNQkcoxJgiYWhM3TJlxN\\/2Mj0Uhh7KtUk83lk5tCFNoRJzbMxLJh+0LZbOYdmHXZJo9iSpQbQD2TiQQFdkVek2tJNltK+pdA1QUuudExcEKPV2wzpFWpddpkjWqLPStTpNUlWZ2n1CSeQ\\/Kzcq+gLaeZdQSlaFpPTmlWaVAKCgOTCSeAimVpU2pSFpKFoUULQsFKkKScqkqSQClSSCCkgEEWNjFKEEEggggkEEWII0IIOoIOhB3Qlsxzk+7vi7UT0e0wrszzke\\/ui7UT1nx1ZQ2Vp7z6vnaPIRyHQPUIy00NsQF4e6Q2ElfL+zlJi55W06uVE+T\\/Nl1pctqYW+kEBbUi3VGKj+HqPSjbmqVIAOKWono9p7456hzkzITDM7KOKYmZCclp6VdRlrMzTatq06k5EBTa5dCgMgRllq7yI01dZTNU19sixtYHl2gLRPHcV3Gm8A7xF4+T1VVSO0aUkCohivUyqUt4X9E5JZVTaURuz9pTw2g2uO1UkaLVeaZadxOW5W5WfBUWCdhPNJ84vSbqgX8gDkpTQSl9sH++NAAZRHV5Y3R3lcDNKW3sYLakPJsMtLFipz8y7KhpNLoeP9rSKJy6ZFpLLTTUojFSykS99SEulTrk\\/dVqYo1yYe8oqzSI32UGqNV2hUausoCWa1SKdVGkZqzS1UZNmbbQddCF+al8fWQk5cRxy6I5SfBGZ0oeThxtt2iS7MxiZgrTE444UvubUzEvfODKHbzpUpIBkLJmbrtiXuXDnUWENvSdyzLMw4wy848ia+TfW04qpeLtjtVeCkVGSfxPg9x3U0\\/EFMQnz1hi4Kgmelcr620ZUhmUnR9aaWo3ltjwq1WKEubQ2kTMv6Cl2F0rQFKl3Cf4qgthWt1h5CScqYigFscxPp390WlCh19kcJZ9ySF6Wrbt20o50+46NTqzKpUdZbLc\\/LNzBl3Tqp+mllrVLvjVSUutOJKUkZR9EUkcRGodQtl1xh5JbeZcW062sWW242ooWhQ4KSoFJHMHlHDqkqQpSVApUklKgd4UDYg94IsYbRaUA8Nx8c0OSAeIiwo6D6\\/HfCY8BI3Q1KSOzqhJSAd43Hxxh4QRuMJqQDw3H2QQ4lfA+35wzII4wmpAO8bj74dkcxEIqSR2dPfHoJG7rxhZAI11ENSCDkYIWKQe\\/xzQiQQcjDqVBX2w2boOmo69\\/f94ixSc944+\\/x46kSAQQRu4EcIcxYtOe8cfHj9EOpVbQ7uB5fd8PDc4CCLiONWgoPSDwPjniyHykhYyPo6j0wzUkpJB\\/SM+Ppyzh2FA2N+jCahmOvmhEjiD2GHEWLG7Menr6\\/RC0K4H1fLrj4w8CCLjj16ujDMjI5eDCK05HPmPvh2oZjrHjKECMxkeeHkmxv7fCGz6CrjcfhxHy\\/XCEWqGY6+aLyMjkeaKQ\\/DsNiMwQf0GECOIPYYdrGRz5j7\\/HxhBY5\\/X8PHZC0GxtwPxgjjlp1VEc3EdkWQ7eTmnMDenf6OeGkPpNiPYYd+snvHxHz74IReTmNYcRx7PsMLQHeCOmHwbEHlDYNiDyjjVDMEekdsIw5UCklJ5j4PpGUIKGR7d8PDhx039fKH98WEZgjphAjiD2GHEJLG\\/Pp8d0OIOtvX6+vhBHHKGqojoPs5vZDdYyUevf49MPn08Ff8X3kfGGixuz6D7PGUPoNj46QQlCaxwPo8eOaFItUMwfX6oV9Ve7Q\\/ba\\/vhSTYjv09sNljdn0cfHjjDdY3Z9Hjuh0RmCOrd47YQO8EdMZKDpbkfd1eHoaLGY7N\\/j3+iEFjMHq3+PRDrjDcjiD1gxkIOhHL4dfGDrrdDYjMEdMIHeCOmHJGRI6IbqGRPbC4cQd49fXuhtwhAjIkdEOVjJR69\\/j0wgv63aPs+EPjUA8wIciyN6HIxYxBmq4o4DVSbyZqUvL4mWkw4pKGxOyXktAvFhsqQS5MTkm5asyzLpcBSxSqi+lCsn1o0Xx3\\/oqYvOYE6QmFuJqnlsUyhXPKS9y6pXquWnXUOUK6EqbRufW1Q6lPTUshQUkTrMrMHJaULRGsc0BOJsJ1il9mHX3JQzEkLDN59KETMqlJsSntXWhLrUAT2bq02IUQZps8xGcK4yoVZU4W5ZqdRLz5uQn6PnQZWcKhuV2TDqn0JOnatNqBCkgifVo6XBsn61azzvmPpbrUi2sjc62UStQSngkqW15E4lB84iXeWSsHzI3nym3RwMlV9H3S3t+mrQZ9mfwRxCqDDKG2kz9PM9eeGc1M7JIW7OTkq7f0i9PTAKhKUiiSIe2bMswjezYVdFvXVQK62+DKtTjPlDqFDUVTpxJlptYKVFK0+SPOOs5HJS0NuZ6uZP0PKc6On9lPoL6QmFMjIKqN0LsmZvawGmGg9OOX3h66zeVtyEgRmWpi4Jmim1nHWs8pGuTjZzS4oC0PJbr5xjsWqeDppXa1LBc69LSiFHO79Gzyl1WkqUokq1mhVKc2ACES0shAukWjofbNQgZ1+aaRdNUlEzbZA0M7JBKHkIsN7jaWSo29JUwsnfePOwk5tE\\/JSs6gACYZQtSQTklZGS0f8RwKQcyd6YvWOB9HV43x8fZM8HpGZkFKzVKuh5oZ5\\/Qv\\/XCR0IdSpSuO91MfZL+qer9HxjDmGSw+61bRCzkvr6BspGp3+iQD3xyctORakfok28Dqn\\/ykfrhqscD6PHtjdPyC+kGnBvToo1hVWeRK2tpC2rV8M5sPqcEqzdkl\\/312LOlLRzM9NVSjTdpSGsl1tLl3O66G8\\/KZfS0oZpPVv8AHoj6ewL4r2GV+WRiTa0yqSufD67rbve3ZtKlJMrXLVrElXaU+FJIUNnPSDCiU7wBn2bnC9XXQa9SqugkeYT0u84E3BXLheSaaBGv5WWW60ba2XGTKTKpSZlplN7sPJXYfnJSpJWk3IuFIzJtcaHeN8ep3BHXGEuI1v4w4X4dYtWqta7axKsi2L6oeu42683TLpospW5JiZLRUhM3LMTaZabb3FmaaeZWApspHY8fQZtxDraHW1JW24hLja0m6VoWkKSoEaEKSQQRcEEGLjSpK0pWkhSVpCkqG4pULgjuIIIgggghcKgggggggggggggggggggjUPy2eOq8G9BS+KDTp7yG48bq1RcIqVsyTMGk1YzNbvRWzGR8jmbQoVXoM08v6NCq7LMqJdfaCtvEQ\\/PlDWNxurSAwnwJp02XKbhNYc1ddcYQFICLuxKnGVplpoa+o+5IWpbdvTsksozl27hm0tO5vugV1tWrn0DgSuzCFFMzOS30VKkaK7WpKEs4pBBBC2ZVcxMJN9C1eNFiSb80pE0oGy30iVb5kvnKu3G4Z7VQtrdItbfEe1G89nv6\\/QYXQM1dm\\/4e8iEkDcT0\\/D9MLoG4nry9X6Y+fSvqnrfpFOQsgZq7N8ZI6JGDDmkJpJ4O4RBh16nXZelOTcmxVquM2fRi7XbxmW3PqodYtal1Z1hSiEmZDTefnjLHBA4n0ePZG\\/HkJMGxW8UcWcc6lKEyliWxI2JbTrycml3BecwZ+sTUqrPW8rpNBoTci\\/r+Z5PdIyCnSFMpaIStKlAFKSFKCvqkJIISrUaLNka\\/paAmwje4Ypf01XqXTikqbfmkGYAB\\/oVkF+Z8CWG3AknTMReJONyT6aHbs\\/MsajBZlPJpNDYShLbroEtLJbSjJKUsqXtAlBy1EqAO\\/dpi5SzGoYDaGuL1xyc75Lcd10f9TG0SHSxMKrd+h2jTExJOJUFJnqLba69cUsobwujZ9R2sYlTyizT6UhZ89a595IJz1UAsS+snnQpSpjq12knjwiccvljOJu68FNH2nzes1QaRU8VrpYae2jZn66\\/N2vaDD7aFhDE7TqfSbqmVNPgzHklfkn0JZYeSuZrCsMHHO1bDlHcZK6dQi2\\/Noz52vyQTU53Nu9CYDUjIrskELsCrTTtCtVH8FdnVeqSF5JypNKkpQgZV9pNnzFlSP40uhczOJJOoQTY6Ax8KRIO1eqSFNbz1pyaYlypIHmIW4A64cwdzTWu4rIHzUHzVRmgwy1Lssy7KEtssNNstNpGSUNtoShCE9SUgAZ8w6Yx1wipQm67M1NaM26VKkNkjhNToU02QTxyl0TQOrvGukf42SKBrKSOv2DefjFyYqmu0nGpUH0ZZvMof8AaPWUfGzYbtyzG28xw1UHMzqW76Ni5\\/tl2J\\/8oT7YdoTqoA4HLM9RPd8IcoGQ7d\\/dCI3kDphxwiJLOgHP7I18EKoG7Pp+HgwlC4GQA6PGfphvr2QQ4YTmSro3D08YcxY2nVQBz5ZntO+L4YUbkmGFG5Jgi5CdZQHXv7OeLYcMJ4q\\/4vuJ+EMKNzbgNPnDg9FF+O\\/22+z3w4A4AdghcDIAQmgb8+jx3wukZkeswws625anx6+MNQokZDrO8+PG\\/OLoIqBmQOmEbo8OmvAA3i9Cef1fHx9kLoGZz5h74s4QuBkAOB5+3nhgm5vCE+kq53Dd48B9v64vSMz1Dj46+2FotSMh1nj3Rd48euGFG57hu+2FFVhfnugh40jVTvHnHeeroHjnjsXCC+KNhtiLbV73Fh5aeKtEoj84ajYN8NTL1s3BLztNnaatqcEm828l+RM385Ux9QmmJWqykjNTMnPMtOyr26fCN\\/kgtK9MpQblwyq2i3idPhqVblGL4uaUt6emVkarVt3E7OVKy317Z0MMtV617cqs264JeVk51tpsiUUPDshWpZ9buLMN0GaZcVaWxFMzFMl3ZdKGz5wmpqlnaegla1N9g8+26OzK1AIUknYUulGrLEuxOybM4tzIzKTSn2lzBITlDDqWHGFOLUShLS3W1qUAEBV7RoaQnPfzc3f6PHPCsbp8WuRHxpl5eerujHjhg\\/jNJy2u59xt8t1jDKtsJShKm6dK3jbr2KVCqlWmm0rVLJrFv2VJF9LUtMzkqw4ufY0v45W5izop1qXoGldghilo9uz05820q57wocvXcLbinkspmjK21i1Y05dFgVZ9MspEw\\/LKrkpPSaVBE\\/JSrgQhWbUdmmM5KUaqSKQqp0x9pL0tUaJMSlZkn2FgFLzLtOfmCtpQOZLmQJUn0gbDTIqOF6\\/SytM5TZhotqyLKUh0IVpdKg2VFKgD9VQB0OmhhAAk5CFkjIe\\/x0QwpVTplakZep0ioyFWp80jXlZ+mzcvPST6M8tdialXHWHU7stZtxQ3ZZ7o5NKdbs8bor10KQpTa0qQpCilaVApUlSTYpUk2IKToQRcEWIFoj6UlJOYEKvYg6EHiCDuN73vr4aiKpTnvPD3+PHUsAVEADuA+AEABUQAO4D4AQsAAMhDUClZfEwAAD3npj6my7lnLQuWkXHJFRXTptK32QvVTNybn0U7KEnzcpmWU43mcwhwpdA1msx82lHAn1d\\/d+iFAOYeiGphhmZYelphCXGJhpxl5tWqVtOoUhxB7lIUQeI4EQ5JTs1Tp2VqEk8uXnJKZYm5WYbNlszEs6h5l1B3Zm3EJULgjTURu45NzHhDl5X\\/AIM1GdLlKuOo1m\\/rBU+pQUmcS+FV+ly7as3CahShK1xiWGyYl\\/mmsPHN+bOtu7ap1j4pWTdOBeMNu0i98MsQ6HULWrluXGx5TSajTKu0Zabo84gqS43LzWvryczLuMTdOn0sTkpMy8y2w\\/LQ9sEMQJnDHEvD+\\/5d9xBtK6KXPToZWsPTVHTMIZrEkAkhZaqNGfnaatAz12XVpAGtqxLTZfZfQ2\\/LuodZdQh1p1tYW242tOu260tJKVoWkhTS0qIIJ7RWlLxdW9kGO6ZibD7pHZ\\/kZ2SdWpMrWJBCm256nTqU+g4zNy\\/YuBRQpbEyW5tpIeYaUn6OS79P2g4RpFYcaR2VeprUw4lCc4k6i2ksTiGr3v5tNpeZNyA6lC0rBC1AwhtKnRou3kl9MSf0bbrn6hWtF7GKYnbw0a8RKw404uRo87PNszVvVucb1Zdur2vVZpu3LwbKJZDrjtvX0mSo9Jul2XT2JkTwGfjn6IlH8qfoYU\\/lJdAu\\/sPJClsT+PeEstMYkYJVEMsiquX1b1Nm1otlE4pvbinYnUJM\\/aM7KKfakvnx6iXBPIW7QJBTUMPRBxem8ScO3LcuRbwvjDx5q3683NpU1PTcigPNUeozTLw8pRN6ks7Tantc3jUKe\\/NOhszSG09f7T6NRsSUGi7WcHWXQ8SyzEzOtpCc0u88oMKXMJQVIbm5SdQ5S6khKzacbaJzOLfdVxLtGwo7QanMLDRRldyTCRfLqQEPpzC5SoFPpG5WhxhxXpOLMZYahPV7+3nEV2Y5yfd3wpBFBFaudvCKzi3UT0e098chIJCUvAZfWZzOWRGSXsgVc+7PduyBB35bmMcpT2nHCW2WluLfeabaQ2krW47kpKWkpRmtalKdSUpSCV6+4EgRhz6rSb9ydyND\\/dEcTyGvfaLV2Isuv7UsJobzDJMVB5ZTpZtikz7q8x4JUlJQb2BKgm91CJbGC7oODuEqlqWpasM7EWoq89ZUu16UVKUo71KUFZE8BnzZ7sosIp5tFbqNLcCVMVOmrOo4Apt52WcBCFoOaFpVLzMykhRy3b0gZx0FatITblr23b+aT8w0Cj0UKbSA0fmyny0kNmlKUpQ2NjuyASkbshmM+08P5sS140JQUr6SaXLK5ioTUu7Laqhl9XJ05nPzcknf9eK22MYjXQNr2z+qNOBCPwspcm8pJsUyVYmU0edtrreSn3wQd6SoAi4t3BiKWE3R6s0QTmlZh1AI3rYHbt7\\/AOOhPO2+IKNuWQMFcWtKTRlQViV0ctJTFnD22NdJQt2wDddTqFkTxCjrNiepjrr7bJKkMM7ENrUk6rfYRBHEZeObpjtzlIqI3YPLV6XtGl2jJ0\\/FrC7BTFKXlwSlh6dpOH9l2rPPoSpCFKemqomvz69TygF12dUHkfsCOq46i2vUtNF2hYhl20ZWJiaTPtAC1\\/PG0Ovq5G80ZjvIAJtuj5zYllUydbqDKRZHbKWmwIBzfXIB5uBZ52sTqYalIPNkeoeAfRCZSR1jpHx6IdlAPDd7vs8boTII4+g8x7IrlLnI37j18xGjhqQDxhJSSN\\/EeOMO1Iz3jcfZCRHEH0w6FBXjyghsQCPceiESCkkEdxHxBh2pHEj1d3d+iEiARkYVCkqtpvHw65QzUnLeOHu8eOtJQzHu8dEOyCkkEdxHxBhBScj1Hh3QA2N+UO6EcwYakcQfTBCqk57+ce2EofBuLw3qhXcer+I63wktOW\\/m5+qG7qNYZj6w4dfVD3jCBGRy8GHkKuLcR8IdjjoIWdRqnWHA8eo\\/b784RhcLQbG3P4wioap6uI8dUN1jI59O\\/wBPP464eKGY6xw7oQIzBHE83bzQ8k3HuMOKFxb2Q0Wnn9fw8fbCcOOMIEZEjoh9BuLcR8ISg3FuI+EWqGYI9XbDcjMEGHMIrGRz5j4ML3QuGpHEHsMMVp1VEdB3dnNHIrG\\/Pp8d0NH08FDsPw8ZQ+DcA8xCkGx8dPXDeCCCH0m4Hdp7IFCxPtENn05EK6dx7Rw9nuhqsbs+j4+BHIOJ1kEc43jtEMSMwR0+M\\/RD6DceHwhaDceHwhCLVjMdm\\/vi6A7wR0w4DYg8jC4aLTrII4nLMdZHf8YYkZgjp8Z+iORO4kdEMVjVUodfsO8fCHwdxHiIIawRcoZKPXv8emLYcXqAfb67QQgRkSOiEFfWPjjvhysb8+ke0fZCCxwPo8e2HmzqDzHv60h8G4B5iGqxkrt3w3WMldu\\/4e8GHSxwPo8e2G6xuB68vX+iMhBsfHSPYbL3Ht9\\/V6BCC9xB8bv0w5WNwPR8f0Q3WPN7Dn8PjD0KSbKHfp18YbLHA+jx7YQXwB6\\/HuhyoZpPr9UIK4Hs92+HUbvA\\/f8AbD0IePHqgggjIRu9fX2wRMS5PzFsY06KGFtfmpszFetuk\\/qeXQVOl+YFXsrZ0liYnHFElU5V6Cii12YKt5VVufm3j4Y1wV6yqLNLXtJqXlxTJ3M5q8op5EvtF7\\/2SYl0szK8uZ7gMwIh+cijiz5NceLmBs\\/MoSzWKdI4m220tezSJ6jvStuXS00FnVmJmdkqhbMyhlv6VEvRZx\\/JbaFqYlS6P9X2UxXLfccGT6G6tKJz1fpGlIlZ0AEkKWtDkmrdkcmVK89P1IvsGnjgPbtU6BYs0nGUvNSraSshgPrT9M0pQTf6zTyJylM3T9aaUM2oJ7Nl5\\/8ADDZRQ6upXaz9Hbal5skXcLkkr6OmlLNrXfaDE+uxtlINgfRHnxcoRgP\\/AGKfKA6QWE8tT26Va36oFQuKypWXBEkxYOJLbN7WfJSjikoDjNDkK5J0GYISUsz1InJdSithaox4IzBHSMokd\\/KesAVyFz6OGlJSJVexrNLrWB94zjUsltiWqFDfnL6w\\/U9NIIL89VZOq4gNAPpQ4iUtyXSy482NSXjcU2cE\\/ISk4CM5hltawMtzoBS6ncAPMdStO4ZbovLH1L+ja7NJQkBpbqlIt9UNu2mGQLb8qXFNk77tWJ3W5Ur0n5nUJhoCyQ4ootuDawHGhcaGyFhOgGqToDoFeMNiMwQecEQ6UMie32c0N1DJR7c\\/XviEX3dxv17I1KDqR6+uuETm+QAx8OK2g5LYcVSeVNXJo+3vXLEW2\\/rKmfuQrzpvO0JpThUsLlWTV69btPRk0tiWtpLGy2TTLr28yIR3ydvHQ4faYd34MT8+4xRsfMOZ9qmyIdKWJu+8NVTF3UVxxouJaUpmznMRGkKCVzAdfbQ1k0p6JuMdzbLax9M4KpDi1Zn5BtVKmLkqIVI5W2MxOpUqSMqtROpUo3vvNoYdmfOaVL3N1sZpZd+HZWLf+ZU38bWtBBBBFhRvIIIIIIIIIIIIIIIIIIII84TTTxpVpC6VuPeMTc2uepl4Yj11dtzK3g8pdl0N1FtWO2XddxCgxZ9FobADayyA0Nhk0GonRcoljIMBtCrSLxFl5nySrS2HdUte3H0LCXmbpv8AdlrEt2blkKIU49TqrccrVVNpCvoJF51YDTLxT54A3kDpjlryjq1f8HcPIVu85rM0i4vfWSkVEbxYfSI10NwUk2Nq9xvN3XJSQP1UrmnBfeVHsmSbcgl8c\\/S4D6y6eA7PfvhdIySB1QjxhwBwA7BHLDnD19e+IDCyRkkev1xM35KLCJGE+hfhxMTMoqVruKT1SxYrWuhKXHWrpUwxa7qVfWMu9Y9LtiabJ80uTDy0ZbTfEEwvsOq4o4j2DhtRc\\/nW\\/Lxtuz5FYSFpYmLgq0rS0TLusUoDEmJrymYddW20zLtOOvutNIUsT5KXTKTZ9rUyg0NhuTo1sUKQo1GkkHWRK06kSLNPpsqkk5lDMuxLsJz5kjn3RGa\\/U0yLbLVkrU7ncWnOApLTQ32sojMo+icpB7NQ4ERd2xWimcqVUqqkm0ow1Iy5KbpMxOrK3Ck6DM20wlKtdEzGoINx8Pc75nq1OupUChpYlmugIlwUKI47lO660nPcFbsyI8\\/\\/AE8sZTj1pdY64isTonqNNXxP25aj7S9aXdtGykNWhbUzKpPmtN1KlUaWqzqUgFUzPTLjgLri1Lmi6b+MLmAWihjtiqxNqlavQ7EqlOtuZQ6WH2rwuxTNp2nMNOBSHFKk7irlOnXEtkPGXl3dRSFfSIgDyEm7PzspIsjN2cmmJVvcSNd91DSSR0ArBPVBsZpZcncS4qmkFC3l+YsrWbhIcWJ6eANzZKAJIJA1CLgm1on+3erpaYw7hplYyMtrqkynUaIQZGSUeF9KhmzX3hQte5yfwupXzda0vMKSA7VHnJ9RIGYaVkzLJz50lllLyRwG2PPrR2awN6j0AD1n7I4+TlmpKUlpRgarMrLsy7KTlmGmW0ttg5ADMISkbhlu3RyjIyRn0kn4fCN3OTBmpqYmTf8ALOrWAd6UknIn\\/uoyp9UcmurLji1n85RI7hfQeoWHqhwgb8+j9EKxYgbien4fpi+MBZ9I92nXrhEXIGauzfDhA1lJHSd\\/YN59kIoHE+jx7IdsDeo9Ay9f6PbCFGwJ65ffHijYEw5gggjHJsCeUMjUgcyIIfITqpA6Bv7TvPtho2M1pHXn6t\\/wh8BmQOkwxC18B+ru+2FUDIDr3+PRC6Buz5zw7B9vwhLjC4GQA6IxybknnDcVhRA4n0d\\/whOFwMgB0QhZ0tzhCzpbn+uL0DM58w8CHCBmc+jxlCaBkM+c+BDhAyGfOfAhhRsCePCPQLADnYm\\/qv8AL2eMXQAZnIcTuEELMpzUVH8Hh2nuEMwhZubcuvu9UOEJ1UgdA39vPC6Rqjfz7z1Do9EJpGZy9cLw2s8Pb9kI3Rmno66ZOIeD1Yp8vVbhuGboTQYlZWrSNSm27mt2WaSllpElOpfQ9UaO2y2hp2izji20SrTLUgplpkyM3vgwI05bMxtk63gxpHUezsUbIvdTtOo9RuC36BVrXvKhzbjRlrbuy26nTl27U1LW0kyYn5FtM++BJz6E1ViWM9FNAzOQ547owkv922KqzSJ6ZcTRajMNpbcKj\\/uZUVrTsZttW8NsvOajU1kQlB2U0dXZOB3RytQxZs+m5nEmzatTtDmVZn6ph5lXnGHK0kKSp1+ZoL3aU9U+UJKFTLTDc06hbnZvNzKw6q\\/tmG0uVmHpTBu0AJqNEmi3JUquTSgahQHlnJLsrn1WecpK1lLamn3Fok7oVcSjam0bI9OD5P8A0aZlK7j7yVF2pwqvZKnarcWjLV6y\\/M4S3261LocelLPfuOYmTYtxTTjTyWKJcT0zarrs6iWolSw\\/kJJpL8fLDbHadqF5VzBjGO0anhFjtZ9WnrbuSxLikpukvqrtJW4zU5BiTqaWp+nVWUdZdL9CniuaQ3k9IzU+1tVNTGdAjSorGJVpT9OqVTJxEw5nG6PXlPKB+6e3XXH00KszLPmB915Eu7TaupGu6J+UFRU6yuqy6G+jeWe5LW2OUUwRm9IvAqitUHTRwVoKqlRV0RjyapYtUKhN\\/OT2GtYmZNLc7N3Ew00\\/O4UV87WYlq0DbEw5K06tzM\\/QegMFY2wZ5QbM7h+t0yUwhtXpko5MFuQv5nW2GG0rM9SC4Q9MsobKHpijTa3ZmXlVF2TmVoS++1JtpmyFunh2dk0FbAUQl9CEpdZURdCHkoypUkgWTYJQvVLaJd0pS5HwAAHvPTCqE85HZ3936I730AdAnT30qsMqZWLywQuPCR6mzLNHevDHGm1bDKTuqUMtLzEhdFMoVVpS7uqknNyj\\/wCvanRbYnaS9PMPuSUzlNMSTe7bDvkOLWprTFQxsx7n5hkFHlNIw9odPt9lsJGaw3dV2O1kvhQKfrWpJqbBJOtwbjzGx7H78xNt\\/Q3m8pJuuIdqk\\/NS1PppbbKgJlp+cdZW9LrCbpcZacKQU9olGtuepbB+Ipx8tMU51QzlAeWUMsrsbZ2lOqQXUG+nZJWrhlCgUiOuASchCqUhPWemJc9o8nzyeOGzTO0w\\/ZvqqMDI1G7rium7HJkpGattTpOdlbSPHLNujNBagOYDV7\\/oFv6L1iBtFj4BYd0JTCm1NzNGw1sajOLcZEvs5lc5LySZ1+ZT5M0pc5Mhcy48w06t5xQDka2cwzgGikt4o217Oqa6gkPStHn14mm2VWuEOy0gWnkq3ZkqSmxIAz3STOafsTxjOpSpbAZCgCLS8yoWNr3W+3KtEi9jkcWn+NyhYU1t4omFhtamkpaLrgSSlClFaG0qVlkku6yigHLWS3mnPfErjR3rqrkwFwerLq9pMTmHFnJnHNcObSelaHJSU+vW1lHNc1LPEpUratb0nzkqEZkVfE63qpRZq2ZqwaRU7bnpNchOUOqqkZmizck4FJfkZujrpT8jMybiFBLjDmsyoLIWzkIx3tW07csehSdq2jTzR7YpLk6mh0gzLs4mk06aqE5Oy9KZmnht35anCZMpKOzGvMKl5dgTD8w+XXlc3baXtnWSlrwPtBl8azPnDqKiynDVdoJk0hoBLzT1TaMrONOFCUK7KYDiFZVJbcbUS31jswoVWwthVjDVVacUJGbmZmUmyqWCFNTrqnnJfsGpiYcZLbyluBa1FLnaLJDakhKu5cNK4aRdUk2pzKWqoNNmAVZpJmFASqhrKy82b2IGZHmKd\\/GyVB85RTRPxA0P+WKxHXhlhpetVwb0jJum4jUn7kbPqtWotOlcYpyYNw08fMNKdpVIYt\\/GGkXGafT2ksvU+1W6ekIS1MBbs0Nt1TLjTrK1IcaWlxtxJGshbatZKk5jIaqwlQ3ZcB2dzDGyuebnSKTzA5qmxn079urLPfnlnmOIi0fJ\\/wBt+BcPbPMUbPNpdTnpGnzFRXN0F+Vps3VChiqyimqpLtplkOCXErNS7E+znCQuanHHG8ykrMajaRgCaxYppUihsFcutiaWpTaSMos2oJW43mUsOEAhV0mXbvYWCoWlTwixVoZdFcwzxAoxYLQf+dbOuOnFkvJbLKXRN05nZl5LiC1r5BwON6gj4Us5KIVmlSDkRlkQecEHrz5sjzcSInHtY3zyctrQJVzgfMqDzauIz89cu6nLn3JOrnnvO8\\/OXRUMEsUZZUniphHat2MPJSHBc9r23d7SVISAhxDlVkTMNqZASGH5dvyhnVQpvZFOcShiZ2AVhxLNI22NyEyq6UN4jwhXKdKrWbJb7SpOty8pKovo4txS8oOcpASRFAzvk+YmYQpbL5dCRdKOxlnPVdifcdJtppLrueOtjCTDKOs9p7soyJ0W7DViFj3hNahYU\\/Kv3ZT63VmMxqKo9u61x1dBWSUoRMUmkvMJzO9TwQMnlBKpCOJ\\/JU6H2MbE1O4U1OsYQXO6lbjaLbqExWaAZheSi7P2XdMw7OiWbGaUS9ArNvyyVfsZWFZHCfQI0ZrjwsxQxpr9\\/wAjLsVrDyvVXCGlLYD7klNVKQnWpm5qxSHZluWcepzko1Q26RPGXSuakqnOtuJlXEPMrh21jDU\\/gjDDVcRVKHiGhVdT8rSMQ4cqbNUpU3NhsBtgPslJQ+EO+cFpSbLQy6WnXOyWoTrYVgGoYexbW6pW0NNTFMo\\/m1PazLDi36i+lD0yhp1DT6BLMS5ZcK20A+fDJmIJTtdzT+L\\/ACjHPWu\\/srjt53P9jrlKUdQHelM+wSAMwfPSSk5kpPPmBu+fjmrZTtbjt9AIzXW6SgFR3DXnmEgngdwJPNlx5o5awjNOpxVhotJT2oxBRi1c\\/wBUFRlii2oG8i9yB3239LT6QZKbvu82fvck6dkq\\/PhfXdzHERWuXQlZS3eWpwTeln5kv37oWW7Nz7cwQ42ibk70x8kkMSmyZbUzLeRWVJzavK1zJVNKmyh5LTsuwxjFGSHL1VKRnuWz0Y5SUmEvPUbQ5pFMqjYSvOUnXbg0paw3LqKm0JUpVMq1PmzslOI1ZpCQsuJWhGPikJVxG\\/pHGPox5RgQ3tAaKR+20OUWo77rE\\/U2yTx+q2ka33G2mg+cuO0hOIHSkD0pdsm27N20wFfDdvB0NtAGUBGe4wottSN\\/EdI5u3v4QnFEA31BiGwipOW8cPdCakhXUemHUJKTlvHDnHR9nu7ODqF7gTrwPXR+JDUgg5GElp5wO3v7\\/wBMOlJ1h1jhCJHEH0xkpVcd43\\/OCGxAI9x6IQI4gw6UnLhw8boSWN2Y9PX1+iFQtCrGx3Hd49db4ZkEHIwitOW8cD74dqTmOse3q8fGECMxkeeFJNj3Hf8AOFqFx38IQixYzG7iPBHj0QoRkcjzRSHgbWIjxB3jl18fjDVadZJHSN3bzQxIyJB4jcY5FQyOXqho8nJQUPwuPaO8RkDUA84XCMIrGRz6fGULRasZjPnHgwpBsfHT1w8k3AO87jz4X+cM1jInr3wiscD6O74w6WMxnzjwYQIzBHTD6TYg+3whB9Fd+B8fX8\\/ZCEWrGY7N\\/fF0HGH4dhqsZg9W\\/wAeiG606ySOkbu0bx7YdkZEjohuRkSOgw4g7x64N0cdBF7gyWodefr3\\/GLIfQdSO68OL1SD1r0IIYrGqpQ6Du7DvHsh9DZ8b0npGXq\\/T7IyEHXxHX2x4g6+I6+2GSxkrt3xbCixwPo8e2E4dh2Eljfn0\\/ohm+N6T0gj1H7YfLG4Ho+P6IavDNGfQQfh8YeSbgd2ns+6CGCxwPo8e2E4WUM0n1+qEYeGqCOW74wRYsbuw+PhCC\\/qnq\\/R8YckZgjqhA7wR0wps6DuPyMOo3eBhqoZpPr9UN1DNJ7M\\/Vvh1xhuRxB7DGUDYg8jeF9dbobK4Hs92+G5GYI6RDnhDc7iR0RkQbvGG\\/GG\\/CHJGRI6DCCvrHxx3wtB1I7rxkb9eENjuJHQTFIuUPOPjiM4tjIRvPh18YIyd0LsWf1FNJ\\/Bu\\/X5tEhR5e75Og3NMPKylmbWu5Dtr3BNTKd6XGadTas\\/U0JVmUzMlLuI1VpQtE4uwKqqgXdRKgpxIY8sTKzSiDl5LPBUo+pW4FSWkuh4c5U0nhkY89eJueiBikrG3RnwaxIdmfKalWrLpsjcL7ju1ddui2y7bFzvLJUpaDM16j1CbQHSp0MPp11rzCzWeOkTNIrmF8YU5CvPaRPyy0LSSn8vT5pFRkQog6pUtEyHAbgo0sQSI6X2BVVualMUYRml\\/kZlkVJhs3PoPNinVEgHccpp+XKL3uTujtrlk8AxpC8nZpC0GTkkTly4eW6xjTaaljNyVqOFr5uSuJlEbi9PVKxWLuoUqynN156sJQyhTykIPnp2NOh2RmJFSs1Sj20b37wzMAnIdOTqHCVHhtBrZ7o9UChvSN5WZKpq0tLVORrlEdp1akptpEzKVBDzDlPq0pMsrGo\\/LzJEyy60tBS60soUDnHmE46YRzmjVpVY14ETynlow5xMvSxJKafCg5UaJS61Ni2KyUK87VrVEbpdSYKwHAzUU6+rkUjs\\/aE3L1ukUXEcie0lqjTmZhlwfnNOson5RWnolTku++NDrlAGYC8VvjunLlpkFaQl1tT0o+AAMr0o4R4kkKcQDa+VsA20EcOv63aPs+EN18fR3w5c5vT8O+G6+APjxuikeuuUV0g2V46R3TozYyTuj1pF4KY3yKnycMsSLSuuflpcqS7UaDTavLm5aRmnztlW7eXUqS\\/q5qLE66E8BHp1SM5J1KSk6jITTM5IT8rLTkhNy7iXmJqTmmkvy0yw4gqQ6y8wtDrLiDk404FA5KGXlQvjck8+\\/wBRyP6I9E\\/kmsbBjzyf2jpdMxPJna9a1nfqWXOkqSZqXq+F829ZcqZ\\/UzSZyq29SqDcBXrKW8xWGX3yiZdeaR0hsCrFn65Q1q0daYqssgmwCmViUmyOalpck9ALkNEm4GkzwhMZX5uTJuFtofRf9JshCwOZUHEG2uiNNxMbIIIII6YidwQQQQQQQQQQQQQQQQQRHM+UTYxmg4JYIYHyE1qTeJF\\/1a+602y6dsbfw4pCadKSM6yM0eR1GvXrJT7Jc1VOTdsnZKOweziOJ+sPHDfG5bl28Xf1RtOusWdKTYfpWClgWdYKEMuFct881SWmL\\/rj4PnAzaHLukqRO6mQQ5RW5dYDzDwjTUjiezx7o4D2v1g1jH9dWledmnutUlgXuEJp7aWZhI9JQsZ7ztdha2exGbNFN4jmfOqxOLBulpzzdHcJdKW1WNhoXAtQ3i6iQbGFkjNQ7c\\/VvhwkZqHbn6t8Io4ns+Ihwj63YPs+MVcs625Ro42mckLhi1fml9SLoqDTTlJwntG472dMygLlnKxOMt2jQpfNfmpnWpm43q3I55ZOUNbqPPZMSxK05nJhpCh9O4N4VmC2jJZGQzy8\\/U4AcD2HRnyLmHkvRMIsUcT5xLbU\\/fN6yNsyKnikPKoVkUszG3l9c5oYm6vdVTlH0tapddpCduF+TS5RupCRkDrA63nE7+J6hn45t+\\/mWvYs+ntpVUw\\/LMtPytFaEs7MtzF3GVyrLa5lDjKUqAKajNLlzdbZFgpRJsg9sbHcP\\/ReCKXOuAoeqr8xVVoUnQh1wMShCuKVSktLvJAFrrIFiSTHz5f3F77nsGcHcEpGaQidxFveo3rWmmHvpRbuH9PRJSUrOMpUNWUqdeuyTnZZS28n5q2VhpYMo6DGSwspnl91MzCk6zVLln51WeeqXSkSzCSfxg4\\/tkDMZlk8QClWyTlrMXf1S9OK6bbk5tE3R8G7StbDiSLJ\\/W\\/zl5K5d9yKyIH67lq1dEzRJ1Z87a0ZDWam2UKjB7Bumhmk1GprSAufnUS7ajx8nkUZhSeYBT0w8lQH1tknWy1Rl1bh+UTQMAyqAnI9PMGYX+kpdSXnF72IUiTKEnj+TvHPm1Ws\\/SmKa9MJUFNy76aVLWsQESQEs4UKG9K3kTDyTc37S4JFjHc3CHyBklI6hDNIzUkdY98PuMRmKi4e37PnCyRkkdmfr3xdBAN5A6Yx98ELJGSR6\\/XD1kZIz6ST8PhDThD5IySkdAHry3\\/GG1nQDnv9X6+fCELOgHP7P1xdBBBDCzpbnCUb\\/AQuwN6j1AevefcIeIG\\/PoHt8Zw3ZGSB1kn4e4Q6QN2fSfZ4zhhf1T1xhKjcmFUjMjq393tyhaE0c\\/o8e2FIZjyLkjMiFwMyB0wkgcT6PHshdG89nv6\\/QYaWdbcv1w2rVYHK3zPu+EKgZkDpOUOOEJIG\\/PoHt8ZwrGOs6gct\\/rtCybXPKCHradVIHPxPafVDVCdZYHEZ5nrA7\\/jD0DMgdPjP0QiGIVQMhn0+6L4BuAHRHMUKg1u56xTretukVOv16rzTUhSaJRpCaqVVqU48rVZlJCnyTL01NTLvBpllpxxQG4ZiG0IW84lDaFOOOLShttCVLWta1BKEISkFSlKUQlKQCpRIABJtHhBVZKbkkgAAXJJIAAA1vcjdrwji0DifQPHjnjtLCfBjFTHG52bOwlsS4b7uBZaU7KUKQLzFPadWW2put1R4sUqg08upLXznWp2nU9teaHJoEDLczopcjJXKxKSF\\/wClpXVWLbqUszyMMaDUJZNyzcsQl5CLvuVC3qdbbTgUEv0ujmo1hSFlp6oUGfQpobrbXmsIsCrZRY+BNg21alBlhkRS6a3TZF6YbBQZ2eeBFVuCoqG9ypVebcnHwSt2bmxvM5m8L4ewRTUYg2u4plcD015rt5OiaTeL6u2i9xJUdsPPSzZV6CpqaYW3LOW87aZbIcizcI7KcRYncbUZZ6UlbgqUpIS9ZWVXp57NS1xeweUXrC6JdwWvpi0ddBnS10UcTrMxLu+37fqtm16UVauILVnXRL1qp2\\/I3GhpEk\\/WZB1mRXNM0y5WaFNVSaoJrcrKSrT00qYRT2n5tvb7aV1zto1JU\\/KtomEOsOMTMmtZbbfQQS0SsJXqrYcAWhSUkhOu1uS6op+dr18TtbeL9Xq788oKUttlJzlmAcykMMNhMqjI5oKxks55OLXzdOX7jbhthfT\\/AJ4xFvqysPaR9IE1e\\/bvoNpU1WzTruZTVbn5KUOzRmVkTB1Up1lDPhw3jbbHg1raTTsS7HlYgoM1SnGPojtpqWrtcmJ+XeeWmYTT6XIzDMul1hzzd2mTDlUadY7Rt99cu6qWR3fIUeeTh+Xp2IXJecbl5JmSemXc0ulyXYaaaSubmZhxsOzKlJzrmm0SxU4oKQ2hQSo5T1bFa7qiFJYmmaUycwG6cwEOFJAGSph\\/bvJJyBzaUz5wHm5Zx8DNTs9POF2dm5qcd5nZt9yYcHPmHHluL49fDo59QOKXLV8nvhkJtia0iqHeFUl8wil4X25c9\\/eVFJUMpSv0ekzVobiAQXrkYStKklKlJJUdfWIvylTR3pi3mcNMEMa76W2ghL92VK0MPKe+8FkDYGnVW\\/J1UrstRYcmKbKP7RSm1yaUpS65tJ5nymtrzqZibwTtcxSh1wOS7uJ0P4eopzFCguSTiOaptMZYUQFDzWXaYSr6uosNQazgDDwKBW8PSqkiy009QqExcG2V009qZeU4NbhalLFtd8SeFuIbTrLWlKQM9ZSsk5dJUdwHWY4h24aCxufrtHaPnDVcqUmlXm8dxfSrMcMsszv480KzED5Rzjjcjzv3IaPmHVtya1EtSdyXjdN3pSgkea+5SZSxTNKy3aziEp1h5qE\\/VjGCv8u1pwVlevTZXBS0k67a9lb9gVaZQA2yttbQN1XdcrmzdcUJhwlZcS6hAadaaK21Sal+Sl5QlRQhU1hfC9AWoXLdUxfJzZbvlulxVFlqinPuvkU4gG4Di9DGrf2q4EYJyz1UncpsPNKWtvMOafPXpXTT88JVusN9p8q7ztVA1zXaaebJMwlaun6reur0gHo54YP4jWNKnUmbroku4RmEzE42woj8bUdKVaoG\\/PIjrjz45rlouUFmlzBRitbkq2+t1SWZTDDD1KJdtxeaWWHXbffmghsHUQt2YdmNVObr6nNZavm1crtp1rcLjuKFBeWpWspTmHNhKKzmPrrNACzmOKgQroVxiSseRptuJzTNS2bITlFktVjEK13ISdVqw6lItfWyVAnQEaE4X448EbvNMUb9\\/mVLsRccPpW+6+\\/l32j0TZW9LPniEyd2W5MrWQA3L1ymvuHNOtlqImVLSrVB80pz83pzj6ZC0OIStC0rQpOslaVBSVJ6QreCOkx551vctPpgUd1JqtOwhutrXVtUVmzavIubJSmiUtPW7dNEQ062htaWHHWZhKVPOLmGphKUJRkxhly6VyyFRlHb9w+ue3l7YeUV3C69XkJbYW4nXSxadVbpjSwhAKnUPXQtM5vQ8EfXXqql5KO2qmJW4KLR6u22FFRo1blXXSALnJLz4p77lrAFLaFukkZW1\\/m7KT2oYEnFJQqpz1OUrQfSFNdCMxIACnJJU2hAN9VLIQmxKlgWMTnII0FaNfLG2DiW1KytLvOmYhzhRrTNo1uUVaOIskyhKg5sW3GJeSqjcslBfmZuUl62hQKUuVJCleZuWwmxqsHGiirq9m1MuTErs01ahTyEylcorrxyQifk0rczYdCDsZ+VemqfMqSpDUzt2H2Jejq5hrEWGpl2Tr9GqFJmWFBDrE\\/KTEq6gk2SpTT7bbiW3LHsnSns3RYtrVcXnEu9LTssicp83K1CTc+pNST7cwzfS6VLQTkWm4C0LCVoPoqAIIjtxJKShxClNuIUFJWM0rSpJJSpKgAUKTkFIWCdTPMAnIhMNpD0y\\/qZvzb7k3NvEZuzU28Uh6amHckremXNVO0dWpa3EpB1jmSV4I0om3wwqVDzolnHUPOS4dWGHHmkONtPLZv2anWm3XUNuKSVIQ66lJCXFAqypzZsozZSnNYZspIJTfflJAJF7EgHeBBHHz1xPWhLKuaXYamHqItiel2Jjew5MMzLQbQ5kFlKQspSCnJQyKkKSsBwchHUGNVwN29ZC3nG1Oio1Sn04NpWlClFReqCsipJGYRIFRHma2\\/NXMWFT87Tx59TnXJeoSf7KkJhlWR5idlyHZV5pdxlcamEtrQq\\/oqAPA3daZRMOIYcSFtPKDbiCLhbazlcSRxCkFQPcYiKcpVivN438tzM12YbbkfuHwvtW3E05C0zKZJg4PVKtmVS6lKVDazF7qqBMyCsmaWEhLS2EN\\/ZRhR90oxY5UfSuvtLq5iUo1WveiS0wt3aoW3alWtrDamsocCwHGPm2jO+TLRry3k8ujZHVU05GbZRn9Xj0d0fQnGU9WJ9jAzuJZx2oYiOzrCLuIJ6YS2h6Zrc7JLqdTeWhhtppouTc86sNtNttNpKUNoQgJQn5t7TXZdWM6yJJAalG5ubblmgSoNywnptUugEklWVlaBdRKjrck3hOG7jX4SB2pHvA+HqhxBEIsUG41HW\\/wCfztEESrNpuPxjj4IcOt8Vj0j4ju9UN4cBuL9CF9dc4RUnLeOB9kJLTnvHEe6HZHEH0wgRkcvBh9Cj6x7x1v8A1wQ1IzHu6j0wiRkcjzQ5UMj1Hf8AZCKxwPo8eOeMkG4B5wQ1UMj1cRDdQyPUd47vRDxYzHZv74brGY6x493uj2Hkm48NDDVY4H0Hx45oThcjMEdMIHcSOiHkG48NPl13QlXoqCufR9sWLGYz6Pd4+MN3E6ySOfiO0euHZ3gjphuRkSOjxn6YfQdLcvh+uHI4+DjF606qyOAzzHUD3fCLIXDiDqRw3\\/CG5G8jjxEIEZEjoh0sb8+ke3xlDde49vv6vQIfGoB5gR6saX4jr5cBDZQyJi2FFjgfR49sJxkJNwPf4wpJuB7\\/ABhJe49vv6vQIbrG\\/PpHt8ZQ6WN2fQfZ4yhusbs+g+zxlC0mxHfpHsMXxvSeoj1bx7zCEO3hmg9RB+HuMNIfTvHjDgupBHqHqsfughJ4Zoz6CD8PjCsWqGaVDpB9eW74RkDQjxEIGhHiI49QzSfX6oRhxxhudxI6Ifh+LVDNJ7M\\/VvhusZpUOow6hvwhxB0I9fXXGAaERx\\/GG8OljJSh1n3w2UMlHtz9e+MhB1I9fXXCCKQgdxI6CYXhFf1j6PdAjQkdaH74WjeR3dfGGyvrHt9++G6hko9ufr3w5WPO7Rn8PhCC\\/rdo+z4Rlp3DwHwh2Gqhko9ufr3wgr6x8cd8OV8R2fEw3XxHZ498ZCdw8B8IPl4cvb0YbL+sev8AR8IQWN+fSPb4yhyviD48b4br4A+PG6FoNlDv0h5J9EeFvshu4N4PSPd+mE4VXwB6\\/HuhKMhB9Id+nXrhUESUuRHxRVXcKMVcH5yYQqZsK7qfdtHbeeVtjRL4kXZSalZZkq3ytOrNtTM2+poZNzFwp2xHlEvEa2Nm\\/JHYo\\/qe6Ydt2\\/NTOwpWK9tXJYE2XSQwmoCVTdVBWoZ5+UTNXttijyakBSi7WC2Slh51SNJimRE\\/Q55vLmWygTTdt4VLnOu3eWe1QLa+lpFgbLqwaLjmhPqVlZnJg0uYBNkqRUUmWazngluaXLvEkgDstSBeJt+C1TLtFqVJcUC5Tp5My0Dw8nnkHzE5gDJExLPOKCfqqfOt9ZIXCw+Ud4KuYY6dtu4x02XWimY94YW1cU1NlrZNrvfDhQsOtSrKkp1HUy9rUrD+dW7rF3b1N5t1oBtpx+YjhNUfILsbllLGyqkpMSZz3I2zaROMK3lI1spdbSBmBm9q8FGNOvylXBBd9aG2H2M8hKl6p4D4sSCKlMJRrNydlYpSSLYrDilJCtVT15yOHEuknZtOFzeC7sc772Y1AYk2NSss4Q5NYaemKe5mOobkXEzMvpvCUUicaZBub9mo20IFs7VqWEzM+4hNw6GKm2AL6n8jMm1rXuJhw+Ott8Q8W3UzEuzMNnNt9pp5BBBBQ62HEHMbt6VDtixYzHYc\\/h8Y+fs6c8roDCSrNcmtyVX2IIcaB6gw6hI3ZeaM8\\/Oj6FX1T44b4rp9osvOtG90LUgd4BIB8FCxHMGOcSnI4Ungq3v0PrGsNHvqdhHxES2Pk0uNJnbM0j9Hmemxnb1xWzjBbEovJTjjFz09VoXkpoqObctIv2xZZLSVBG3q7royW67rRKXd6FdnuIMbduQvxjGEvKH4ZUubnPI6LjJb13YRVck5tOPVqmpuW12FIO5Ts3etp23INH6zap3P6uvrz3ZdVfojGtDeUrK1NTX0a9c2CkVFBlUBX8VEw4w6SbWLYJ0uRtaNMea1aTcvZK3Usr5ZXwWddRokqC7nQZb2NrGfrBBBHc0WxBBBBBBBBBBBBBDOZmWJJiYm5uYZlpSWZcmJmZmHEMsS7DKFuvPvvOqDTbDTaVOOuuKS202kklITDyMJOUYxTODWg\\/pM32y+iVnW8La5a1HmCUpLFcxCVL4f0SYa1lJ135OrXPKzTTYK83GQrYugbNWHUJ1qnSE9UHzZmQk5mcd1A\\/JSrK33N5A+qg6k2HMQzMPCXl331fVZZcdV3htBWR\\/5YgQ6QmJ7+NePGMeLkw444cR8TL1vGW2iVoMvTq7cE9P0mSS259I21I012UkWGnPpGmJdppeernHUiOf0ePbCCB5vac\\/h8IcI4Ht+Aj5lzcy7OzUzOPnM\\/NvvTLytTmefcU66r0iT6S1KOpJ11JOsUQtSlrWpRzKUSpSjpcqNybd6ib+JMLt8\\/o+MOEc\\/o8eyEEcD2\\/AR2rgnYi8TsXMM8PUocU3ed9Wvb82pvMqYptSq8nL1WcOR1w3I01U1Nu6o1w0wvVOuI09QnJenSc7UJpfZyshKvzky4fzGJZlTzy94+q2hSvVDkrLOzk1LScunO\\/NPsyzKN2Z59xLTafWtYTEsHQ3w\\/Rhjox4K2nsgxN\\/cRS7gqrWz2bia1d4cuqrNP+aFrelZ6suyWa\\/wJdsbkpSkZkVKp061bcqNcrT7UhR7do87V6tOuFOxlKdSpJyeqM24QctmzLsPzCiPwQehIHzNJlW1TclKstNtttqbQhlpCW20MS+\\/ZoQjVS2hDTeolKSEgEZDLdGIvKlYqfqP6COkJXGphuXqd02iMMKM2op2s1M4mTsrZtSTKKI82Ykrbq1cq6HM0uMt0xx9hYmUNCOBvJipc1i7EWN8ZziXFTuJsRNU9DouopfqE45VqqkrKDmGeep6juSlKLqTYpt9I645LYUwzLSrZQJXD1CuhJ0zN02RS0wAnMDdYlylKc2ZSlZQoqNzBzxdxDqWLeKuJWKdYBRVMRr7uy+J5pSgoS8xdNdnq0uUbAybSxKeWmWl2mwllphpDbKENoQiMi7PpvzVbtGkSnVcakW3Hk8NWYmQZmYB3A+a++5vPHLtjEm26cKvX6RTinWRNT8uh5JGY8mSsOTRy59WXQ6rLgct2rGbCOJPjxuj6V4ucQyxISDQyIbR2mQXslCEoYYA1NwAHU91rR86azMLdcSXFFbjrjkw6tRupa1quVE8SpSlkkjfDhoZuJ6sz7D8coep+sO33b4aMDziehPvIh4ged2DP4fGIITYE93v4Ro4WiqRmodufq3xSLkDzuwZ\\/D4wx17YIXAzIHSQPWYfwza3uJ9PsBMPIaWdQO6\\/t\\/VDSzqB3X9v6oIIIuSM1JHWPfDDnD19e6PUWsT1aHoGQA6AB6hC6Rkkdmfr3wjxhxGO5w9fXvhuFkDJI698XRQbgB0ARWG4OuuvshZH1e39HwhdA3Z9J936YRAyAHQIcJ4Ds9++GCbknmYbTqonx+ItCyBuz6fHfF8UTwHZ798VjHUbknrlHqzpbn+uF2BvUeoD17z7hDxG89nv6\\/QYbsjJA6yT8PhGSuFVf0F8F7aaxx04MZFsW4xVZ2Qs3Ryw2pteuHFbE+qUlEo\\/MGtvUqWYpdjWgsTLTcvN1av0SYuMy9WYkatSDTmjP7Wi0ScxBPt02RyB5xKnFuOZyhlhuxddUhpDsw8UJPoy8oxMTb6iGpaXeeUhCn5CRfqU01KS5aDjpPpvuoYaQkaqW444QlKUjU2upX1UJUohJ7I0SNBXG7S8roNm0sW3h7T5zya5MUrklX2rXpSkFtczI0sJDb1z19tlaV\\/MdKcOwL0r87T1IlJlqbiSPghgfovaCltzSMPKZKXhiC1TZhd24s3K7ImpltlhTlSS7XFgSVs2+yhlx1yjUBLcsmXlga5Pzc80ag5E50m\\/lN+JFaoCcL9C\\/AG0cCcMKRIv0W25i7ky9VqkjSEpCJByQsi1naZalEnJVJdW5KVKrXvRHnnAtVPUUOKmNE+JmkXps6a1WdZxCxJxZxfZcnXJg281NzMnYFKmXil1brNqUNqk2DbvmpZG2TS6eClEu0XQNkiLOThDaFT5VbWAjh\\/Z3dvs5\\/arjuVlq9ihlpQsXcG4FbfNDocutOqKhiqtmsKbdW1OUGScQEM3phyn4DwchM9UkP4pqzYCylpX0bSZdd\\/TQZ59JmfR1BVKyo7QgqRPlpeQTpNJ7lstCzCmYnJe9dIag3xX5RtTkvY2C7T2I8ylwk68kKjbypmzKVPoIIcbuK66VOJB+kX5wB0Z45fKVaxNKnJHR10d5WWBU+JK7MbLjfqLq2iFoYL9hWTMSLUq8nJt5ZTiJPt62bGqpIMwvSpYmgTftYLU1fdxUiz5QlKnKfTx90VaAAzU0ssOy9HYK8yhLzVRqAQc1qZWkBLmYNkaGWB9ppZen6JOXnUGgCZu6p1czLlzWK1EUiRTI0lTeY1EtzUpOKS0Ehbq1LWtdNubEtgMjVH69tGxFjfbxi2YdExOz2I65OTFPcmhuWzK092lU8yqbZUSszO1dptFkISW0NoTtKxt6qzTXmlGVIUSUQChEtQZForCDrZc7N9r6ZP1nZZTJJG70jm6LxM5V7lJNImdVSpbG+\\/KBLuqc8mtjAmkpsF1kTJ1VMt1GyJNi9Z5tZAaQip3DUNUApaIW66V46yujBpO4p1V+4LpplXNQqCkKm7ixIuUqqkypRKtec8vm6ncTqk6xWtT0kvziQc1ZoG56jUOi0CVTIUGj0uiSLfnJkqRT5SmyiTlqjVl5JpllJCQAMkDIDVyyjmkjMgevx7In9Nx\\/QsHy6pLZzs7wfgyUCSj9gUuUYccTcHO4mmy9NQt1SrrUp9UyVOErWpaiSagq+0KuVdztJqYmZxYJIdqc7Mz7gJAF0do4A36ICQkZgEgAaAAauba5OurOBl28cSKdJqySZiStqizNSBJy1kM1OqzFKKAN+Ti6Ss5fWb5o72oGgNglTEINXmLxuV7MlwT1aYkJY7wAG2aNIU99tGQ4LnHlkqUdoE5BGbAGZA69\\/jshcbgB0RoqjtQxzPk56\\/My6VG4bkG5eRCRyC5Zpt8jvU6pWls0Rl6u1V4m82tAO5LIQ0B4FCQr1lRPfGPtH0VtH2ipSJTC+gP6oIBrDtTryj+yZlRrk\\/UNb9lVq57gA0EhOxZ1OxqZhFhVTdVNOw0sGQS24l4GTs+3pdW2QEhDuuzT0qLydRJDxUXPNSc898fecYeoTqpA5+J7YiM3iCuzd1Tdaq0ypW8zFRnHid2\\/tHlX3fCMBc3NuH8pMzDl+K3nF7ueZR9UfN\\/cTZn\\/kjbH\\/oClf8AVIRmMPrCnEBqbsi0JptKg4luZtqivthwJKQsIcklDXCVqSFAZgKUOClR9bCiBl53Pzd\\/j4xgpnp1AChOTQVoRaYdBFrbiF31Fr24cNIxVPu30cWLcQtXz69cdH1nRlwCr7S2qhhNZjKXUKSo0Slotp0JUgJJbetxVKeaUEgEONrSpKtZaVaxKjjvevJ44V1pp12ya7cdlz5SvYtTDyLlooWQCgLlp5UvVvrbioVpZSlWexKgCc\\/kp1j1DjCwGeQA6gBG8p2OMXUlaVyOIqq2Em4aem3JqW05ys2X5Y8jdo6aRlMVWpS5BanZgW3JU4pxvTm24VoPrTEf7FfRfxlwKeFxvyq6pQqdMImZW97PmJpxmmOMONqlpqeDaJeqUB9t1bQbmZhpEqmYKWpWoOup3bT+Tt5RXEqUuijWzW6y27iVbjflltXLOFed7UGQbbcq9tXIy060KjPeRMOTMxMfXqdNamZ19TFVpiahNZcKlWnW1tTDaHm3kKbdZcQlbTjawUrbcQsFLiFoJStCgUrSVJKVCNaeK+jB+pvjhhJi1hKwmk0Cp4q2RSLnoku2ryO25m4bkp1I+cZNlvVW1b1XE65Tp+RQ4jyGanW25Etys621TbEdxJRtsNHewbjSlyH4QuS74wzWm20NNuVQt3Ykng4omX8\\/WlLDzaV+aTefIGpd9Eqo2\\/sz2nTtAr0kX3SyxMPssT7aFKErPyqlZXEPM3UEzLaFLclXUg2eAQEhK1NOz3sKMRaPi5h3amItAzRT7ppLU6Zda0rdp0+2tcnVqS+sJ1Vv0mqS05T3HkICHXJQrSChSY7IjofAfRlvXRPtKpYW3ddFFvKSVcc9cdp12jNz0kFUaqSVNYmpCfpc7rqpk5L1eRqE1s5eenZV5meQ\\/wCUF4vNt945npPrMfNbGuG6hgvFddwvVZR2RnqNPLlnpV5bbjjIWlD7KVLaW404TLutKDjbi0OApWlRSoGO85eZlpxluak3kvyryc7LqQoBaCSL2UEqBBBSoKSFBQIIBFoXjAPTkxfpGGVvSszVmnX6fblt3XiBW0MuttLZp9Dp7jrK83vo8nWZSseespQjZDcrJWrnrmek+sxF35bPSMlaZYONtFknXUzlXfo2CVDfTMI1Vlx5Tl4y6kDJeqJKVvKX1ElSST56wFKTGXs+ws7jfF9Bw02y44iqVSnycwUKKS0xMzjDDzxUCFBLDbi31kXIbaWrcCIbqFRTR6XVauogfRlNnJxFwCFPNMr7BsAggqcdKUJBFiogGwN40t8nrKT1w1DGvE2sqW\\/UrjrtMlXZoJIbdqE2\\/WbgrygpanFKW4\\/UqY4Ua\\/0ScgsrWsFGy1ScuzmPfGKeg9ZyrX0eLYmXWg1N3dUa1d00gDIqTOzSabTnFE5axeo9IprySN2ottOeSdYZZEZZgjqIMdzbRqg3UsbYhdZyhiWnRTWEIt2aGqUy1TUhsAABsmVKk5bghVwTe8fLeuzBmavPOlRV+XLeYm9+xSlom\\/HMUFV+JJOpN4aqTrdvN48b4R7YdKTqnqPCEVjPzufn7\\/HwiGIV+adx3evh4GNTCcNHUapzH1Tw6ukfGHcDUs7NONSzDLjzzzjbLDLLZddeecUG2WmWmwXHXnXDqNtI85RPNzrQhRXlSCSqwSkAkqJNgABxvpu494h0KuB36eu45kb7+rjHHxYsZjPo93j4x2s3gjjI5QaldRwpxFZtKi0+Yq1auyasy4ZK1aLSpdpT0xVK1cs3T2KJSqZLtfSPVGoz8tKMtnWceSCBHVSVBSQpO9JAI60kbjvyO\\/rjNmJKckuyVNSszLB0EtGYYdYDoTYKLfaoTnAJAJTe1xe1xd5TTyEIccZdbQ5mDa1oUlLmUJK8ilABeXOnNlJy5k3tcQ3UMx2b4RO8EdMOSMiR0Q3UMiR6vHsj1s304b\\/hCIbEcQewwgoZEiHSxkc+nx9vphusbwend6vHshyFoOviOvthqRkSOiEFDJR69\\/j0w5WN4PT8IQWNwPo8eOeFoOviOvthSxp4QnCS9x7ff1egQr48e2LFjdn0fHwIfQbKHfp1649Sbgd2ns+6GL43hXTmD6OEIQ7eGaM+gg\\/D4w0h6Fp3jxixY3Z9Hjuhusbs+g+\\/Puh0rgez3b4bq4Hs92+HUbvAw8RcEc+fXXLm2X9U9X6PjCMLkZgjpEIRkI3Hx6+EJRuI77\\/D5RRQzB7PbzQ2UM0nsz9W+HUNzuJHRCwbEHkbwuGyhmCOkEesQwjkOEMFDJSh0Ej1GMjwhxB3j19e6KQQQQ+DcA8xeG90MCMiR0Ej1GG6hko9ufr3w7d3OK9HtAMNVjzu0Z\\/D4RkDWx7vjb5Q+NQPARbCCvrHt9++F4RWPO7Rn8PhDiN58PtEewxdGTiuvI+wfHOGy\\/rdo+z4Q7f+sP8AFHvMNXOIPTn49sZCPreI+\\/7IIThJfEHq8e+FYTc5vT8I9GiyOfyvCkH0vEW+37Ibr4g+PG+G7nN6fHthyvgD1+PdDdfAdvj3RlIPoju069UPQ2c5vT8Ibuc3p+EOV8B2\\/Aw3XwHb8DD6D6Pgbfb9sEN18Aeg+PdDdfAdvwMOFjzew5\\/D4wgvcD454cTvHiPjDqDp6\\/dpf2Xhuv6p6v0fGEYWV9U+OeEYyE7x4j4wuCPscNb5qWGOIth4j0gk1Sw7ytm8ZBKciHZi3KzJ1ZDC0uDZuMzJlQy807rNPNOLbeStpawfjosc+orsMPKSlaVIWApC0lKkncpKhZQ9YuDDjLjjLzTzS1NutOIcbWk2UhxCgpC0ngpKgCDwIj0IbRuKUmxbV20aYTOUucRSK\\/TZtlQLU7TZxqXnpZ5vMjWRNSjqFJO7XQ5mQY+008MF06RehhpKYPS0oupVK9MILsFrSrKNoqYvSiSCrnsQpQUqLupd9HojmqhO1WEZNKCiFRrw5N7EZWKGhdgbWXpoTNSty2nMPaqNxdl37AqM3atObml6y9Z+YoNMpFQLmsVutTzLzp26lIRuYsmfVUbWo0xrBTiJRMq7mQV7SSUuVzXvGRcDAWd3nbTW4ExKPJ7nPNKji\\/CkwVKbfZROspV6P9COrkJxQ0GYvNzcmTbUpbSrUC8dh4uLNew\\/Qq0kJ7KpSDaXMtjZFQk25hCDqbdmQ8kg7lEpUbi0eVRh9OFL9RkFHc6wiabSeGsyrZOAEZZlQdbJBzOSM05AKjss7wR0gx99pk4U\\/wBjtp06Q+ErUt5DSrSxpvSQt6W1Q2G7NuCrTFassqTvCQq1q1RXyAopzP4u8\\/BQ7X5RUpUnG1aKJKV8LONLLKxbgRkB46mOS5xpTMwtChZSVFKu5aFFCh6imGyhmlQ\\/cn3GPs8JsQqthHilhtipQStNcw1vy0r7pWovUUqoWlXpCvSjeZ4Bb8gltesNVSVqQrzePxhGYI6RDCNbKvLl3G3mlFLrLqHW1DehbakrQobxcKSDu4cIZUopKSDYggggkEEEG9x3gEWsbjfz9Vm3K9S7rt6h3TQ5lE5Rblo1Mr1InEhOpN0qsSbFQp0yjzlDVflZht4DPgrLzc9\\/PxrZ5JDFxeMvJ46MtwzM23MVW2LHVhbV0gFT0tMYU1SesGnCaISCubnLcoNEqi3dZa301Bt91xTzr2WyaPofS55FTptPqLduzn5KVnEWNwEzLDbwHqz29WusXJLPCYlmHxueZad8O0QlRFuBBNiN4IsYIIIIz4fgggggggjQD8oXxPFsaKeG+GUq8Gp7FHF2VnZpvaAGYtqwaFUKnUGw1xWlFxVi0Xg4DqNBreCXG8t\\/0Q7\\/AJRJif8AdHpMYPYVy82ZiTwzwmer83LpeJbkbixHuOb+cJcsnc1MuUCzrTm3XAM3mJmVB3MjKstsFU+i9n1eWlWV6ebYpbIvbP59MtNTCdx\\/6n5ySLXIFhYm8aDE8wJejTWtlPFphP8A33ElY3je0lzdfwMR9UfVHp95hwj6o9PvMIJ4DsHuhdH1R6feY4Einibknmbw4R9Uen3mNlXJVWKbs0rKTX1sh2Vw6s+6ruUXG9dnyydlWbNkUb0LRt0uXSudlUkBTapJcy0deXEa1UfVHp95jfhyNlkCXtfGjEp6XzXVK9btj0ybIUFNCgyEzXq3Ltq3AomTcVuuPoBUSZSX+pkSuk\\/KDrxw9shxvMpWUvT9OTQmUg2U4a5Ms0t9Kd3pIkpmaeNtcjSynUCLM2P0n6Z2j4XYUm7UpPfSrpIulIpLLk+0VC25czLsNi+hU4kHQxvgthguTjz2rrIZYyPU46ckdPFCXfZz5CNBfyh3FFVLwr0f8Gpd8By8L6uPESqy6Mi6iUsSiN2\\/S9sriJacmr8qDjTZBS8\\/SwvcqWTnILtJlYkZiYUk5vTGqlQB85tlCdXgk7g4t4E7+Bz4ZxDb5dvE5d6accxZbTn6zwewxsizywkkt\\/OtfYm8RJ6aPnH9cOyN4UiTdy1EhunMI2aVhxbmj8kPC4kMIYUdcQQ7NNVPEsyMtkqM4+tmRXqkE2kzTlAnin0VFOUR0\\/tsqvm2Hak2lWVc7MSVLbsdQAoTL6RqdFNSz6Df81Z3EiNXeEFP8qud6dUnNumU59xCsvqzE0pMq2M+lTDk30\\/VHCMn0c\\/o8e2Ol8F5DZ0WqVJSdVU9UESyCfwmZFgKCknnSXpp5HUptWfNl3Sjge34COksSvl+qTIvcMBpgG9\\/qJSpY05OLWD4X4xwzUF55pzkgJQPULn2KKodsfh\\/8X\\/2odo4k9Xj3Q1Y4K7R7odt8\\/o+MRtf1T6viIwiLewH2i8KRejiez4iLIUb5\\/R8YZghyyPP7Ek+4fGHcNmOKuwe+HMMr+sfV8BDK\\/rH1fAQQo1+yJ9PsBhOFWfrjsMY6\\/rHuj0GyFeNvbYQ8T9Ydvu3wuN5A6YRR9Yen3GF08R2j3wwvePDr4QiF4qN5A6SIpFU\\/WHb7t8I3QboXhxCCeI7R74cJ4jtHvjHhCNx8evjC8EEVG8gdJEY8eL4ev7IeoGSUjqEIz9Mp1WkXadVpCRqlPmUaszI1GVl52TfQd+o9KzLbrLqCfwXEKHGHEOOEJKlIUhSFKSpKgpKkkpUlSSCFJUNUkHUEag6w2CQQQSCDcEaEEbiDwIjHprRVwHZuBVxCwpFbyhrCluzdRct9D2tmX00Nc0qn7wNn5MpldPCTrCTS6SuO\\/6dTqfSZNiQpcjJ02Rl0hMvJU+VZk5RhHMhmWl0NstJAy81CEiFoXAyAHQMofqNXqtTSyio1Kfn0spCGUzk2\\/MJaSkWCW0urWE6crE8bwtczMTBHbvvOhAskOurcCdw9EKJtoOHthZHDtP2fCHKB5oPST7PAhukZJHZn698OU8B2RqoZWdAOZ+HQhZHA9vj3wugbyfR48c8JJ4Ds9++F0fV7f0fCELOluf64ahVA3k9Ay9f6IVixHDtP2fCL4xFfWMEKNJzWDzDefh7YeQgwNyj0kD1D7YXhk6rA4C3zMJJIBPs7tw++KpGZAhcDgB2CE0DifR49kLoG\\/Po+Pgx4s625QzCgAAAHp6z0w7aRqjWPE8OofbCLSdZQ6BvPw9sPIYWeHt664QQRlRoSYN07HbSjwhsKvUWWr1rpuiXu266dPywmabMUGyEOXVMM1FCgU+TT0zSZKnNlZAVNTkq02pK1hUYrxIq5IPAMYfYd3vpPXlICUmbyknrcsZb7RE01ZVFmzMV+qMJUhKks3JcMnJyUnkUuvItsPNhbE\\/LOOWFsroSK5jSluTTiJekUFf4S12dfKUS0lSaIpM9MOzTqiEtMurablVLUbJ7fObBClJkeEqS9WsQ02TabU4kTDcw8EgqPZMOIUU2Gt3l5JdFgbuOoHONiWM9RE5d6ZVCwpNMpkrLKCRmEvOqdnFnW46xamJcKST5oTuHnZnqOH1WqczWapP1SaIL89NvTTqQrWCFOuKUGwQEgpaTk2jMbglBIBzI4\\/z\\/ANz7Y4D2qY1TtA2j40xk2l0S2IMRVKfkEu5u0bpipgs0xpwKNw41T2pZC02ASUEBKQAkfTakSBptKp8gogrlZVpp0i2UvZUl5QtwU4pSteHPefhcTr7kcM8PLzv2paipW1LfqdYSy4pSUzs5Ly6k02nJUgkh2p1EytOa+qA7NJ1lITmoQGOUixQq+M2K+GmENHLk3WFz66zV0KUt5ybvC\\/qkxI0xqYKUArdl5Rtc7m2yBsq6tSyVea3PYxGwWoGPMtRLIv65Zq2sLWKuxcV9NUpx1NeutqkEuUOzqeWG5hclJT1WcarNYqwlnHZNmhMS0qWJupNz8h93Y2j1oEYN3XL33hjooYVSmIUpNys\\/KYkzGHlt1PECWnqe2hiRm5XEK52qxe8vNyrDTKGZhqptutJZYCVKLSNj075LUts+wag7ScfY9wjhlxXn7VCpk9Ukz+ICtLa6Y3UF4cp\\/b1FEilT1RDapluXcmnEMuS6VMjtxD9oaKvWKK9hqhyc27MTr0sqfmywoSbUqwrzhDAfUpttcwqYRLuKbS4UBkKS4tK1gRF4wk0VMcK5blt2zhlgvifctFoVIpVvU+fplk11yktS1KkGJGWM5WhIN0iUVsZdBWuYm2WiSekRmpZfJOaZl47Byp2ba+H8u+6EImb3vOjJyZJzMy9I2mbtqrDSCcih6QbmiQS3KLbLK1yNZ\\/HetvApp1GpsmSDqrmnX59SUjhkWxIoBzAOsptSCR9UjIR8ZPYp3zPkg1pcq2eCJKXlZcJ\\/GIdSyZhRIOSc3lAb9wOYiaVDaz5LtDddcVXNpe0KbcWpwuUWiSlCp7ziyFKW99PLp8+i6itRWjMbrT+SUAVCgKb5Nk86Qup1ApVfMsKmGWc6idSUS7M+TcncmYTvPp8I1XWbyH10vJafxGx7t2kJQAuakbMs+pV8LSMiUM1evVa2Ey6QlWsp96ivgapTsN+0RkhbXJG6GtoBp69b8v28ZxBZ28nU7xoNCp7pbBLqGafbtFk6y23Mf3wLrUypDeyDbrbhK3MkZysVaof8AyQqlRnQd367nZqaz4KH7M6s5BQzy58uaOO8\\/9z7YiM35WWz2mehhDYLSlrQbonsY4mnq6FrICCXaUJVLASUEKyongjMSoIQoZjYFO8nnC0plVNOJfVpmBaddKrZdSqZmXGr87SyRa9wd0I25opcn1YAaTRcD7Mrzstkda46XXb92y9ptFLd+7ycq0s+FKBVq5LYSj6BtKWPogYp6UWDGjdb6mMOMKrYpl2VKXLdCt+k0W3rVlksGYXtahVWrelNqzSmFF1SW0bNyoTqVysspnOdnpToDGfHyhYaSk1Tqc9KVS7EMqWuVccBp9Ca1dp5bW30rQG1JZ+lbkEuofW0W5iYVKSrjTz0SfTB078QNKXECqaP2jHctRnBVJlacV8dJWaeQymioWyxPyNpz8u4y7KUGW2hkJmpSSpVytKDNDtlLdIfXOVGS4A8oHb1tJqj0jg+m4C2eUOTY7asVuh4SlpWQodKAypmpqbqjlXstCUrEjLstpmJ15JblWglLjjEnqWDdmWzmkGv12VCWUJUqRpyVsSs1VX20pUW2USbMspqVSSjzmZWChtCkputxxpLuUml3yguKenjipP4VSN5vVbBbDqrpnMTpyhrdp1l1y5pN3WpeG1oybEy5L1Giy0ywZm8q1PKqkzW5WVRQ\\/nN2kTrjlX6qj4rDjDe3MKbLo9l2vL7Kn0ts7eZWlPldVqLwCp6qz60\\/sk3OPJ1lknVYaSzKMBMtLsNo+1jbVuopn5tRbnalU22ipJqtZmHJqr1d85RMVWpPOKURMzakJ7OXQQzISTcnTpcBiTbJ4lxvi6cxnW3am+0xKSrSfNaZTZRsMydOkUKUpuXlmRogFSlOOrN3XnVqdeW46pa1JL4g9Xj3wgscD6PHthyvh2H7PjCC\\/qnq\\/R8Y1zR3dxt16jEQhssbgeg+PhCCx5pPQR498OFDNJ7M\\/VvhBXA9hjJj1O8eI+MNV8Ow\\/Z8YQV9U+OG+HKuB7DDcjMEdIyj1O8eI+MPnUEc4Qi1QzSezP1b4ug4xkDQg8iIQjcR39fCGqxmlQ6jDGOQhgdxI6CYfhcUhvDiEFcT2n3w4g7x6+vdGRv8ACG0IHcSOgmHCuJ7T74bq+se3374fRvPh18YaRvPh18YpCCvrHt9++F4RX9Y+j3CHYdhsr6x7ffvhk7ucV6PaAYfL+sfR7hDJ7657BD6dw8B8IWjefD7RCUEEEZCdw8B8I8V9Yw0e+v2gfEQ1XxHZ8TDx\\/insPvho5zen4Q+k3SPC3s0hxJukeFvZpCcJL4g9Xj3wrCbnN6fhDiPrDvvCoZv\\/AIP\\/ABvh3wzc5vT49kPX+Ce0+6GbnD098Pp+sPH46QQlFi+A7fgYvi1f1T1fo+MKP1\\/WPeBHqd48YbL4Dt+BhBf1T1fo+MOF\\/VPo94huv6p9HvEZSNx8fsEPw3X9U9X6PjDdf1T6PeIcL+qfR7xDdf1T6PeIyEbj4\\/YIALkDmbQ3X9U+j3iEFcD2H3Q4VwPYfdDdXA9h90OJ3jxHxh1G4+P2CG6uB7D7oQhdXA9h90IRkJ3jxHxhcEWqGaVDpSR7IuiiuB7D7ofgiSTyFOIxqOHGN+E8w+kuWteNBv2msuOZvKlryoy6FUwwlWZ8mk5qy6c46lHmNP1QK1daaWpUmLCWdK6XUqepR1pSdRMtpO47Kba1NUJzyKEuSy1b8slLA3FaTEKrkY8RFWfpiy9qOupEninh7d1p7FxZQ1850duUvmQmUjMBcy3LWrUZFgKz8yov6iddaAZlGGM4qWr70soKSmeknkI6C8wpt5JI6mkTI9PSTknBs19C7TqRMXIZqZ8zdAsAoT8uqWbSNB\\/15DDljckjv06qwNNCs7LkMKVneo78xKkm9wJaYTOIFt9kyU0lpNvzUi2txEMf5SFhL9wWnnQcTpJCkymNuDtn3DOzmzSgKuyx5upYf1CXQUZl7yW2bfsmYU+7qrCpwsamzYaWvUFJzCZuUlJpGWrMy7L6RzDatpcy38MtbIhW8ZZGJXfynjCZVf0e9HbGyXYDkxhtivcFgz620fTIpOKdsirCZecBGcrL1XDOQlUawWWpmrJ2Ool97XiR2ZNeU0CWSVZrlXHpVXSAlZdQk84yZeaHZu6YtXHsqETy3wDZTqXBcWNphtKlqOm7tm1gDcL87gUJiuV83qs0ANFOh4HmJhCXVHedzhWD3gkACPojuJHQTHHncT2mOQVxPaffHHq4ntPviAN8fV9sRte5Ph8omNfJqcVzXMA9ITBeZc2j2HOKVBvynhxaddFKxPtpVLVKsIORVLy1Tw3nZpwjPZTNW84jbtAyXYg9\\/J0cT\\/uP03btw9mXSmRxawYuinSjAXq7S5LNrFDu6nPcVJWlm3ZG72y1qhecwl1LqUtuIenCR25smqBqGBqSFKzOSKpmnuG5Oku+tTA1J+rKOy4tewtpYWAs\\/Db\\/AG1JYBN1MKcZUTv0V2iBuG5txA77XOpggggiyI30EEEEEEEefXyrOIxxO5QTSbrYeDktQL8GHMo2lWbUunDGjUuwJthr8UqqtvVGZfQCR5U\\/MEcd0\\/uv1um23Q61cdXmEytKoFJqVbqk1uPk9OpUo9PTjpyIJDUsw44QCM9TLPnjzIL2uqfvq87tvaqjVqd43PX7rqQCtqBP3DVJqrzgDhSguATE459JqI1uOXMOcfKMqRao2HaSlVjOVOZn1pBUCUU6XSwM1hly5qleyt6kApBKFFMHxs\\/ZiRlhr2jrr5Fx\\/UUpbSd4IJ7dWXvB4iPnk8B2D3Quj6o9PvMIJ4DsHuhwngOwe6ORYreF0fVHp95iVdybNl\\/cXoiYbuOMlioXg\\/cV61BJH7L88VyclqQ\\/xzIdtynURY5t5yiKqw248ptllC3nXVJbZZbQtbrji1aiG0NozW4tayEpSlOspXtms4TWebIw7w2w+ZS2k2pZ9pWikoIKFO0WjSFJWo7PWCy47LKWpQ\\/ZFKK8zr5xxn5ZVUdThXCGGJYqL9exI7OhpH7Y+ikSZlwzl3qSqZrUsqygAXENkXOkdLeTPSw9iPENZWm6KZRmpQKI0bdqc2lxKweCuxpz6Bb8xa77xGVNBlthR6e2UqBVLtvKzSQQqYKnyCCNxG0A35EZHo1Y867TJxJTi9pXaRGI7U35ZIXRi9fc1RH9dK9a2ZS4Jyl2ugLT5q0s29I0tkKA1SGgrLjHoB6R+IwwZ0d8bcUWnUy7+HWE9+XXTStWyDlUoNr1Gco0s2ojc9OVRmSlGMwAp15BAz4ebZKy7tQnZaVSoqenZpiXSSNZRcmHUtJJH4R11jnzMdlbHsPtUGiNSaCAxR6TSaKyoJIHZSEohpduBGRlg31IFr7zGZttqfbOUiTvYrcn6i8k6\\/WLbTCue8zIOljw3GMxrBkBTrPoTBGSnZITq8xkSufWud87LfrJS+lGqd6QlKVHcY+0RwPb8BDZlpuXZaYaTqtstNstj8VDaQhA3ZcEpA8bnSPqj0+8xiTTxfdffVvfecdN+BcWV9\\/O0csOKzuLX+mtSvaSYeMfUP8AjH3CHTfP6PjDVj6h\\/wAY+4Q7RwPb8BGEv6p9XxEIi+FG+f0fGE4Ub5\\/R8YZgh4x+H\\/xf\\/ahxDdj8P\\/i\\/+1DiGV\\/WPq+Ahlf1j6vgIIWY+uf8U+8QjCzH1z\\/in3iMdf1j6vgIV\\/U+ucPUfW7B9nxhdH1h6fcYQRxPZ8RC6PrD0+4xjr+se6G4Wi5H1h6fcYti5H1h6fcYQrcfA\\/CEncr1\\/AQun6w7fdv9whyj6w9PuMN0fWHp9xhwj6w9PuMMR4jcfH7BC0XI+un\\/ABk+8RbFyPrp\\/wAZPvEY8JWdQO6\\/t\\/VD6HEIJ4jtHvheG3OHr+yEQQ4hBPEdo98LxjucPX9kNoGhPfb2frhxwhxDeHENwOcPX9kLgZADoGUOE8B2D3QhC6eA7B7obc4ev7IbhdP1R4474uiieA7B7o+itu1rnvGqsUG0bbr11VyaB8mo1t0ifrdVmQNUEtU2ly01NvD6RAOzaI3gccjDDTTsw4lpltbrrigENtIU44tR\\/NQhAUtR5AAwAKUQlIzKUQEpFySomwAABJJ4Aak8I4poZNp68z7T8MoUjY7hNyUumJiamVnKnZVKwroz+yc+ccS60zSpsNFX0oTbFIZrd0y8y22PMZqdGpjbrn0ZmG83HWtkWHPIuYOWi1LVTHTGevXS42Q69R7bl6bYVBWsKOtJzFQqTtfrNRYz1EockXqFNLcI1Ajcg2HS9kWOqgwuoTFJFBpbaC5MVTE0wzQpOWZBF3nhPLbmgyB6XaIlVpKBcE3TeR07B2JauUIlqXMIDhGVUwnzcKB3FKHLPOA8OyacJGu43iOMj6vb+j4RkLhhotaROMIZcw4wdvy5JGY2ZZrSKHMUy3DtgC1\\/3zVoU6329cZqSXKmPM+kG7fEo+xcGNCvAksrw3wbtKZrEmGxL12Yoi7qr7LqE73GrpvN6o1OW2hJLyqZNhondsihlsN9oVXHitvgt0elSFPRmQHZtbtQmNQZaigEqlWG1c6klt5HHPhmY5V6rsAwSVpxltkkq9PtqKV0PZtIO4idUtBsttFdCHaO04hd0FE15uRYj610otiheT1iio5Fz5VKtqsVAN+bix1BDk72b5Ft2WQc334a6McMuRi0h7jSxM4j3lYOGMk+EF6TYfmr4uSUIILm0kKSafbrpRrbthdrgcczyOzIcOclmckhomYfJbmMU78u\\/EGot5JmJKdrslZ1Fd1cwosUe3wLlQCcgr\\/vmmCAUZJBzW5k\\/VL8u+s63l9fqCkKzzl5Z0SUuQr8FTEmGWlhI3eelRGWeeeZHye0WSeBJ6h7N0VlU\\/Kw2SUEqbwDsWerkwLhus7R6z5xcp0SX8OU7zuQcCio37KoS5ASglKl\\/VuKi+TlQJPIuovImHE2zAh2azbiRmeLMtvG8yB1Kh9XQ\\/dWfh1oeYPBpWG+CVnIn5cJSxWEWlJ1OtNhsgoBue7BN3EElYSoKE24VrCXHElTaDH0V74pzt3SHzTL09NLkPKEuvDyszTs4Gcyyl3JllCEJcCHy0hKvpmmQV5N+f1HtF\\/jGDaL\\/GMU7jjyt9ruOKJUsLrnqHhbC9Xl3JOo0DB+HpCkyczJvAJdlFTT5n6shh1F2322qi2mYaWtl4LZWps21RNnmGKAtl2QkEh6XUlbLi1BIQ4j6qwxLtsS2ZJuUEskoNikgi5ewQy2i\\/xjHx1+3aLNtifr5bbmH5dUszJyrqlNJmZmZmG2ktlTadYBLanJhfDNthQz5jzkiYC1JQlKypRASLjiQOfDT2cLXibIZW4tKE2KlqCUi+9SiALk7hrv4R99BGH9I0rKXUXZqXFClZxyQfVL1AUm45abdk5htxxpxialPIAuWfQ6y62pqYfSpK21pKUrQsJ+3k9I2zX9UTUjcEkvPetUnIzDQ+r+GzPl45En+8cBxz80ZbjU00crks+lQtdNk3AICkm2cGxSQRpqLEaWjJ+jpsjMlrOnWym1ocBsbGxQpW43B5EEHWMiYI6fk8bcOZzVSLiEs4rL6Ocp1TY1c9VOSnVSapVPnK3\\/AE\\/MpROyBUWty43WXQZJL8lUW7hnHklUrIUpwLyIRmFTk0pCm5JvNQC9dLsyCfo5N3UdyZCnCrKGXweF0EX3bidNBztuHiGxJTRUE9g6FKNhdtYHrJSABzJIA4mO3ZqclpGWenJ6Zl5OUlm1uzE1Nuty8uwygZrW664UNNtpyGanCEjfmejX\\/pNab1hYS2fW6\\/MXbTLMtCkp2FUvysuLly666lxLVOten6q56dqc3s1IkUS8rM1SdWFt0ynFxKJqNXWnrywGGmEy6laMjPyuKuJEoX25bDq06i2LStOooS600\\/fVwMKmWmp2UeC9tR5cVC4krUWVy9ClppE2mP8A\\/c9pK8oHeTGJmOFyz1Bw6YfedoMtLSvzdRZKQmFI2tKw6tda1MMtusssszd01MTTs0G2pidnbgm2Fyw6j2VeTfWcSSjOLsfzTuCcCpyOpnZ9ARV602QFJYoVLdQXn1TCE3bnZhrzUpPbyjFSQ242KvxztXwxgRh9pp6WrddaukSzbmelyDw3CdfbJVNPtqB\\/YEpdzMlaH3Jc5Vx3TpDaZON2n9dVTwdwJp9VsfBNU0TdteqC3Waxc8g++sLqV+1WVW6mnUqd1XFSFk06ampirvB5+rTdUShEvRcjsG8F7NwStVFuWrLFyZmNjMV6vzaEGq1+oNNlHlM2tOeylmtZwSNOZPk0k244EByYempqY+usTD60cMrZlLUsujS1GpEmAooZBXMzsyUoS7P1KcWVPz09MagLsy+taiEoabDbLbbafrY6SqFWpMrR2cJYMpScOYOkHC43IoVnnqxNAICqrX5vMpc9POlCVpSta2pYBtpsqQy1k4OxrjyuY4qjtQqs48+FqAQhZSlKW0qu22hluzTDLdyW5dpIbSVKWouOqW4U3Rm2rqyPtHwzhnD1z6iuyGURlG4+P2CIdFqvqnxzwgrgew+6HCuB7D7obq4HsPujIbNhfkq\\/wghud4I6QYQhxDeMuCG53gjp+3vhvDiG8EZEN4Iqrie0++KRkQ0g6kd1\\/Z+uG8MV\\/XV\\/jK95h+rie0++GC\\/rq\\/xle8w+DcA8xeHYthFf1j6PcIWhFf1j6PcIcRvPh9oh4fm\\/2p\\/\\/AFhsrie0++EF\\/WPo9whwv6x9HuEN1\\/WPo9wjIRvPh9ohKfrq9fxEWwkviOz4mFYSXxHZ8TDsOQ2WPO7Rn8PhDN\\/64\\/xR7zD1fEdnxMMn\\/rj\\/ABR7zD6dw8B8IWjefD7RCMEEEPp+qOuMeL+sfV8BDd\\/8H\\/jfDvhm5zen4Q8f\\/A\\/43\\/swzc5vT8IyEfVHr+JhxH1R6\\/iYThNzm9PwhSE3Ob0\\/CHEfWHr+BhUNX\\/qD\\/GHuMMl8B2\\/Aw9f+oP8AGHuMMl8B2\\/Aw+nePEfGCEotX9U+j3iLotX9U+j3iFH6\\/rT9kep3jxHxhuv6p9HvEN1\\/VPo94hwv6p9HvEIK4HsPujKRuPj9gh+Gy\\/qn0e8Q3X9U+j3iHKuB7D7obq4HsPujIRuPj9gj0aWPf8LH7Ybq4HsPuhurgew+6HCuB7D7oQhYNiDyN4cRuPj9ghvDeHEN4yN0LggggjIgju7RTxCXhTpKYGYg7cy8rbeKFnzNWcByP3PTVZlqdcbO0yIbMxQZyoy+1IUGi6Vaq8wmJ99uTSpGu0mYAKQmeaQtR3lKJhSWXVZ5Dds3XOPPzbso85KJ\\/Ojzf7mKeBGDOJBfW\\/NXvhjY9zTzqiS4mq1W3qdN1dl1RKgXpaqOTTDxzILrS9Va0ZE6SqLclZylVNq4ckZpt1JTe+dh5qYZsdySFNqOhBN72NiR0JsSmw4xiSjOEZXm5WbbQeS0PSk0q178ZUcQNxtpf4PlnMKzi7ybGk9SmZLyuqWZadNxXpLyW3nHad+phcVIvKvTzKGUqIBs+lXLIzK3W1sMyk7MPrUzszMS\\/nq4dTesKnJqO8FmabGfHMLadOWWQyyYHXn0x6lV\\/WjS8WcLL1w\\/rStlRsS7AuSzqs5sw+W6beVvTtFn1bBa20uakrUnSloupCiAjWTnmPLGoMlPWvfNQtyqNmWqVPnKvb9TYOsAxP0x95mZaIWEKzRNSLjQK0pOtu1Unh0Fi0InpJuabKlpclUrSsg3yNlMw2bkn66VrsN5Gax1AEOx9KKbmZd0pAU5LuMqAsLrlXQpRtYG9nwLm90gAWAsO1VcT2n3wwX9dX+Mr3mH6uJ7T74YL+ur\\/ABle8xVaN58PtEVurcjw+wRm1yamJxwg0+dFO+FTS5KWRjHbNp1OcRnlLUTEdb2HNdfe1SFGWao11z65lKNZwywdDbTqvol+k5HlIUuqT1Eq1OrNLmXJKp0ioydUps2yrJ2Vn6fMNzcpMtHmcYmGW3UdCkDmEepphpe8hiXhzYGI9LRs6Zf9lWre1OQXAstSF1UKn12TRtEKKXcmJ5rz0EpVq7uIMdS7BZ\\/NIV+lkkdhNyc+2k7j52wuXdI13jzJm4sNFJIuN06wg9duclydxZeSP7dKkOEDcLZGx6xyj7uCCCOgImcEEEEEEYR8o7iGrC\\/QV0prsbdRLzP6kFzWrJTKwSJepYgstYf015sJIV5SzPXPLOS20zZ8pS1tkLaC0nzuxvAPTE2jl9b8ctPQNdtlqaLa8UMYcPrOflkvbNcxIUluu4iOqdZB135WXn7IpindcFluackXCoPbHaQlk8B2D3Rxt5Q9Q84xZS5BKrop9FbWpOa+SYnJqYccBSNEqLDUqon84FPBIis8Yu56m01wYlEAj+M4tbhPgUFv2d8OE8B2D3Quk5pHZl6t0IJ4DsHuhdH1R6feYoCIXHfGjNaKL80gsF7UdZL8pVsSLQRUmRq+dSJKsytQrO5Z1SBS5ScPHgPqLz1Ime2owJq4KY2pJIQ8qZUcvwpZp19s\\/wAdoekADfkDFf5Lq1vui0s7YqqmNuzZFp3pdTwUjXQhL1LFpS7yh9UFqbuuXWypeRQ+EKQQ+WjEr\\/DdhL1YmphI1kS0i4nIg+Y8+80EZE9KEPjduyO\\/jv4d23j8KPKI2UYUA7aXpiKVUJloArSC5V5mp1BpSL2AVTKPLKcNvqK10TeOzPJ8kvMcBYlq6k5XKjVXZZtdrZmpOSlm2VBWtwmZnplIHBSTci5A1+ctliGqwuT1xWkmnSzP4kXBYOHdPcSrV1fL7pkrkq7e4nW8qty163KLH4sxnwSUxCGw6kTP3pQmiAUMTSp5RO8J8gZcm21cM89qy2lPMFlJ4ZqiUt8o+xCXIYWaM+Fbcw2UXRiBet\\/zcoF5uoXYduU63Ke+6ji224jEiqNMrc1Q8pt\\/YhRZf1Iy2CUoH7hqc8pAKZKllpJO8penJlrVUN3HZMTCePBREfQmjI8wwhNTA3vibWFag51lMmjS\\/BSEgWA14Ximtrk\\/22JJxANxIU+UlE7rAutqm9Lb9ZwXJ1uLHcIydhVHA9vwEJQqjge34CIKfqepP2RSEPWPqH\\/GPuEOm+f0fGGjHBXaPdDtvn9Hxhhf1T6viICLewH2i8KQo3z+j4wnCiOf0fGGevbBDxj8P\\/i\\/+1DiGzHFXYPfDmGV\\/WPq+Ahlf1j6vgIIWY+uf8U+8QjCrP1+0H4GMdf1j6vgI9v+TPcbe8H7YfI4ns+IhdH1h6fcYbo+sPT7jC6frDt9+73GMdY9LxF\\/s+yEQvFyPrD0+4xbFyfrDxx3Qg7j4GPCNFd4Pwt9kOE\\/WEOEfWHp9xhsniO0e+HCeI7R74YhKNx8fsELxcj66f8AGT7xFsVTxHaPfGPHjnD19e+OQG4g9BELw3hxDbnD1\\/ZDcHCHEN4+ptW0rtvqtSlt2VbNwXfcNQWEydCtmj1GvVicK3G2xsKZSmJqbe+ldbQC0yfPdyy35FCGHZhxDTLbjrq1ZW2mkKcccUqwCUISCpSidAACSYbbzE5UpKiogJSASSomwAABJJvoACTbQRw0OI2wYHcjjpTYnJk6liCLewQt59DLqjdb\\/wA+3cuXeBCXJa0KC85snm9TN2TuCuW3Nt6wOyG4xtaww5LHQowM8kqGJc5U8YrolUpdW3edRLNETNBAbK5Ww7ZLCXZVeZ1ZO5pu5GNd4uF4lDWxn8vsvxC1T1VvE0xR8C4fayqfrWNKnLUCUaQRmUS3NrTMpWEAqQl5llDhsA4kZlImFIwHieuuttylMeb7QXSX0OBxQ01TLNocmlA6ZVBjIq4OYAgxGKw\\/wtxIxXq6KBhnYl2X3WFFAXIWnQKnXHmEL1iHpv5vlXkSMqlIWp2anFsSrLTbrrzzbbZI2g4O8jNpPX4ZOdxIqVn4M0Z9pp51qrTqLxuxtt7LZ7O37amTSNqGs1vMVG7KZNtO7NlxkPB7yaQNLYn2dYtIatnCqwqFbdBktcSUhTaVTrcocqdRLaFytAoTEvLISoNt5\\/TSjmqhvNOeWz+CrWJN510rRNVmYl5dw75SnASDASU7m1eThD8wgqOZEy68So55ZbOKzxBtl8mbARcZNaxNterLOZBk8LypoOGA8CDkfrM+4zMvsgAJE7R11BteYqS0PSDV44c8nGfmOzerUz2KDlUptxYYGU2zDsGC9MKIJ0Dj8kq29IJEYz4dclRoV4OoamsT6rXMWq8zquKYuqtu0mkMvMEnOUtGznJGddaWQEuS1bqdelnlnUW3lk3GaFCvTCnC2mKt3B3DG3rVpOsj9Z2\\/QqPaNIdW3rasw9J0eUbcnFnXczcm0szLilOrWsq1lOdIaxVkSMyfrKz49HZlwyAyEU10dfr\\/AKsUriDy4MdJQ9J7McJYO2WyLiVoTN06ms17EpbWMpTMVqrsGUeNgFJWKOh5BAyu+ikC9aBsbwjQwkiV85dSAFKShMslVtPTU0VTa76g9rOOAgkEG5v2bWcXL2q5UhFRRSmVZgtUpkMKTnqgZTLin50L1RxbmEA8dTcMuu5mbmptwvzkw\\/NvqzKnZl5x91f+M46pSyczmNdeXXxzba6Ov1\\/1YNdHX6\\/6scvYs2kY6x3M+dYyxhiLEroUVoTWKrOTsuwSRpKSjrqpWTQODcqy00DmKUC4iyZKlU+nIySEhLSibAEsMIbUrvWtKQtw961KVzJisEU10dfr\\/qwa6Ov1\\/wBWIb2veerdeo89c6x5H2GKwRTXR1+v+rBro6\\/X\\/Vg7XvPVuvUeepY8j7DFYIpro6\\/X\\/Vg10dfr\\/qwdr3nq3XqPPUseR9hisYcaY2JdGw7sCs3FcCyaDYlq3NiRcDaXEtuKkLbpM\\/MoS0pxaEbdyXlKo2wFnVU6pKe3MbXR1+v+rEdnl2saGbJ0X74pEnM6lZxbvC3cLKZs33UvMUWnOuXFc0ywhGQXKzMjbUxSZwuZtatxJRkVON5zvZjht3G20DCOE2+1tXa9Tae+pvRTMm9MNifmb6ECVkRMzKiDmCWVEAmwOFVaomg0as1xdgaVTJuaZCx6K5vsi3JtG4I\\/KzK20C4IBIJFoia2DY+MGk9idf1zWvPM\\/dnUJmu3\\/ctbnqtN0hDk\\/cNZXMzTTVSZbmHUz1Snqg+qVadLbS2WJhTswhDRCslZSwuUmw1Kha1+YxMyTQUCm08bZp6QdSgTmQND+65l2Y1UrmHmA5SiG3JkbMonFltORnJ12Ibdwlrl8TDOpO3\\/AHAtEq4tGqVUK2A\\/TZNSFKAUoKrD9e1iklopQzu1wonYBH1nx1tRdp2I6jh6Tw\\/harUKjqZpjEtV6UJ0JXKMNNTLTdnm0NtszCXZdtsIUhKGk+iSSI+ac7jSsU6rTfmEwUdm7kU8HZhEwt6w7dSnmX2llRcUtNyVEnU3uQdT8npjcqdhrrNztw4qTUk1rF9dyYVUC7pJWzVNrUlVcn7Nqj6Mj5Q7lLVZlSpdqXUtS5RpgBld+nbygOkvT28GJSfn6ZMTu3TXWbBtdVj1yqSDynJZTVy15LrRo9EQUvS0wGJihU+bOtL1Nc8tKGY22wRCEYwwMmYaqf4mdnbdblViYkqlLUeQluwnEizcy8y1T+0mVNqstGaaQ4haULbdbcQlY2v44caGTdkl1msrl3mVMqYXXKkqW7NWpQqXW8sdmrULQhaAtJUkqyqUDrrwJ0DrZstcldOLT8ne10JUiZYt5oLdtSlPlKVgzgfQh25JxpeesqaaapSVqUnyKbWhqbOwDZttNIaaQltttKG220JCEIQhICUISkBKEJSAkJSAEgJCd0OXlaysuZO7088Nlnfl6T2+PfEZr2Ja3iic8\\/rU87Nu+kGWtES0q2og9lKy6LNsosBfKM7hGZ1bi7qitZyemp93tZp1TitcqdyGwfzW0D0UjnYXNrqJOsIr+qev9PwhGFHDwHp7vjCcacXCD3\\/A2EYqfrDx+GsJu\\/savR7SIZw6fPmgdJ90NY9Ru8T932Q9ff3G3uB+2LVHJJ7MvXuhBXA9h90LLPm9py+PwhBf1T1\\/p+EZLXD+2H2R7CJ3AnohvC6uB7PfuhurgewxlQAXIHM2hCG8Lq4HsMIcIBqQOcZEN4IIIyIbb4+r7YbwxX9dX+Mr3mH0MCcyT0mMiHIpCK\\/rH0e4QtCCuJ7T74WjefD7RDwGiT\\/Ft7bfKEFfWPjhuhuv6x9HuELq4ntPvhuo5qPbl6t0ZCN58PtEJT9ZXr+IikJL4js+JhWEV\\/WPo9wh2HIQX9bsH2\\/GGT\\/1x\\/ij3mHi\\/rH0e4Qye+v2AfEw+ncPAfCFo3nw+0QlBBBD6RZI8L+3WPF\\/WPq+Ahu\\/+B\\/xv\\/Zhm5zen4Q7f4p7D74aL5vT8IyEfVHr+JhxH1R6\\/iYThNzm9PwhSE3Ob0\\/CHEfWHr+BhUNX\\/qD\\/ABh7jDJfAdvwMPH+Ce0+6Ga+A7fgYfTvHiPjBCUWr+qfR7xF0Wr+qfR7xCj9f1p+yPU7x4j4w3X9U+j3iG6\\/qn0e8Q4X9U+j3iG6\\/qn0e8RlI3Hx+wQ\\/Ddf1T6PeIbr+qfR7xDhf1T6PeIbr+qfR7xGQjcfH7BHqd48R8YQVwPYfdDc7gT0Aw4VwPYfdDdXA9h90ODUjxEOI3Hx+wQhDeFycgT0DOEIyBqR4iFwQQRQnIE9Ah+CGETKeSBvr7tdBjDiReddmJ\\/D+vXvYk8645rk+R3JO3HSWxqnNpEpb1z0iTbbWQQ3LI1RqqSYhrRJk5Aq+VTmHWkJhq482lNu3rZ99SbKnvpHfuzodQoNRdZlid6JcWFS0zDrOYSZiVbmCjWl9fCqLQck3NbFC2ljfcnPksLEcFk6m1geNotTZLPeaYyl2SdKjIT0mQdxKENzwueH9BGxFjrlv6RiTbac2XqDIBXnFkOMK3nMbJxYRvOtl9Ds889xOW8DIR5t3KU2AvB3lG9Km2fJlyMunHe472k5Qy5lEy9GxLnGMSaWxLtbgmSTR7ulESCkgJektg6j6NYj0dLMmcpKaYIBDU0HRvyIDzaRq7hw12ScsyCd2XTBw+UY4efchygcteDLZEvizgjh9drzwJyNUoE5ceHczLrJSMnWabZtHeUEa7YanJfztcuIat6jzYqOGqWhbmZSJNpld0m5LLZlHd+\\/MUZlG5143MTDaXIANLdCR+SqSidRYNTTS1buAzloW0JB3GwjVmrie0++GC\\/rq\\/wAZXvMVpswZunyU0TmZiUl3lHeTrOtJWrPMkkhRIV1kADotVxPaffEDCSha0neglJ8QSD7xFDL0sOI0PiAIbq4ntPvj0V+SKxHVifycuivXHJlD03QbBfw5mkCYEw7KDCy5K3h3TpaYBzWwv5mtmnTLMuvV1JOZlVtJMu6y4vzqFcT2n3xNq+ThYgi5NC3ESxJmYWuew3x5uNMqz9EUS9u3datpVmn6uoovhTtfbupaw6wlBzGxmHvpmpa8Nhs72GKpmUUbJn6O+hI5vS70vMI17mkTHcb+oyjCruSo9nfR6WcRa\\/5ySh0HvIShQHcTEhWCCCOs4sWCCCCCCIvfykS+A3R9FfDZl8qM9UsT74qjAdWNiKZK2fQaC8tko1HduatciG3NcLl\\/J3E6mUwMosSeA7B7o3v\\/AChW9vn\\/AEy7Fs+Xd1pawcCraYmmjrfR1q5LrvGtzakjaqbDblGct3fs2ntdLhdLzRly1ofR9Uen3mOBdsM6Z7aFiFwKzIl35WRbFrBPmchKsOpB3n8uh1RJJN1bwLAU\\/iF3tq1PLv8AVdDI4gdi22yfe2SRzJhwj6o9PvMOEfVHp95huj6o9PvMLo4Ht+AisY0BFyruJPvt9sbo+R0tfyi68bL0Ukf7kW3adrsOL1wpf3R1Sq1WaQydXZEM\\/cvJmYGuFpD7Hm+csokm4VSwTJ1abJP00xLSwI\\/BEs2p05ZcczNJ3jPMjqzjRpyRNtCnYC31c7iVImLkxQnJRpWSgHabb9uUBEq4M16isqhU6u0dVoZbI6y1g6rO+\\/DWWS1asu4E75uanZhXDzih4yoIOW4ZSqeBPnDPPmHEuHkjE\\/lg4mnrhbeF6TNlkG5DQkqLTMOPBNtDebqkyohW4uGxBAMd5bPJb6J2O4cZIsuoqem3SPzzOVGbnWSbjS0s2ynT9HXviB\\/KIb8RXtLnDKxJaaD0tYGB9JmZxgPJWiTrt33ddE9NsllIzaedoVMtmZUt1ebrTrH0SUNoW9qYwNk9Sj1uoZHOaqLEpnu3iRltqMhxyBnyM+GeYG9Koya5Yi+Pu95RjSPnGXSuRt2tWpY0i2XS6mWNmWJbNAqraFFpnVDtwSdZmy0EkMuzK29o\\/q+UOdH4Tynktk01RSErnHZ2cXuyJ15t1lsk85LMu0QeghPNH0JrX7DwrJy9yC8JNCkk63I86WNOCVt94BtqSbnkTHc553Wq4+CCl2qvtNkXspth5TTStdbFtlB4ancN0dkQqjgR1+PdCUKI5\\/R49sV4Tdv1Aew2iv4eMfh\\/8X\\/2oeI5\\/R49sMmPrKHV7iO+HiOPo7oZV9U9cYIVi9HEjq8e+LIvR9btH2\\/CGT7d3x+zfBDtj65\\/xT7xDqGbRycT15j2H45Q8hlf1j3\\/AKvshlf1j3\\/q+yCFGv2RPp\\/\\/ACTCcXIOSknrEMLGviOvshSfqq9fwEcgn6w8cd0LjcQegiGwORB6DnDiGF7weutYbhxFU8R2j3xQbwD0wQ3BDgbiD0Q44Q34wuOA7BGPDaDvHr+f2Q5g8ePXFAcwD1e3nisY+6Be4HrrSH4OYB6QD6xDhPAdnu3Q0aOaB1Zj1Q5Rw7D9vxhCxpfkfd1aG4vjbXyTWNNYw+xPvmxqdU3Ke5edvylakEKDS5ebqFpzDxmKe4y6laXlTlLqs3OL1kkIaoq1trbd1QrUpHb2A+IbmFWL+Hl\\/JeWzLW9c8g7Vlt6yVuUCeUqmXFLpKd+s\\/Qp6osJyCgFO8FDdEVxhK1ibwxW28O1Ko0jEDUi7N0KpUmcmKfUZSryNpynOSs7KONTEutc2w0ytbSwVNOOIOZK1JVKcBVqXw7jKgVWbbadkZepMtVBt9CXWlUyczSVQztuAtryycw6tIWCA4lB0IzCYRWMVb0uJnVeqqpGWWgIclqSkyDSjkrXK3G1GaUFgJCm3JlTWrknUyzj4MuqJUVjMkgkqVrEk\\/WUpW8FRzzO\\/n3Dmj41+5JambBLja5piaa8pbflnGl\\/RkjVKM1hDiFJO0bUHEgjIjdxSXftrsuoYm5\\/yF1xG0Smal3wgpKinPaJQ5LpIIPF3MZjI7jl8467j7GmP5hmq4wxPX8U1Mt2D9bqM3UnWQCAtuXTMrdEsyFJKgywG2kbggCwj6gS1Kk6e2W5CSl5Vg6hMsyhtKgbWUrIAVq1Hpquo77mPtdqroV\\/FEG1V0K\\/iiOJk61SKiQKfUadOqKdYplZuXmV6u856jSytOWRBzGYIIOWRh\\/mOge3viPqfWggKWUnkr0T+bzHj7fC7+X+L7vuhfaq6FfxRBtVdCv4ohDMdA9vfBmOge3vhHnJ\\/rqeH5w7u7x9\\/IXMn8X\\/y\\/dC+1V0K\\/iiDaq6FfxRCGY6B7e+DMdA9vfB5yf66nh+cO7u8ffyFzJ\\/F\\/wDL90L7VXQr+KINqroV\\/FEIZjoHt74Mx0D298HnJ\\/rqeH5w7u7x9\\/IXMn8X\\/wAv3QvtVdCv4og2quhX8UQhmOge3vgzHQPb3wecn+up4fnDu7vH38hcyfxf\\/L90L7VXQr+KINqroV\\/FEIZjoHt74Mx0D298HnJ\\/rqeH5w7u7x9\\/IXMn8X\\/y\\/dCVTqCZCnTs6oHKVlpiYOY4ltpSkIz6FKyb6MuoZRCX5fTFB+5seMGsDqTMOzybIsmbu2py7K9Zbl14lVoyMtIzLYSjaTstRbUpk7LKIUlEvcikoUlbz6Img3u5nQ3ZYLU35a+y0dQZq1EK26yOHmnYhC+G5Yy3xAaxbr7elDyquJNypd+dLbo2LdWakppGapN61cFZVu2Lbm2mwNVEjWnLUpD6kKQ35QurLdmUF594R2f5EVLZmNpVfxvOJ7SS2eYNrNaSspugVGeaFLlGrkWC36e9WS36WbOyAkFRzJp7blWk0fAypUKyuVWeR2qL2K5KmNKnnONyRNIk02sQc+pCsoOxfDKzmMPsPLLsmXCdW2bbpVJeWnLJ+dlpRsVCbOR1dacnjMTS9XJOu8rVATlH3MEEXlMPOzUzMTb6i5MTT7sw84d63X1qcdWe9S1KUfGPnEtanFrcWcy1qUtR5qWSVHxJJ9sEJuL1E7uJ4fE+iKrWEDfvJ4Dp7hDRSio5n0DohCU31O74wmLeEIE5knpi5as9w4c56fshFZyGXOfd4+MPgXIHOCE1HMk+rsikEUUQkEngB4HphauCR3fdfrlDiBvPqHXXGGzys1ZcyR7Tx+EIxUnMk9JJ9cUhYFgByEOQms8B6fHthuvgB48b4VUcyT6uyEFHNR6t3q+2Mpsbu4X165mCEl8O0\\/b8IQX9U9f6fhCqzvy6B7T9kIL4gePG6H4UkXUPb7IRX9U9f6fhCCuB7PfuhVZ4D0+PbCC+AHX498ep+sPH4aw6o2BMJRRXA9nv3RWLF8O0\\/b8IyE7x4j4wlG71\\/KEVHIE9AJ9QhhDx05IPXkPXDOH4cGpA5kQQ34wuTkCeqG6uB7PfuhxA0J77ez9cPwhxhBXE9p98LE5AnoGcIRkIG8+qG0DefVBCKvrGFobk5knpOcOQ5CCvrHt9273CGTv7Ir0e4Q8O8k9MMVnNSj+6Pqz3Q+NAByAhaN58PtEWwQQRkJ3DwHwhKjcnxhq\\/9fsSPeTDRfEdnxMOXTm4rqyHsHxzhsv63YPt+MZCdw8B8IeTuHgPhFkJLO8Dqz9f6IVhJfEdnxMOI3+Aj2Gj\\/wCB\\/wAb\\/wBmGi+AHX498OXz5wH7nP1k90NXOb0\\/CH0\\/WEEJxYvgO34GL4Tc5vT49sK\\/qnXAQpP1hCC+A7fgYQX9U+j3iF18AOvx74bucPT3xko3eJh6EF\\/VPo94huv6p9HvELr4en4GG6+A7fgYyEbj4\\/YIIQX9U+j3iEFcD2H3Quv6p6\\/0\\/CG6\\/qn0e8Q4nePEfGHUbj4\\/YIQVwPYfdCELK+qfHHdCMZCd48R8YXBFFbkqPUfdFYsWckK\\/xSPXuh+AakDnDFXA9h90bquQlvT5k0p8QLNfmCiUvbByrOyzA2Z8qrlsXPbFQkwdYhRDVGm7kdGyJJJ3o1CXGtKizklR6jGfXJY3kiyNPPR+n3nAmUrder9mTKFuNNpfVedn3DbdNQVvAnza1UabMoQ0UuvOsol0621CFqyZ23U6+mgpABAuqxsDfS1yL3sCOMSjCU4JHFNAmCoJSmqSjayb+i3MPIl3FG1zo26vgeIsd0Tp7TmA3NTTZ3ByXSvIkDNTTgSMh0\\/SKz9HSBEWn5T\\/AGIg\\/wBiNipLMqCv\\/ps4fVl9Rl8ilJsq47aZQAlMwpQJutbmst1gAtBtMusuGalFURwM1BokjJxLiFdO9tR3n8Lz0p48M92\\/IRpF+UaWS3dWgRQ7paYKprDXHmwrgXMpGS2aXW6HeFlzbK\\/MWlTD9RuOjLUNdol6Vl1bcJSWX5VhacCZVqUU4myXnWwg2SSFWdTYkkn8oskC5JItvsY6F2gSnb0upKy\\/9XYmAbXsZd5tSvC7bRSo2GiuIuRDUsuZ8pt2R35qYL8urq2b6ygb89+yUjj5vsRHNq4ntPvj4jDiY1qZPyxOewnQ7lvzCX2EJGW8ZDWYWR1lXbH20Ys8js56bRaw7ZSx\\/wDyflPgoeq3ieYZkWdUNfrKPqNiLd2vj6rQgrie0++JR\\/yZK\\/jLXtpZYXOupPz1bOGV\\/wBPYJZDjRteq3Xb9aebCil5xEwLwoTb2aHWmTLMZFhx7KYi3xvC+T0Xyq1OUKlaBtihOJmDGJdnbLIlL7tNXb+IiPN2LoS40ixXVpc15chIdaL+q6qWmJ1symzJY3w+4CQHJtUmqxtmE7LvygBGoIzPJVY\\/nJTaxAI2lFc7GqSKr73ktX\\/uwLPv7S0TvoIII7ci1YIIIIIIgG8sTeP3Z8oxpGTKHFLk7fqlm2bJNnzth9y2Hdp0uptJJaaOqqusVWZAyXqB4NB55tIdOs9H1ez9PxjIvTFu5N+6Wuk3eKFpXK3Bj5izUpHVUlSU0t2+a4mlNB0NtbVLNMRKMh7ZIU9s9qveoxjmjgR1+PdHzcxbN+f4lxFO5lKE1XKpMIKt\\/Zuzrym08bBLZSlKQbJSAAABaKQnHe2nJt64PazL7hI3flHVL07vSuO6HCOB7fgIXRwI8eN0N2+f0fGF0cSOrx74jUYCvrH1fARKg5Om3UW7ohYV\\/R7OZribpuKbJSlO2cql3VwyTpyQFKPzQzTW9ZwrUQ1x1NRCNzVnywlrWoTZQATTJV47iDrzTYmllWZO\\/WeOXSTkOAB1qaNtBFsaP+CVADRaep+FdhtzTaQvVNQetmnP1FeoSVaz0+7MOlA3BTnTGxHEu6G8NMJr\\/vfNpDeH+HV1XUS4Apptu07an6sSsKASpCUyO8KzTkPXxv5MTCsQ7VttOKbpUXak4w0pSbns69iGqzraAvcEpbpTScoNsqW+CRb6FzTaaPgjB1PX6CJKhyAdy3AvI0uVQ6sjS6ipalkkAlRJOpjzbdKS+FYl6S+kJiHtErbvfGzFK6ZctrUthEpXL3rdRk2Zcqfmj5NLyr7LMoDMzGow2hKXnEjXjvS0ZQSNs0CUyyUzR6cHBu3vKlW1vnd0vLWefj9ZXGMG2EOTs4y0VKW9NzLTZWola1uvuJRrqKiCpRUvMknIn6xjYAyhLaUNoSEoQhKEJB3JQkAJA4k5AAbznlluyjvTGqwhiny6dE3fXbgA0lpCBr3LUBxFo4JrLqnlZ1m63nHnlniVqIUTbhcqV3crwvF6OPaIsi5P1h447or9IuhQ7z8BGgh2yclgdII+Pwh6n6w8cd0ceg5KSesQ+G4g9ENnUEc4LaX7yPZb5w4iqTkoduXr3RSCMeCHSDkpJ6xD6OP4w\\/BzAPSAfWIbXwPXWsNucPX174rBBBGO5w9f2QIOpHr664Q\\/BzAPSAfXDgbwOwQ0aOaB1bvVDlB83sOXx+MMLGgPL7Yb3Q5T9UeOG6LoTQdxHXn6\\/wBEKQ1BCyfqjxzwujh2H7fjDZB4j0+PZC6DvI6s\\/V+mGFCxI65w2LBZHPd67H7odo+r2fp+MXQkg7yOnf6vHshWGFj0j369euFL1Se7r5w5YO5Q6CD68+6HSDvI6eHo8GGDRyWOg7vXw9uUPUnIgwhQuCIZheL0HI5dI+33ZxZANxB6IxyLgjnDatFA9ab\\/AHWjDbG1rSewer7OImjDijjJbFOqjqjctl4dXfdsrJSdRCS986M2rS5406oUmoai3J6SckJlmUqiWppLS0ToEn8\\/aHLHafuHk4xIXnd1BxFFNSGRSMU8PqbLzrbIXrBqaqFqNWTccy5rlZExUqlNzQK1IU6ttLaE548Y4ytW7b1zynkVx0GjV+TKVJVKVqmSVTl8lABWTE6w+2NYDzjkCc9wyJzljNZwTVJGXkMdbNMKYwLCOxRV52m0\\/wCmks7kDz52RemVONN\\/kkutTMs6psJC3FKBWqwsP7RsSYfZZYk6pU2W2QEoMpUZmXGRKgpKXGApTDwTYAJWkBVgVXOp+XtPl4p6dfk\\/1UdH+WDrTTbb9Yw+vR6WCSguOKclLduKlzKworcCkIVdiCgJy1irJRzSsbls8Aa3Myq5XFDE3C5QlmWxTL7t2o1GQE1tHi4Ei3Xb3oiEaimwJibVKoUkJ19VSNmnWtdGh3gLdO0dRaj9szbgIVNWtVJqmJ3g5FumvqnaK0UKUSktUtGZzSvXbSlIxxujk8Uq13bJxGUnLX2chdNICtxzKNer0l1OXMlQFFOeZWnL6h1Mxsj8l3EgAFIruDHlJUnKxNTUzK5178rM\\/wDhJJobBFgAzLIynRLZ1FrUjyisTSuRE1PsTiU2HZ1amNKGnAv00y76rk\\/tjjpUdLkDSJTFhcp9SLrm5KXtDEzBvE1E22yUyUtWKa3cS3FqUdiadSqrITknMlOr9BNUQrTmDsDnGSdN5Qa1JeaRJXfYFfp5CEKcm7dqNPraSVHcoSdRFBU0gbyR5W+obsis8IIl06GmPlsha2bWlLolW9bWmrWq8nPfV4alPnVU6sua4BKdlTV8AF6iyhCvi5TETSLwfmESiLqxXsNSFIQil1GeuSmSSyjMtg0iqFFOf1UhRazlFgIKwg6i1gRuc8iXZxiAKXhTGVLnSUEIlnEBmZSbiynX6RPhIITfMhyj8cwTY2Fn0ryhZWZCUz1ElniR6T1KqSbg2G6UmG1FJJG9U2LDQgnU+i\\/aGmHo+3lUZajSt8s0OtTjjbcvTLokZygKU695jLIqc0yqhKeeVk20wiruOuPKDKUlSkpVk1rjoPs74gG6DukDpGaReOtr4JTskcT6jddNrfkMxK0ilUus0r7nqHUK15dOTlPapdKXTlNSIkZqaqzbSkvTEo85UdoHG5ubVovSuI1JwYta3sVaZP0677ZVUbefRUZiUm5iYplNnnUUJ4TkhNzkvNttUpcpJtTbTzofTJB9SlqJeXxL5QWw1nYtUZGnO16SmqhMsy80ulioS01MmQnFTjUvUZVAl5Gd8zEzT5mUdEzJhxLqUFLjiVXN34UxRTsXUxdVpbc00w3NOSbrc20lp1uYabYdUkht15pQLcw0tKm3ViyrKyqQpIyI1x0H2d8GuOg+zvhKCObsyeY6\\/X8eRiTQrrjoPs74NcdB9nfCUEGZPMdfr+PIwQrrjoPs74NcdB9nfCUEGZPMdfr+PIwRjppU4jt4S4I4r4puPtMowywuv2+kJfSFIfnLft2fqlPlQClYW5OTcgxKMM6iy6\\/MJaCFFWquDXycNsv1G4sT8SqiXJiZblafbctPTJU69MzdanHK3XXVOLBUXgadSVuua2s55XkSczryguXZxEVh7yfmJUo3NBibxTuvD7DClrQpxDuU1XWrwq7CSnzVCbt2zK\\/LPJOadhMLBzjQtoN2mm19Hy3ZtxtLU3d9UrV0zQP11Ifm\\/mmQUs5AlLlKo8i+2kEgJez3KK0x9H\\/JVkBRNgO0HEygG5rHOOKdhWXUlIC3KbhqQaqK3EKG9px+oVOUXyUlQJ1Rbjvyn6zaZpdHQu6ZWnIUU3PoP1KZW88nLbeZaQl7m5BS4lOlrHMkvIHDM9g78oSU8o7kjV6+J7h7e2G+skc\\/x90WlfQPXE5CEjv8Y47hQnnJ7Se+ElLz3D1+PHxtKiePq5oTKwOG8+z7YUAToBBFVKAHXzDxzQiTnvMBOe8wceuHNEDmT17PjCkpue7ifs8YPHj2w2eXmdUcBx7ej0Qq45qDIfWPDq6\\/shnxgSCTmPq+fy\\/VDthuA0H6\\/X484ItUch1ncPHjflF0IqOZ6hw74eSLnuGp664x7FhOQJhCL1nM5dHHt+yEVnIZDiePZ43RloFhfifhBCZOZJ6TDdRzJMKrOQPXuhuo5An0DthcOIHH1Qko5kn1ePbCKzmcugfb7soVO4E9EN+MOIG8+qPVnQDn90EJLO8DoGfr\\/RCsIE5knph9A1vyHv6vCgLADlDZ8\\/VT6fhwhvCjqtZZ6BuHo+3P7YTh2FoFz4axav6p6\\/0\\/CGy+Haft+ELLO8Do3+vx7YbuHeB0cfT4B54eSLAd+vt+6HFaBXf9th98JK+qfHPCMKLPAenx7YTh9AsPE3jxAsPE3ih3A9hhudwPYYWWfN7Tl8fhDdfDtP2\\/CHBvHiPjC4RJyBPQCfVDCHjpyQrr3euGcPgXIHM2hxGgJ60\\/XBBBFFHIE9AJ9QjIHIeFh8Ibhks5qUf3R98NlHNR7cvVuhfhDeHwLW7hb4fKHwLADkLQQir6x8cN0LQ3O8k9MOI3k93Xwj2GbpzWerIeqGy\\/rdg+34wus5qUesw3V9Y+OG6MhG8+H2iDr2RbCSzvA6s\\/X+iFYRX9Y9X6fjHqTdaj3fIQtG8+H2iEV8QPHjdDdfADx43wuv63YPt+MN18R2fExlp3Dw+OsOwg5zen4Q3XwA8eN8Lr4js+JhuviB1ePdD6RZI8L+3WCEV8B2\\/Aw3Xw7T3wu5zen4Q3XwA8eN8LT9YePw1h1A9HxN\\/ePlf5Qiv6p6++EYVXwA6\\/HvhKMhO8eMLghN39jV6PaRCkIv8A1O1Q9xMPx6nePEfGGTn1FdnvMdr6PV3Kw\\/x7wSvoOqaFn4t4c3M6oa\\/7DRLvpFSmG1BOaltuMyziHWxmHWlrbUlSVap6mePmHrIHx+EN1koBWg6pGWqUnIg5jJST0jqyh9kgEXFxmFwdxGmhh9t1bMwy82SFsuNuIPJbawtJ9RAPiI9J2WUlEww5lkEutZjdmQCNbgOjLxwwC5X60Rf3JtaV1EaGu7T7EpN6JBTmUIw6va1r+fUkqcYyyl7aeSpW0P0Sl5MzCf1u9mDhZdJvrDLDm91KCzeViWhdalhCU65uG36dWCvVEvJBGuZzMASkoE5nKXYH0KOC0mbWGIWjdpBWC0kOuXxgfivaCGcwC4u5bCr1GS2AXGD55nUt5bZk+cc3U7lhTcyabNymZTOUzLZIUrKCW3W75TmSLWO8XsNbbo7ErDSKjSZnJnKZumzIQQLqyvyxyG2vpWWLC+\\/TkY80DDh8pnKpLg\\/ssm2+U9PkzpRn6PKecHjHaB3AnojpWx39lcDKP\\/rmXmmOrc0XxnuO7Ngc435b+Y90q4HsMSatIyz5P9dbaX7B2f8A\\/wA45Gmx+XA\\/SCT7fR+CRCEbBOSbvZdg8o1ok11t0Mqn8UpeyVKUEkFvEqh1nDp5nJQI1n2rpWwPNBzcBRksb9fSuB7D7o7V0ervdw9x\\/wADb+l3VMP2PjBhpeDDydoVtO2zetFrLbqQ0lTpUhciFjZJUvMeagqOZyaBMGTrVInBqZWq0+YA3ay82y7v4Xy+qFS7nYvsu3KeyebcuN4yLSq47xa8epZBBBH0Ai44I4atVSVoVHqtbnSsSVHps9VJsthJc8jp8s5NzBbStSEqWGmXNQKWhIUBwSSY5mMb9L6402jonaTt0F8S66Bo\\/wCMdWYdzlwozMlh7cUxKNtJmymWdmX5pDLMsy7rIfmHWmQFbQA482+mWlZmZWQlEuw8+sncEtNqcUTv0ASb6GGnnOyZdd39m045b+0SVfZHm71aqzddrFWrU+QqerNSnqrOLBdUlU3UZp2bfIU668+oF15f7I866R+yuuK3wzbO8jpHu\\/TDVH1u39Pwhwk+cPHEZR8yHlqdU44slS1qK1KOpUonMok8So3J7zFGHX3e43hyj63aPt+EclTZOYqVQkqbKpCpmozjEjLoIXkp+aeQwyMm0LcILjiRk22tfMlC844tP1h2+\\/dHcej9RBceO+C9BUkKaq+KtgSEzm3tQiVmbrpSJtxbWu1tG25ZTrriNq3rISQFiNTU5xNOptQn12ySMjNzir7sssw4+q\\/G1ka21tD0nKqnZ+TlEXzTc1LSybfpvvIZTrw1WLGJkFnUyXlZ21qHLI\\/WjE3RKRLoXqAiVZdlpNltWzDSM0tIAOqG07t3EA8nyll3osXQC0t67rtMqmcD74tRt1xSWwl6\\/aaqxGC2tb0vqzO2uRsymq5tfKQyWWX3iJdfJYcteU3tbjShrZT5eHDcZWXemQcsjwLQO7fxyI4xi9y6N1N2xya+Ncgheymbzr+FVpSy9daSkqxLti45xtsJacSsv0y3J9hxLymUllx5aXNullDnN3kNUpTmGsX1dWVap7FslIuKI9NX0dTWJty6tSdKspQ1GUqVvuY762rzKZOQfQghvzehT62soIShTqHGmQBqLZ2UgctOEQO7MlxN3bbjOYIVWae4sZje2xMofcTxB3obUNxB3+b50Zyp+sO337ow0wol9vfNIORKZZE\\/MKAz3alPmW0EkEFIS643mDmCoEKSM4zK4x2BjVd6hKtXuESgX63HXAR7G0kdxEcE1M\\/lkJvezYN\\/7Ykf\\/r36WhxBwgG8A9MEQlB3j1\\/YfsjSw4G4g9EPwcwD0gH1xx6eA7Pduh60c0DqzHqMN7oOuvdDtPAdnu3RWLEcOw\\/b8YvhgixI7\\/dwghZJzSOzL1bofNHNA6sx6o49B3Edefr\\/AEQ8YP1k9hHuPwhtY9Hw\\/VCFjS\\/L9UOIIIIYWPRPdr16oQk2I79IcsHcodBB9efdDpB3kdWfq\\/TDBo5LHQd3r4e3KHqfrDt9+6GFC4IgWNfGHKD5wHSD490LQ34Q4G8A9MMQmLkHJQ693j0wun6w7ffuhsOIy480Lg5gHphtY3H1HrrdDaxYhXfr6t0OhuIPQePVzwvDVJzTnxI3ekdfXDhJzA6t3q+yMdY3Hlv663w4NQDzi6HyTrJB6Rv9x9sMYcMK4pPaPj4zhuGCLEjlD5BzA6t3j0RdCSDkcunx9nphWGVCxPtEIULg+0Qqg7suj3fp98LIORy5j7\\/HwhqDkQfX2QuDwI7RDCxY34H49fbHiDcW4j4dafrh0g5HLp8ZwuDkQfX2Q1Scx44+MoWQcxlzj3QiPFp4+35w7B4Edoi2YlZWfl3JWdlpeclnk6j0vNMtzDDqTuKXGnUrbWkg7wpJHHmixCuY+ju8c\\/bHYWGFh1TE+\\/7TsKjhQnbmrEvT1PlpbqJCSJLtSqbrafPWxS6czNVB9OX7FLK3RjTk0xISszUJp9MtLSLD05MTC1FKWGJZtTzrylDUJbbQpZI1ATcboclJWYnpuWkpNpb83OTDMrKst6uPTEw4lphpAuLrcdWlCdR6RGsbN+TF0TcPsOKfXtImSsC2bcvXECUmbTt6p0uiyNLnU2RLVGWfqrurKsMIAuGv0yWLqlM7VyVt6SfbdMvPLDm4MAAZAZCPjLKt6m2vQaRbtFlkSNEt2mSVFpMmkDVZk6fLty7CdYpzUsMoTtHDk446dqreTH2O0R+MI+WeO8aVDHWLqziipzT77s8+WZFE286+5J0mVsxTpIKW4oJDEuhsOJbIbW+XXQlKnVE\\/VLA+F2MIYVo+H2ldouRlG\\/PH7lXnVQe\\/LT0wVKGcoXMrc7EKuW5cMtA5W0AXwRZtEfjCDaI\\/GERLtx\\/XEezw7+r+ESzInv8Ab10T3WvgizaI\\/GEG0R+MIO3H9cR7PDv6v4QZE9\\/t66J7rXwRZtEfjCKjNatm2CpavNSnhv8A+N5uW8ZHLh0iPQ8pRCUFK1KKQlCUkrWVFICUJBupSiQAkakq04R4UpAudAN5JsPWet57rRbflLOIbibW0VsIJOZW8uuXJiHiHVKa2laloXQKdbtsWzMrQE6jqppV1XTLywb13E+SzKXA3tmtr0tYVut2dY1n2m2EoTbdsUKhqCVBQLlMpstJurKwSFqcdZU4tzM7RaivM55n5zltqmrEjlRMBsLdZx2QsTDzDKQq0kFqcQiZqt53VfFedSlSUsIW\\/asxRAss+UDKVSpxxagJRjsiPrRgSlqw35PuxLDrja2JmbpFdxfUEOoLbrrmI63NTcg46ghJSpuSc7BBUkktpQCbgx85tv8AVPpHHlTShYWhiYLACVFSQJKXlZBNt\\/8AVJd8qtoVrVl00hbWT0++LS4OYeuE4IdyoG839fPjpFGWJ4H2RcVE9nVFsEUJAGZIA64MwGiR18TCwjn7Pv68YrCbjgRu4q6OgdcJre5kelXd3n1Q3gCSTdXs5+PyhdraDQdfHjFSSTmd5MUgixSstw4+6HQCTYR7FFq\\/BHHn7Pt8c8IqVkOs8O+Kk5Ak9\\/jOEScznGQhHs4nn17viRQniT2mECcyT4Ai5auYenu8c\\/ZCKzkMuc+6H49AuQOcWLOZy6PGcILOZy5h7\\/HxhRRyHjj4zhAniT2mCHgLADlFizuy6fd+n3QlFScznFIfAsAPb4wgeku\\/AdD36xas5A9e7x6IbrVqpKuge3gPbCizmcuYeDDV9XBI7T8PGcPoFh46w5DeCCLVHIHr3ev7IWBcgc4cQABfvt8PthI7yT0nj1c0N1HMkwqo5A+oRmlo76IzWlLh7crmGF4SdMxrsqoJE7YV3TMrIW\\/edEqqC5Q5mgXGUy6beqypiWn6Q5K1xuboUzOokHZ+4bbROMIe8fmpWU83M3MNSrcxNS0i0\\/MLSzLianHAxKNPTDhSywZqZU3KsKfcbQ7NPS8shRefaQrZU2k1CtTJkaWwqbnBLvzKJRspMxMNyqC8+mXaNlTDrbCHZgsNBTimmXVIQopCThCo5qPVu9X2xbH2l+4fXzhbdVWsfEW1a5Zl3UN8MVSg3BIP06oyyss2ndk8lO3lJpvJ+TnpZb0lOyrjM3KPPMusun4uNo6y7LOLYfacZeZUW3WnUKadbcQbKQ42sJWhaSCFJUAQQQRGCUqQooWlSVIJQpKgUqSpNgUqB1SoG4IIuCNbQks7wOjj6fAhus7wOrP1\\/ohZRzJMN1fWPb7t0eI3+Aghu+dyR0kn1fphtCjpzWegbvVx9ucJw+kXI7tYc3I8ft+75wQk8ckHrIHx9whWGz53pHUT69w9xh9IuR439kISLkeN\\/ZDZX1T447oRhRZ3Adefq\\/TCcP8AXXQh+KKOQPZ7eaG5OQJ6AT6hCyzuy6T7PGUNXjkg9ZA+PuEOo3evr7YIacOqG8Lq4Hs9+6EIfRoCetP1wQQgrie0wsTkCegZwgdwJ6IGxvPHdDiBvPqhBRzUe3L1boQV9Y+OG6FobneSemMsCwA5C0OQir6xhus+cerIezP4wsd5J7fbCB3knpJjIGgHgIIRX9bsH2\\/GG7h3gdA95hZX1j2+7dCCvrHxw3Q4jf4CHxuHgPhCK+IHjxuhOLl\\/WPV+n4xbGQjf4CPYIbv8Ejt9mXfDiGr\\/ANfsSPeTDsKSLqHdr167QyfO5I68\\/UPthos+bl0kd8OX\\/rJHV7ye6Gi+AHjxvh9ofV7zf2fcIVa7nv8Ad84nwcndc6Lw0HdFyrkpWZTCG17W10aoA+4eWVZWr5qGhrNfc+G1nLMrQrWW859KrMkrQFKTrAEE5AkA9PPl7e0xq+5GS4zX+T+wnkXXFuuWlX8TLaW4ovrcKPu\\/r9xS7a3HlFKhLydwy8uxsRsG5dqXYSM2F57M5spTMuJzAPmkJJGYBSk55E588aTHClSdOkZwIbyqm0N5SSClL7DjyAD3hux+tpwtHYuFnfPqFRnSpSlrpEgpat\\/5RMswh2+pOjmYHv8Af5e1z225YGMl1WY4hTK7QxCuS0VslLgLa6PcE\\/QltKDrj7o1DLlBDjzrg\\/CdWfOPZC\\/qnr74+y5QCgiztPPSxpyGkSzLWkhihW5ZhsMJZYlK7etSuOUaYbl0hhphqWqbKGWAgFlpKGXEhxtQj4xfAdvj3xY1Uc85ZpU4N01JNOjXNcLQ09e\\/Eflt+46mOVaux5vOuM7+xffYva1+xdKb24c+6EF\\/VPo94hq7ubV6PaQIcr4Dt+Bho\\/8AU7VD3ExhI3Hx+wRgR6pOEl3nEHCrDO\\/S828b4w+sy8C6jYajpua3KbWi6gsIEuEr8t1kpZSGgkjZ5IyEEY38nJdhvXQK0Pq6pxL7v9jthVRJp3bOTC35+1LSplqz8w88ttKlTD05RX1zSSFBuYU62lx1KA4sj6D0+YE1ISM0CbTMnLTAvvIeZbcF78fS9\\/hFxSznaS8u4SFdoy0vNr6WdCVX38b+OsZqxr25VOvLt3k9dKmfbLqFzGHHzDm02w6vZ3TcNDtl5CkTObeyW1VltvOgbeXZU69K5PttZbCY1DcuNXvmfk4sYKepcsk3TcuE1ACX0Olxwy+JtrXRqyRS4lKZn\\/vcDitqHW\\/JEzgCA8WXWtRjCY81wniaZtcsUCruAXykqTIPlACrHLdVhexINiASIxqqvJTKgq9iJKaAPIqZWlPvIiCSNxHaIcDcQegiG0Lg5gHpEfOKKWhzGW2gzSfnvSzwQkw1tdjdT1YKdiiYI+5+h1av7Qtr3AMCmF4v5a0sEGYR5zUYkJ4Ds926M\\/OTRp6Z3S3seaXs\\/wDcegXzUUFetrJW7adUpObWQILmzqih53m7IvEHaakQDaZNGR2dY8mwbLYwhiMtnk8aROJa\\/wA6U6jdrEowPLCbxtg+WVqh7E1DQ4OJbNTlS5YcfQCtOdolkYMsJmL7p5yJ8kk6lMAkkZhUo7K8xOZ\\/XR3HeMt5zjWJ8o+uJqkaD2HlBae1Ju6dJCzWVy+u+gu0ukWDidU5p7zBsXUS9QaoyFMvKOankPoQpTGsjangEwXrvn3t5bl7fms1Ao\\/ZXahTUIBSc1HWbDyvMyyUned4B0bfKbrgMphfon2olxYTWr+xNuIsCZCUuLte3bWpiXVSnF9TSbuUEzA82V2y2iP12mI55E9MEtsiRMhCUCoYsr08VFJSXS3L0+nhYJHpptIBnMNLoy70m3Wm2maCGKoAbhFNkpe1yQO3mki2h0P5e4HrO\\/WLFgiwXbsnHlDMS1EmlhRyOq47NyDQAz3pKkKd3p35JIPmkRlik5pHq9UYzYDs60\\/ccxq57KUp7GtkN3lD0yvLPiNbybPIbjq7+AjJdB3Eenx454vLFq89YfF\\/2puXR4XaS5b\\/ADl44pqJvNLH6KUD\\/wAoV\\/8AtDpH1ez9Pxi6E0cSPHjfCkRPcs9\\/22PxjVq+sYVRwI6\\/Huh2wfrJ7CPcfhDJB39o8fGHDZyWnty9f2wlf1j3wmOQRxI6vHvhWEAciD0QvDCxY35\\/ZBFyDkode7x6YctnJaT15evd8YacIcA8CO0Q2ddOYMB1BHOOQgi1J1kg9I9vP7YuhjxjH3HvEAORzHEbxD8HMA9IB9cMIdMKzSU9B9h+3OMcixI5Q4vUA9aw9ScwD6+2FkHMZdHj7PRDVB35dO8dvj3Quk5Ht3ePHTDChYkcOENwtCiDxHp8eyE4qDkQeiEqFwRHihcEQ6Qd+XT7\\/wBHuhwg5HLp98NAeBHaIXBzyIjHIuCOcJQbi3L4de60OYqklJChzHwPSM4tBzAPr7YrDBFiRyjxY\\/O9v2fI+qH4OYBHPvELpOY9hhiyv8A9ZHxHvPrh0k5HqPHx454SoXHeN0NwtCiFcx9HZ0ejxwhOAHLeIYIuLQ2fRVcbjv8At+cOknI9XP46oXByOY5oaJOY6+eFUK5j6PHjuZIsbHhC9COYMPAQRmPHVG1nk28LVPTV14wVGWz8lUuzLVU62FHyh1EvPXFPsbRHmral1U2mS8y1ucTN1eUKjk9lqpk5eanZuXk5Nl2ampt5mWlZVhKnnZh+YdSywwy0jzlOvOKbbQhO9bhSOfOJOGj9hsxhjh1ZdjsIbSu3aLLmrutZFubuCcK5yszSV5qUpMxVpmceaJcXqSrbbO8NkDnrykMW\\/QGCU0WXcyz2J3zLKCVZVppcmW3p8ggnR91cpJKBGVxmZeTmBBAv7yccIiu41XXJlvPI4XYE2jMnMldUmwtmnpIIAJZQmanUqBuh6VZNrKvGQEs2GGW2yQVBI1zqHes71H6nDMnLq3c0L6w6R\\/EP\\/uRSCPnV26jvCff8\\/Hoa\\/QcNgAC50+77+hrXWHSP4h\\/9yDWHSP4h\\/wDcikEedurkn3\\/Px6GvvZjmeuj0Na6w6R\\/EP\\/uQaw6R\\/EP\\/ALkUgg7dXJPv+fj0NTsxzPXR6GtdYdI\\/iH\\/3If0xkvzzTbSStXnrCRmCMm1DLoIG\\/cM9+fWI4+PpLSbU7VVFIJU1KPLAyUT+yMt55JBBOajkeHNxMSbB0maxiig05WYCZqkolXZpzLyJdS4soCgpJUEoNgQd+46xiTygxKTDtxdLSyL6C9rC9iDa5udd2kQfNLipnEnls9IesvgqYsGZZpUuw4kltlVmYUWhh28Epe1FhRqzs3OhWq4hM0+HGc2Ni6jI7MdI9YjDqjTjF38pLyg98yq0TEp+rdjTTqbNNsPsJcpVRxmrhprimpnUmWnZiRtyVdeS+yhwPIWHES5GxjLaPstjWVRTzhKgN5gzhrAWD6I0lQsoJlqQw7dQsLLV25Uv0QSokmPlftAnFz2LaxMLUlSnJuYcUU2Kcz8y\\/MkpsbBJL5ItcctN74qSOKkjtIi0uoHPn2AmGcEQoIHEkxDYXU+fwRl1nu\\/TCJUVHNRJ8eoeqKQQoADcIIIItKgO3qhNSieoeOMLCSe4cz193fBFyl8w9cJEgZ5n38\\/v9EBUB29EIkkn3Doh9COW7iePh1u+JFVKJPVzDxzwkpWW4cfd48dYpWW4cfd48daJOW8\\/p+2HwLaCCAkAZnx1QiTmczzwEkn3DohFauYenx47yHkptv3n3RRRzPVzeOuEVnm9fdFyjkOvmhEnPeYcQnifV8+vsjxZ4Deevf8ACCLVHIdfARdCKjmeocIeSLnuGp+Xrj1IsLes+MWE5Ak828wxUSokniT4Hohd5f4A6ifgPcfVDeHoWBcgc4ISWczl0e\\/x8YUJyBPq7YQJy3nfz7+f9JhxA4+qHtw8B8ISWd+XR7\\/0e+O9tG7HataPOK1Dv+mNuT1NCF0e7KKleoK3a086wuoSSVEhLc3LPS8tVaY4ohtuqSEoXw7LKmGHuhieJPaYQJzJPTGNU6VIVymVCj1WWbm6dU5R6SnZdy+V1h9BQtIUCFIVY5kOIKXGnEocbUlaUqGXSqlO0ipydWpr65Wep8yzNykw3bM0+wtK21WN0rTdNltrCm3EFSFpUhRBmEP2po56fFqyeGeLtOkK2\\/N2xT67g1i7SHGqdetOptSkGqiJKn1txt155xjyhU18wVZqbpVQabel6hShU6bLPKj3aavJ5406GdYeqNZl13thHUKgZO2sVKJJrbpq3XioydKu2mB6aftKvuI3tS04+\\/SqmrbGiVepOMTzUp2DoB47ztKqhwpqVRWy9LuvXBh7MLdCdhMsLcnq1QWSpWZRMBT1clGBkkFFZKjm8wiJMWH2Mdv4g2cuzcVaVTbqs656c5RKu3W5NmqybktMJ2M5S7jk5pp1qoSOZ2ZmXWVzKWwh91D6SHmdJgna1heiTFO2K7cZ9+lVSmtsU3Ae2WaUHJepUpYDdDpeOipKSEstp8xbrrjq2WTKrl52ZkUSrk9PdTVfAtL2s4aYx9hdhmUqkwhSK1TJRH5SUq8uhHnzaGwf2Sw6SiZZaVlmhLvMuslQcMqmC2o5An1dsN1HVST0CN6PKIckzVcI5at46aMUrOXbg6EPVq5rDYfXVrjw9kFBcxM1ahOlbs1c9jSoKFOlK5qv2\\/KZzM9850eVqNZkNFL6skhPSfYPtyi1cQ4YquFp4yFUZSC4ntpScYV2sjUZVVi3NyMyAETDDiSlQIstsqyOobcBSOYKlS52kza5OeZU06kmx1KHEAkdo0ogZkEgjcFJIKVpSoKSGvGCCCNMgbz6uuuEYKzuHLodd8EMnDmtR68vVu+EO1q1Uk9A3dp3D2wxO4E9EZCBvPqj1A3n1Qis5qPVu8emLYOMEOQ5CSzvy6B7fGUM3zvSOon17h7jDonMk9MMXDmtR68vVu+EPgWAHdBCK+AHX498JRcs5q7N0Ww6QAjxsfWdfgIItX9U9f6fhDdZySevd49GcLLPAenx7YbrPAenu+MLaB08b+rr4w8gWHjrCSuB7Pfuhurgez37oWXwA6\\/Hvhus5ADPifHtyjKTvHiIVCJOQJ6vbzQhwhVfDtP2\\/CEFHIHr3ev7Ifj0akDv+NoRhA7yT0kwsrgez37obk5Anq9vNDiBvPqh+ETvJPSTFIIIyEDefV17oIIZOHNaj15erd8IeE5AnoBPqhgTxJ7TDkLRvPh18IZunNZ6sh6hDZfH0d8LE5knpJPrMN1HNR7cvVujKb0\\/xflAjVRPd8SIl8cgPW01PRDxFojpUX7ex+uXZ5IWlKafV7Ew6m5fN3X1VumfbqusEJQW2vJxvUdY7ma4lCJ8IBSlS2G3AnW8471N5jMgkZo5hlmmI\\/8A8ndrXlNi6UVtlxJTSbtwwreyBcLjZuCj3lIFxaCrYpQ4LYCWlIAcUW3A9rIS1lvrv5sJnpBaQkKclVoz1lD9ifUoZp3pIG1OWQ59\\/NEH24TRpezRyrpYRMpkZ+kuLQpwsqIef8wOVaWnfSSuZCAFIItooCOudlS\\/PKLRGyopKpSaZBtcfsaZfbGmYb0s8\\/nEAflnLfRbXKS6R7LIc8mq05h1cTCnXGXFrXXsJrDqFROTDbaW20Vd2ossNuJ2yWW2i45MuKL7mJzD23lZR7PPayzLoO\\/M7RtKsznv5+ff0xsL5eWgKo+ntPVJbTiPutwhw5uBLi5Uy6X0yxrtql1p4j9fNpVbKmDNAAIdZckh\\/wCBGNcVBd21EpK888qfKtnjxZZS0rPPeTmg5ngTmU+blE+wtUE1nZ5gOqpSUdvh6m3QVZyhYkJdpxCl2TmUlbCgpQSkKUCQALCKAxzK+a4orrNrBqtVPLYWGRyacWi3IFCkkDfa190ckviB48boZv8AFI7fbl3Q6X9Y9X6fjDJ45ry6AB8fjG3TuHh8dYiUehxyJ1xi4+TG0YZgzO1mKZTcR7emW\\/LfLXpRVv4wYg0uUl5gkbSWUqly9Pm5eScQkyshNSTbZclvJ3FkdF\\/J5K+us8ndTKctxx1FqYy4n0BpLjLDaGETLlCuktMraG0mGy7crrxemCXg665LjJhhgQR3bhB0zGFcNvK1UqiUsKOgupEmwlSrAADMpBVYacBYGwtmkrzUyQIuLSrCOeraEIJ1PNF\\/V3mN58aLPlB9ZNL0E6BIl8tG4tIGwKMWwyHPKgzauIlw7BSylzYavzEZnapW0SZfYh0pf2T29OI7XyjerqY0YcC6CJsNip48fPCpAlJMwaFh9d8kJsKAzAkvuhU0RtAP90ciFZJLWq2lvmXwHilwWuqkvsa33TKm5ZXEfmum2u+3oqGhxq+rJRp87rshII01W4hI4jeTY9x3ExD0hVG8dnu6\\/SYSi9B3kdPw\\/THz6V9YxT8OkcCOvx7o2fck\\/ICb0kLlm1KWhFKwiuSbSQjNtbz90WTIoZcXlqoKmZx95A+sssgDzErMav0fW7R9vwjbhyRkmF4sYqz+bmvLYeScmlIH0ZRPXLT31KVu\\/ZUmnILQ1h5qnuPFNQbdXjL7Jcdubs9GEvf++5uVlbbjv7UjXde4INosTZKyH9pOEEEA5aoHrH\\/6dh58H1FvdxOliCYlE6OculyqXO+Upzap9PZ1jnrfTTEwsBPNkrybJQzyz1N5I3RuPlPdfD186H1qh1g\\/M9p4y3FsUpWZpBuWsYd00vPKJLZl3haQTLJSAoOMTRWVayQmS7o0Sv0N4zKtTVU7QWEZE64LSKs46SNXcle2ZAOv52qfTFL+Uz1YuaWOAtA2zSkU3R4YrCZcZeUNqrmJd9SSn3SCSWH\\/ALnkolwdwclZgpyzMTfySKf5tsBwQ8pISuZViWaJOijnxXWWm1HuWw2hQOvokEkWi+ttcx+UrDaSbF2lNEXNrBiVeIPMJWkW7x640lYDNBMncT+7N2ap7J3HPJhqaWCd2WqPKDq5b8yekRkCn6w8cd0dHYHN6ts1N\\/Pe5XXm8tXL9hkKeoHPPeCXSMstwT9Y63m93g8CO0RL8RK7Ssz5\\/wC0Qj\\/EZbb92X1RyHPG808f4wHsQkfZDlJyI7YXhsDmAemHCTmAYjawdDyPs5X++MFY3H1E\\/C8XDcQegiFweBHUR8Ibwsg5js3d0eL1APWtobjkEnWSD0j28\\/thwg5pHVu9UMmFZgp6N47D9sO0HiPT48c0MrFx4QQpCqDuy6PHfCUXIOR7d3dDMEP2Fbino3j4+OuF4YoVqqB5uB7Dxh9DKxY34HowysWN+B6MEXtq1VA8x3HsMWQQwsa357+ut0KQQQUnofrjkAcjn0b4ccYZtq1kDpG4+jvHjdDhB5ujeOzx74ZWNL8obItoYdpOYB9fbFYSQcjlzH3+PhCsNQQqg5jLnHuhdCvwe0j2Zw0ByIPRC4PAjtEMrFj3GGz6Krjcej84doORy5j7\\/HwhWGwOYz9cLpVmN\\/EeM4ZWnj7fs6++F6EcwYuBIOY3EQ+QoLSDz846DDGL0LKDnxB4jp+0Q3DJFjaORQrmPo8dUKQ3BzyIPWCIWSrWHWOMNLTbUcd\\/cfvhJFwRzi8Eg5+CPAhYEEZiEIuSrVhpSb+PCEAlBsdx4\\/b8x0cwNCfD03\\/jpQJyaYD1HsRly8qiVJbU2Zmmuss0Jrzxq7X58mJGcSgDaLaknyD5pdEi+3ZdTNOS65mXJhRdOY84NgaraebPNIKx\\/wDbOeNWvJ24duUnDep3i6ypqexEuAS8m6U5E0C3Fv0+XdSCNZIVV368XMvNcaZl3MtwI2zIQltCG0ABCEJQkDgEpASkDqAGUfN7yj8UGvY+nZJpzPKUJCaMwEq9EOypLtQUU3ICzUHn2FKFipMq2FfVtH0W8nvC\\/wCD+z+Qm3W8k5X1uVqYKgM3ZTIS1T0hVrlv6PZYmEp3JXNOEfWJN8EEEc9Re0EEEEEEEEEEEEEfcWAB85zhAzUJFeW7eAqZZ1ss\\/wAEkA+gEcwj4eOwcNVAVifQM83KapwHmyTMS6FJPSrNQy6MzvzMWtsQaQ9tUwa0tYbS5VFICyMwCzJzXZjLcXKl5Up5KINxaNLiFWWjzygLkM3tu07RGYk62AGp0v6rxAK0aX5msY66Z90z6mlz9cxqrD01s2Q2lEw9eOIdSnFt7zs2XnqgnJkaoQJdKjmMtXNSMU8ELbNm45aa9pTgdNXtTSXxBtup+US7klM61DvC7aWnbyS3HUyrvlUtO7RgOuOsuFTLrqkobXGUkfXjaTZzGVVKVXSlqkoQctgUN0SmtoKRp6JSgFOgukgnUmPlLiTP9OVDtAQsOoCgd4UlltJB5m438d8OItKkjnHv90IxTWT0j1xBg2OZPh0Y0cLFY5hn7IsKlHny7N32wlrp6z468otKzzbvb49ULDfJPrPx1+wQQoSBvMWFfR6+77YTi0rA4bz454dCAN+vw+\\/rSCLu2E1L5h6+6LConj6osUrLdxPu7e6Fx6AToIqSAMzCJJJ9w6ICSTmTvhJS+ZJ7T3d8EOpTbXefh1zgUrmHpPRCRIAzMBIAzMIlRPwhaU31O749ddwpVvHgPnASSc\\/AHgxSCLVK1R1nhDoHAeqPEpO87+\\/rfFq1cw9PjrhFaghJPPzDpMXE5ZknrJMMlrKznwA4Do+0w+BYWhcWE5kk8TvMEEWqVkN3E+M4UBc26EOoTbXnu8IsWczlzD3+PjDdZ4Do8e73woogDM+jt5oQJ4k9ph8C1gIFmwsN568dd3frFizkMun3ePjCUVJzJPTFIeSLC3rPjHqRYAcd5693vjk6DXqpbFbpVxUWadk6tRKhK1OnTaB5zM3JPpmGVZDMLQpaAHGz5jzZLTiShakxIi0XsfqbeVapSmn0M0bEa36bOy0qXSpFFvKnsusVKllSiAhTzktN04rO+bfkqZsU5PgxHGWeb1\\/Dx2Rl5opX7N0isTltNzbktNMPsXTbjwOS5ao095jysMlYJDh1JOdYQkBCDJzDmWs4SaX24YDk8YYXfmy0BP0uXeQ28E3UJV9TSiSQMxEpNMy84m6rJZRNoT+3rzdDeTtjJdCxcrDsy6U03FCAwhKlHIzV5dK3JJwAkhJmkdtJKCU5nXnZTMqzItLfw1xUqFlvpp9QU\\/ULZdUSuW1td+nKWoKXM04rWEpSpZDj8otaW3MlOtJadUtbmpPlNeS5pdapVW0odEqgsvS7jEzX8SMKrbl1LYnGFqem5+9LApbIJYmZdW1cuGzZNllpTba56gyTM0xMUydzlsi6Je9bTt+6ZYIQmsU9iZdaQCUsTqNdmoyqSSo\\/rWeYfl9Y5k7DIFXP37hniXPWPPeTTO1nLenHQqdkknNcss+aqfkUnIB4AAvMghE0jzVBLiULbrHyZ\\/KmRhRpjYtttmJme2dGYVIUDET2aYrGzSohzsG1NPEOPPYZQ4C3MyRz\\/Rrd1SqFSaXZJXR+1DZVT8YSL85JMJbqyApwpbSlJmVgC7jRICUTm7NchuaSOze9ModTBSgiR1yrPJr0t6lVfS70ZaGy5SphmYuPGCwaAyBLoln8pibxItOlMN6zLTalTExfNHl0pEqkLuNiUl2ma8pEcWO6MR4bm8NTrcs86xOyc2w3PUmrSS0vU+sU2YSHJafkn0KW24082pKiELWEFQspbam3F8BVqkTtEn3pCebUh1tRyqKVJS4gKKQpIUAoEFJQtChmbcSpChmSYbvq3BPTvPw+MNFndl0+O6FVq1lE9e7s5obqOaj1bvHpjSpFgBxOp690a9IsB7TFsWrOST17vXF0JrPAenx454cSLkd2vshUIqOqknoHt5vbDEniT2mHL6twT07z2c3t90M1nIZdPj7PTD4FyBzMEJE5knpggiijkCYWvUhI64CAakDnCKt5Pb7t0IK+sfHDdCpOQJ6IQJ4k9ZPxh9sW14AW+EZG6El8ezIfH4w3Wd+XR7+PuhUnMk9MIE5knpjIQNSeQ6+2Drr3QiviB1ePdCCzwHp8e2FVHMk9e73e6EFHNR6t3q+2HYUgXPgLwkvgB1+PfDde4dvu6vSIWWczl0D7fdlDdZ3gdHx\\/RDyRYDv19v3Q9FkEEEZCBYeOsEJunVQrr3evdDBZyQo9WXpO4e+Hb53JHWT6t3xMMXzkkDpPsG\\/35Qsbx4iHE6IJ9nuHxhrwhudwJ6IWWcknr3ePRnDdZySevd49GcZiNxPf18Y9Ru9fX2xI++Tr1ktX9pQ22X3Upq1oYZVssBsFl5Vv1u76el9x3VKkKlxcqm2m8wl0TL2fnNJIkXYyNFC7ddSV5FFUQSRkPNNPUBrZ5hRCl5bxnqncAM4jC\\/J6ans9KfGOh7Z9Kaho\\/VCqmXSSGXTRsRbAkw86MynasGultnMZ6k1McMyYlI4zspFKozoKiU1F9vJX1SlbGuonPIFQ2XH90QeO6sPKep\\/n\\/k04+ygBctL0WbzXGZKpHF9GnFWspOpaQUAG5Ga6Uk5Y6s2GTNk0NCibImqowBuFnUTSt+thmdJ0tv3am8KL5QRTHU6T+DlecbWpNQwFkqQiZW8HNoKJiFfc6WEMFwraDAuBDhWttsPeUhCVOFhaGtR1nubS3KacySlD7ZzOZGzmn0AdQySMhzJyHCN3PyhujeT33ow3D5KUCrWjibRvLdqVCZ+YKxaE6ZUMBwpb8j+6MPl1LLe38vSkrdDKUtaObGc1reaG47KZmkDLjvc2mSt\\/HNzq3ZdsZvk5Taqj5OOzGZKy4puSnpQqUrMT5hXK1TiM2ddyDLhNiq6ctilFsiav2vsdhj7EqLW\\/Z7DtrW0mJCWfBAsND2oIIBBBuCoHMfqycyT0k+rm9kMFnNaj1n1DcPZD1RyBPQCfUIYRbu6KuibL8mnrnlehnjLby0vqXRdJi4Kk26pZW0mVruF+FjKJWXRmSyGpmiTky8lIDbjk6F\\/su1zI6f8AkxVV2+FWljRAXs6diDhnVlBSj5PlWrbueUTsUhfmvE0FXlCilOu2JUZr1CEEdsbOllzBOHVE3tJqb11Nmpl1ocOSAPZ6rSoC89Ikla6IcRp\\/2b62+BH6PjuuSbESk4jMfKSZ9xvDrRWpYbQpqdvbE2oKezOuhdLoNpSzaAkebqPCrOqUd\\/nMNHPPMRJniLV8pXmZhEtoYySXliWff0hJl5gnzHH5ZvBBqWdPA67DU7NpQTvyfd6d2v2uOhnZ3iRRBOZmQa0toX6tIMAm\\/AFwE9wNtbRj4mJFDnrf\\/TD1GblwfaLiIskVSciDFII4LWNx9sVLDkbiD0ERug5IKTdXWMeailbYYlqbhzJuIzUXVOT01ebzK0jUKC2hNOe22awrWW0UoX5+ppdScwD6\\/Htjd7yQUuhFLx7nUqWHn5\\/DWUWCUlsNycvfDzS0go1tZSp5wK1lKQQloJSk6+vRXlIOFvY1jApNlOChMi4uLOYmowX4fkwu3faLX2IN9ptQwxe+VBrDhANvqUGplP8A58twQbi8SbdGRlKqBcrxSc11iWb195Cw1IpWEZnMEo2utu4a\\/PuIh2\\/KSKs5UNP+0ZJbSGk2\\/o04d0hhSVrWqYbfvrFWvF50H6iw9WnZcJR5myYQo+etcTJNGFlS7Mrr5OSVXO60COOu1SqUogjnzDyOOWW\\/0QnPlDczMu8pJdsu8+681I4U4UysmhayUyss5RZqeVLsg5hDapycm5lSU+aXn31fWUqL78myUEvsA2begE5qI49qACTMVWffKrD9IuFQVa6r5iSTc2htmevNVNIJ9KrSzRtqLIkyqxvyLY0G4i27SNd+C6CmzAoq1i7VZ5fRqAJl2tU5k5729bPd9bh0dvIOaezd3eyOqsIEhNkU46hTtZipOEkEbQiffb1weCjk3qZ7\\/qZfgx2kg5HLp948GGK0SatUb8Jt8f4qynhytb1c45YmtZl\\/+6L9xtDpB3ZdHx8GF0HiPT49kNUHJQ693j0wuk5EH19kaVxN78L6jrrfGMoXBELxeg5HLp98WQcIaTqkpPX6jDEO21aqwTw4HsPccj6IfA5EHojjQcwD0w+bVrJB5xuPaIb8YId8YIsQcxl0e6L4YIsSOUELpOYB9fbD1pesnrTuPwPp+Eccg5HLp9\\/j4Q5aVqqHQdx7\\/RDaxcHmOj7oSsXF+I6MPIIIIZIuLQ0DYg+3whRpWqrLmVuPwPjph4Dkc+jfHHw8aXrJ38RuPwPjnBhjxhSx+cNx6Bh4DwI7RCyTmOvgYaoP4Pq7vHdCyTkeo8e+GCLG0IhaFEHmJ7PaTCcEJIuLR4Re4Pq6+Pcd+sOknI9R4+PHPC4JGRH6R4HGGiTmOvn8dcLIVzH0d3p9\\/bDBG8H1whJscp9V+fL7R98Owcxn0xWEUqy7D4zhbshlSbHu4QpQuLceHXLh0IWac1fNV9XmPR9kOgct4\\/T9kcfC7TuXmq4cx6Oo9Xtz6c9yYZItoYfpUFfEQ9kJOaqU5J06SZXMTk\\/NS8lJy6PrvTU26lhhlI\\/HdecQ2nMHeojfwjjQSDmIyZ0RrQF548WWhxouydtPzF4TuXFo2+3t6W6eYo+f10hpX7l3pjS16pM0Ki1esvWLVLp05PlKjbOZVhbqWhqLqeWlLaBcEqUANSL7ag0l6vVykUVgkO1WpSUglaRctiamWmlOkfotIUpxZOgSgkggRv7wNsuXsq2LYtWV2SpWzraplGDjKChExOsyaJeYnciErDk863OTjhOS1OvkqJJMZBx8XYkstmhpmXcy5OvuPAkAKDSCGG0nIDNPmLdTnmcneoR9pHyCr889UKtOzUwsuvOzDq3nSbqcecWXH1qPEreU4onjePrJTJRmRkZWUl2w0xLsMsMNJ+q2wy2lphtP8VDSEpHcNYIIII00Z0EEEEEEEEEEEEEfZYdzqZS6JNKykInWpmTWpW7MuMqeayB4677LadUbsl7sycx8bF8rMOSczLzTBG1lphmYZKhmkOsLQ4gqA1c0pU2jIg563m5iJXgbEKsKYvw1iVIUoUOu0qqOtotmel5OcaemmBm0tMS6XWDuOVw5SFWIwajKidkpqVNh5xLvNAngpaClCud0rKVAjiNd8RJ9KPDJ\\/BHlQtPOynWi1TsSLls3H62ny0WE1CTxLp07cVzzLIUCXmpW8a5VqO68lWoZymzJSM3FBHCRup5avR0VcK8BdOyyJF19yyac9gTjOmUbcddbwxv6tCoWHXppLebTUpYuLb4o9UXq5Ny+IMxUn3ESdEfUNJ+Z6T6zH2mxo5Lz87TK9JPtTkjXqFR52VnGPSYmUNSDEol5pQASRMMS8vOJAt+TmmlWAUI+XO0mkPUjFtSadbU0JhzzhtKh9VJJbU3e5uppTZaXc3zpNzrC8GYHE5Qhmek+sxTMDicoh0QOFipI5\\/Vvi0r6B6\\/HdCJUkc\\/q3xaXOgeuCPQkncDCpUTx9XNFhUBx9XPCZUTz+gePfFhIHE5QQsI5+z5n5e2LysndwB8bz+iLCQOMJlfMBl46OHviwnnJ9JghYAG6LlKJ6h0d\\/TFhIA9w6YtKxwHr6OzphKFpRxOndz+XxhKl8BqefW+KklR37vhFIItUrLt5h3w6BwHqgSnirf7fb9nVhSgn4CESc95\\/R9kVJJOZhq67n5qeHOenqHV7c+jLe8lNvHiYXFHXNbzU\\/V5z0\\/ZCMEBPEk9ZJ95hULSm+p3fH7ooTkCeiESScyf0DweMVUrPsHjOEVq5h6e70e\\/sh5KbDXeerQ4SALn7\\/Dx9kWqOZ6hwhFZ5ge32ERco5Dr5vHVCMOoTxPq+fXHwhCRc5j6uu74wRQnIE9EVhJZzOXMPfDsORYTxJ7THPWXcbtqXbQbiaUsCl1KXemAnIqdkVlTFQYHW\\/IPTDOe4\\/Sbo+dWr8H0n4eO6G7qtVO7idw+Psgdl25mWmJZ9OdmaZcYeQTotp5BQtJ7lJURbdu8IypGbmJCdlJ6UcLU1JTUvNyzo3tzEs6h5lwcQUOISoWIOkSaNDXERuqIvHDl2YS4uhtUe76Kc8w9Sa\\/5RJz7bWqANhJz9PYmVAgHXrB1SpPmtZ2RoA0FMTVyWNeEq35ghm57InMOaupawVlyVVUPmsO6x1XXZuqW\\/RFAlRcPlAXmXiUq3\\/wAfJ\\/bfhdWF8cTDGTIiflWpzRNkGYbcdp84QRoVOzUi5NLFybzIN8qkx9XcP1VmuUWl1hgWaqdOkp9sXvlROSzcylB\\/jNh3IobwUkHUEDuHCfEgWzOfMFbcC7XqrqkOCYAcbpsy8nZKmAlQVnJzA1W51kkJAymkoCkuh2OZytnJ\\/N6NV8DG7CWjhvAfEyqr8qplOZAkcMb2n9rNvUJtDRU1K2ncCW5iftNbeylac4mctksyrMlRVVLelHd1Epll6QGFt4aPGLNPRW7bui3pyjlhxaUTDtKcSlaFyEytt7ySu25NolqpQ6g2lT8i9Kysww2F05Kl9ueRdt0axVIseTltBn0gPF13ZBiOedKnKPWMvaLwZMTCwpRpVVyKVR2ibsTRXS2A8qZo7MlR+27ZrL12mvV6ntJRPS4Ls1kTb0khIE5ZIJsqwbngAQpsomikLYcWuBATkCfV2whGRelXo63forY53vgteIXMP23PbegV0MuMSl1WjUc5i27lkkkkJRUaeUonZdtx5FOq7FSpKnnHqe8uMdI6lnZOZp83MyM40pialH3ZeYZWLKbeZWULSeBsoEBQJSoekklJBPCjrTjDrjLyFNutLU24hQspC0EpUkjmCCOXKA7gT0Q3JzJPT4y9EKrOQy6fd4+MNnFaqCec7h6fszhtA0vz+H64bhs4rWUTzcB2D1w3WczlzDwezvhQnIE9Hv5oQh5A1vy0Hj18YIITWeA9MKQgo5kn1dkep9JRUR+vh7BC0C5vbQfGE1ndl0\\/DwIQWch27u+FFnNR6t3j0wgs5nLo9\\/j4xlJFgO\\/X2w7CSjkD17vX9kIKOQJ9XbCizmQOjf6T9nvhBZ4D0xkIFh46wQkTkCeiECeJPaYVWd2XT8PAhBZyB693j0QoC5A5m0OoFhfmberd8et0Ik5knpOcIE5knr9nNCyjkD7Obj4zhCMgDcB3AQuCCCKEgAk8ACT2RkboIaOnNZ6BuHo4+3OGLxzUB0D374dE8Sesn3wwUdZRPSYWga+A6+2HFEhIHdr6rQks8B6fHthus8B6e74wss5k9A4fH2w3V9Y+OG6MtIsB7YWkWA8I3b8gTUn5LTlrEo1NIZarOAl\\/U2abIaKpthm5cP6wmXaLiVOBSZmlsTetLFDwbll5r8n8oSqXDjU1q21TXE81cZQQrLiunz6gRuy4NqzyB4noiHFyGc5LMcoVY0vMO7N2oYf4nyUkjUcVt5lu1pioqZzShSWj5JITbus7qN5tBoK2rjSFzLMamEmz2Hcz9BWpJwJOWRJlp5jI8+Wq6vIjLeOiI3tyk1Tnk27UQhIUpvDdQmFemE2TJvys4vW99G2Sqx1VuF7gnpLYg+AumJUT6FddaToTo4xLm1huBU8dPFRteIg\\/yiKRbco+iXUi4sOytSxrkkIySG1tz8rhU84pe7XC0KpjQbAUBquuayT5oTHwsBZNCmEnLzKm+gAfWKTLyqwTvO8kqyO7cObIxI2+ULNsLwt0bn1NNl9m\\/75ZbfKEKebZmLdo63m0Oka6G31ysut5AUA8WGVr1lNp1Y3mHSwabPo50zyVZ83nsNpA7c0H1jjEG8ktwu+TTglBuPNZ7E7QBtoDjCtv6Wsct5ggXvrcjSwEY23ottCxAr9NNHXpfS1Gp7f8A+vvHGPvnjkg9ZA+PuEMlHJJ7MvXuh0+fqp7SfcPjDRfADr8e+L4TvHjFOxLL+S+VMlrTZo7sy0UoXo7VGTkFKbDqlOJxulalONIH07qEhqlMzCxrMsqXLA6i5hO0I69+TDzsojFXSyprjg8tm8P8Mp6Wl9VRLsrT7juiXnHwdXUAYeqck2oKUFHylJSFZOahHZWypwrwJRQVEltVSb33NhVZwpBvewCVAAcE2toBazcOHNSJYaeip9O8cZhxWvL6\\/s15xMSiJ18pOmplV7aJsiXnVScva2L00xLrWSwzMzdYsFuZfaQdyXX2pKUbeXv2iJVgf3oZyxYiU\\/KSpyWXiZoryCHkGaYsXE2bflwPPal5yv2qzKvngNR5yQnUIB35y7ueecYW2c22c17W13KSPH\\/4zTzbv3Xt3X4XhnFJtRZnW11y48f2Q2bd+6\\/qvwiNLB2QQRwwoXBEVRCjZ4j0\\/A+O2N63JFS7bVlYzzidbbTN02nKubyG9lJ0iqvM6qciQsqnnwtWscxqH8HztEyTkQY3u8kesIw\\/xhzz\\/wDHG3uHPnRZn4b4598pgq\\/E9iMAn0pugpUBxH05IKAPcFJSr1euLg2DgHadQrgEiXrBTfgTSJ1PwUR4ExJz0XmnP1PqqtSSgO3dUXG8wMnEJpFCaKkkcfObUjeD9TgIgu8v0ojlQccW1rKtS2MGwgHPJKVYSWe6AAfqjNZOQ4KOXEZxOz0YE7TDNS94zuKrDIjMZbKRIzG7f464ga8vZPOzfKo6Scq4hpKKRIYKU9lSCvN1t3AXDKrKW7rLVm4Hqo82NQ5bJtoFOtrKV1RsJlEymwDZWAFWewrSHAon86Zacmlp0P1UqWoJ0uAkXJNyJvtgcK6hUQfza8U2\\/tJeZQD42B9sYj4VhSLDoGYIJFSWAedK6vUFpPYpCgR0Ax2QDwI7Y67wyP8A3i2\\/1S0wP\\/66aPxjsFBBGXQcj6d\\/xiKVb0qjUFcfPpsn1zDn2\\/GOZpi5ff8A7q4fas\\/Pj8YdjeAemF0nMA+vthqg7suj3fp98LIO\\/Lp3jt8e6NUsXF+XX3+qGYdpOYHqMXQkg5HLp98KxjH0VX4Ho+\\/XSGVCx7juhRB5ujeOzx74dMqyVkeCvfzevhDIHIg9Hj2wuDwI7RHixY35wmORScjn6D2QvDRCtZIPPwPbDhBzGXRu9HN46oYWOPt+yCL4XBzAPr7YQi9ByOR4H3+PhzQ3BHItL1k9adx+B9PwhSGSFaqgebn7Ie8YZULHuO6GVCx7jugi5CihQPrHSItghlY4+35wpJuMp15eHL5fdHIA8CO0GF0nMZ+uGDK\\/wSf8XP3eD2Q5Scj1c8MqTcd43QgixtDtB5j6O7x18IUhuDzj0QslWsOscYZjyLwciD0QuN4B6YbxclWXZCFJvqN498IUm+o3j9eh+2HaVZ7jx98LIVluPDm6vshp2QslQV1EcR8R1QyRcWPGBKr6cR74dQQkleQ3ndzHo+zxw4KwyQQfgeceqSD48\\/nCzburuVmU83SPsjaByd9puauIF8lklx1yl2fS3koCvOSDWKyyDnkdoXbfXkOGrvzz3auY34aClnmiYUYdSzreo\\/cEzUbwqGaQEupnJt+ap7h1iSou0eSpKQr6qvNyzGUUh5QNa+iNnc6ylYS5VZyVkyL2V2DBXUpgi2uVSZFLC9CCHwg\\/XEXZ5PdENV2iS00tGZuiU+dqJzC6e3dCKbLpP8cKnlPt8lMZgfRjZZT5USUjJygyylpZlg9am0JQpWfSpQKj0kw8hDM9J9ZgzPSfWY+YSkqUpSlKupRKlHmSbk+0no6fRYCwAHAW9kLwQhmek+swZnpPrMJ7M8x10ejoQvBCGZ6T6zBmek+swdmeY66PR0IXghDM9J9ZgzPSfWYOzPMddHo6ELwQhmek+swZnpPrMHZnmOuj0dCOxLVm7Wr9DuPC3EakU+4bCvqk1O3a1SKywmapM5Tq7JPU2r0moy7uTS6RWZKZclZpJIQ2tzWUW0uuuJj96fvJ93HozXHP37hxTKpXsA6zMh6RnG1zVVn8OZl9YH3PXNMubaccpW1WW7fuSaU6maaU3TavNqrDbc1VN4GZ6T6zHb1nYly7NPete+ZBu4LXnZZynOommGp4pp77SmJiRnpOZS4xVKY4wotOyzyFrDKnG0mYZ1JZPfPk2+UNh5mhyOyXavPil0mUeUMF45eSXW8OmYUCqj1zKkvKoqnSRKTis6KelaZeaXLU+Xl5qn0Jte2SMYzll1CQSUVNoFwBtKS6XLJSpxlCikPBxKU+cyuZHbFCXmiJkWchU5k8ST6YpElnSI5IHCbFtM7fWi9eEhhvWZ0uzT1l1QzdUw6nJp1S3VJkHWS\\/cFjrW6v6SURKVulyzaGpSm0GlMpIjS\\/i9oE6WmCj80q7sG7qqdHllOKN02TKLve21y6Rn5W\\/P22J96kS6zuT8\\/ytKfJIDrLeYz7WqOBK\\/IyzNRlWWq7RZtpExI13D7qavSpyVdGZqZamZQuAMOJIKHXEoaXcFtawUk8LVvCOIKA861PU1\\/IypSVvstuONJymx7QBAcl1A3BRMtsrFt0YiFSRzj3+6KFY5hn7Io8y7LOvMPsrl5hhx1l5h1otOsutktOMvNugONONOJDbjTmakqJ3DLciVpHPn2eMoiCm1JNiDcEgggggjQg33G++9rWiNAjjpw1PcD9v2woVk9Q6B38Yt7YT2h5h8e6LCSc8yevo7oAg8dPj11aElY4a+6FSsDhvPjnhMqJ7OqLYIcCQN0eekruHx+fwggihIHGElKz3cB7+3uhYST4c+t8KCQO88\\/lyi9S8swOPu+3x1QkTlmSe0mLVKCBmfQOcmGq3CvdwHMO+HQkDx5wqLnHdbzU\\/V5z0\\/ZCMEEewtKSdTu+PXXMEJKVnuHDn6+zqgUvPcOHT0\\/ZCSlBPWTwHxPVDqU21O\\/gOX3w5oB3Dn7oopWWYHH3QiTkMzzRUniT2mEVKz7IdSkk93E9cYb1WeQH3X15xQnMk9MUgihOQzh7dDg7t3Dwi1astw4n2CEVHIZ+qKk5kk9vZ9kIKOZ6uaFJTc9w3\\/KPYoTxJ7SYYrUVqJ9Q6BCzy\\/wAEH\\/Gy93g9sN4eAubc4cSLAqPQ+\\/h98ZK6O1yOW1eFnV1tagu2L\\/tqtI1SMw3J1WnzikHjm255O+FJUChYWtCkrSogyy4h14cq86sI5tWQUN53HObByH7oEAkb8hkNbgJfdImXZylUybfIL0zT5KYeKU6qS7MS7TrpSjPzUlThyA3jszEfP7yvJBDdew3NoAC3U1dhZA1KQ3R5lsepczME96r8Y+j2wudXObMcMrWbqaYnZXUm4TJ1WflGhcjcGWWrAGw0SNxtzMO6VVJyj1KRqsg4Wp6QmWpqXXlmlLjeRKFjWSVtLHmOtghLjS1ocIQsmONzPSfWYMz0n1mOR5CbnKZOStRkJl6Un5GZl52Sm5ZxTMxKTcq6h+XmWHUWW28w8hLrTiClSHEJUkgjS2nWkPIU26lK23ELbcbUApK0LGVaFg6FKkkpUDoQSDppGPnLCaNdM0kdGCmaSlkUra4hYISEzVKsJVkGfqmGbzyjeVHmktJLj4sydQbskHZl0s06lSt2eTNF6r5mIjE\\/XAqsSVRTcOHVcZYqFHuOnzjiZCcSl6UnUPSxkqzT35dalImGZ6nKKnWSgoW1LvlaiFhMQn9MvASa0YtJfFzBgtzApVr3O+9aL8ztFvTtkV9lmv2fNLmXd01MC3qjT5WpPtqcbFWlqgzrbRl6Puxh\\/GrG2fZRgTbE0lhFYqcucL49Yl0pQ3L4yobSWH5gtp0ZTVpVtFRYaKiGJF+QbKlLUpR+eG2jB\\/4M4mecYQoSkysFtZBIU24kuSqyr85ZZSuXcV+c7KOKtdRjGNRzJPq8e2Gjys1ZDgn38\\/q4euF1q1Uk8\\/AdsMieJPaYYA3AeEU118OvbCazwHp8eOaE4qTmSYpDh9FNuJ3\\/AG\\/KCLVHIHr3ev7IQJyBPq7YUWczl0ePs9EN1nfl0cfHjjDjadwPietO4Q8kWHjrFh3ceaG5PEntMKrO7Lp936fdDdZAGXSch6N\\/wjJAuQOcKhMnMk9MN1HMkwqo5JPXu8eiECcgT0Q\\/uj0d3HS3z4Qks5qPVu8emEFnfl0fHwIV4QgTmczzwtA1vy+P6vjDw0AHIQk4eA9PwEJxUnMnrO73CKRkIFzfl8erx7BCTxyRl+MQPVv+AhWGjys15dAy9J3nx1Q7Cki5Hdr7IbOnJB6TuHphkTkCeiHD6t4T0DP0n7B7fU1WdwHT7h49kPNjdpvPu6vCjqu3AW9g1N\\/hCRPEnrJhuTxJ7TCqzuy6fHdCCjkD17vX9kZQ932e6HRqQOZEbXuRIeZb5R7BZp55ttyboWLTEuhRGbz6cKbwnC00MxrOCXln3tUE\\/RNOHfllE1zGpofcPMOE5hmpU5aQABxdLROZB3BLq88ufoziERyLIB5TDRqBOWf6sYHowAxVPPu4CJwGNqQmwp1RVwn6aOHTMp7eiG9p7KX\\/ACcdsalthYawXjApuSfSboXboJF7EpWoKG8EgXBvrf2xhZS\\/Tk334mZFwP0m6eCLnXUaWtb4xE\\/+UEqB0c8EcuP6tbm7\\/wDkW5\\/REYzDlZMtVEZDJL0urnzJUh0EE55fgDLIZ8YlFcv9T5Z7ROwpq6lL8rkNIi36c0AsBoy1Vw1xPmpnXQU5qcDtGlQ0rWSEJ2u5QcSURb8OFnZ1pIIyQZFYy3nNSZ0Hq\\/ATl6YpbyOFJX5ONKQAc0viDELa7i1lKrHbC3MZH0a8yRbSMbbugpx3U1G1nJGlLTbfYSrTZvyOZtXPS3O0dhuHNauo5erd74br49mQ+PxhXthuTmSek5x0QjefDr4RSMSaPkx+R0h9JbdwwYtzj+\\/eU74I+T+TMFStLrHhOsSlWjnOqI1lAEpxNw9CSoD8JIUoAg5DWUMt8Edh7JVXwPTABufqI3\\/\\/AFzx+0+zmYsjDP7lo1Gjz3vKT7r+4+ETZIiCfKRzljzo4kcRhJcR9V5PRL7iIF8pGbWMdNHBwoWlpeE9ztocyVqFbV4rU42le5KlNpeaK0j6m1bz+uIxNtP\\/AEd1n+70rhcaVWT3\\/DXiYRir9x3e56X\\/ANYOtdIjlgggEcCAR2RWEWVZpKTxSd3YeHx7NwhaOHIqoixI5QRvu5JhllGEeJswEp27uIzEu45v1nGZa2aQ4w2TvGq25NPlGXO8odMaEY3y8krOIcwtxTp4SQuVxAkZwrzzSpE7bkkwhsJ4hTZp6lLO4\\/Soz4Rz35TiVfijrZTfKmpUJS7G3oGqMJ1HFPaKRpwVlNtLi5tgRSNpdJzWJMlVwi4uc30c+dORyBWvK41vYyftFz+1gf3x1b\\/81IxAk5eL9tb0qf8AzHf+rfg\\/E9rRb\\/tYq\\/fJVv8A8zIRAh5eRZHKu6VXD\\/8Agd7dG\\/B8x1vsVWn\\/AN3\\/AGSC9yMJYfv4iQVcdfbEu2vfulVP\\/uBz\\/VTUYw4cJS3ZduoTmAqQ195z85x95xW\\/mBUpWQz3ApHZ94g5KHXu9f2x8Hh6SbKtwncfm5Hsccj7kHMDrG\\/3GIPUNZ6evrebmb8\\/25evjHND5BfePDtV\\/wD9j8fdDpJyIPr7IXByOfRDVJzAPRuPb9vGHCDmOzd3RrCN4PrhqHQOe8du7m7soXBzAPr7YaIPEenx454XQrI5cx98Yzid44jUdeHvhKhcd41HXWtoVhRB5ujeOzx74TioORzHNCB6SbcRb7vlDMPWVZKyPBXv5vXwh2DkQfX2RxoOYz6Yetr107+I3H4H0w34wQ8ghNB5vV3QpDBFjaCFknMdY4+PHPDtlf4B\\/wCLx385Hojj0nIj1QuDwIPWDCVC4tx3jr1x4oXFvZ4xyEEWIXrpz5+BEXwwRwI9RhnUHkRBDxteuN\\/1hx6+v0wziqVFJBHN7R0emGFCx7uEOGyxpvHR9XL9ccklWW48PdCwJBzENEqCxmPSOcGFkK5iew\\/CGlp4j1\\/P5w1DsEEZj9EVhAEg+8dMLAgjPm93bDcEKJVluPD3ePHWr2Q3i4KI6x0QhSL6jfx7\\/vhCk31Gh5dcYeJVrbuf39kKJVq7ub3dkNQc94hRK+Y+vvhojeD64EqvodD7Oj3fqjk5SWfnZmWk5VtT0zNzDUtLNp+s6++6lpltP7pbi0pHWRzxKEwEt5mhyUjSJcAydq2xR7fk9VASEtS0tLyUuQEgBIEtTlpA4aqjxAOccvAGhG48Z8N6XqqcR91VOqT6Bv2ktQlKrkyhQy+oqXpzqHMt+yKsiCARJuwjZWihTk2UpCpuorbSciCWZVloJJVmM\\/pXphOruKSnoV5nG3lYVYol6DSELt2crNTi0ggFRnZliWaURv8ARbkZsJNhotd+IHYPkt0sCXxNWlJv2s1I05pRGqRJsOzcwhKje4WqdlVKBvbs07t57bghHaL6E+s90G0X0J9Z7o4Zse72j5x2Bm7h\\/jJ+fj0dFoIR2i+hPrPdBtF9CfWe6Cx7vaPnBm7h\\/jJ+fj0dFoIR2i+hPrPdBtF9CfWe6Cx7vaPnBm7h\\/jJ+fj0dFoIR2i+hPrPdBtF9CfWe6Cx7vaPnBm7h\\/jJ+fj0dFoIR2i+hPrPdBtF9CfWe6Cx7vaPnBm7h\\/jJ+fj0dFoIR2i+hPrPdBtF9CfWe6Cx7vaPnBm7h\\/jJ+fj0dOSptVqlGmm5ykz83T5lIH08pMOMLUnMqKF6igl1oqAJbcDiFZDXR09u0THe66eEt1aVkK40lIBW80ZCdUUncfKJQeTEFOesVSa1rVkQrIEOdIbRfQn1nug2i+hPrPdFlYE2w7UNmTmfAmOK\\/hxkudsunyk921HeeJBLsxRJ0TVHmXNLBcxIuqAJF7FV9RUaJSKuLVKnSs0qwSHVoSl9KRb0UTDakPITodEOJG7QR31cN24E4jIyxOwYt261KbCHE3Fa1oXq2UltbOqV3DJNrcbDa1tZFkEtOLSGsiUK6nqWjhyddwuOO1LACw5FUw2825812jNW8hKX1uFezZtdco1LugOa7T0qltyWSGwy4ylplLfzu0X0J9Z7oNovoT6z3R0lTfL826yyEisyOzbFzoQhHnGIsFyoeVlPpFX0FO0Rq7mucJaSm59BKRpEEntkGCJ9ZW7IOpzG5Adl5ga23meYm1G1jYk33XJuYp\\/Yacmd\\/gXpX+fYnf\\/HoeSeiRya9N2\\/k+CFsvbfVKxOS18VRX0RcI2AqtSmhLqO1OuGlMpdzbDueyaDTTaL6E+s90G0X0J9Z7o2g\\/wDaC7VxqnZ3sOSbEBSMF1hKk3Frg\\/hcddBvBHMRrE7C8AJIKZFwEW1DNHBtYAgH6LuLgEb93ebj6aS0dOTtpjbol9HzD57aaqlpnrIXVVnUz1EsqqqprYE62\\/ZLaSvPNzMcHbOCnJ9y7zMwjRqw0Wtl1t0JewwtyYaK21haQ9LzDbsu+2VJyWy+26w6n6N1tTfH47aL6E+s90G0X0J9Z7oxnP8A2gG2NWXJhLY+wE3JDOC5myibanta+6QRbTKUjXUGwtko2LYFbACZJ0AWtb6PTl3E2ySSRvud1zpcx2a5hvoGIQpwaLuDDq0jMNowEwv11noTtKM0gKPMFuITvOZTDP7gNBP8k3CT8xOD\\/wD1SOvtovoT6z3QbRfQn1nujBmfL323vqSpql7MZMJTYolsESq0rN75lmcnppebh6K0pt+bvMZKNkGCUiypJ5e6xU7Lgj6ugyMIFtDvBPfy7KRhxoGOISteizgwwpWtm29gNhYpadUqA1i1SHmzrAFQ1VqyTlnkc8uDfwQ5PiZdemF6NGGaVzDrjqwzhfbks2FOr11JaYl22WGWtZWSGWG2mGmxs2m0t5AfI7RfQn1nug2i+hPrPdGQjy\\/dtSUIQvD2yd5SEpSXXMFELcUkAFxYbrDbYWsjMoNtoRmJyISmwCFbHMEL+tJvEXuElcooJ3aJzyqiLAWBJJ4k3OnOTujVyc1TW2\\/M6PdhsLQ0EluSs+YpaMt6vpWaY5KS7rmsrIuLS4rIHz9QZDgJvQy5MmqPvOTOClvsKmEFDnkj+JdNYb1WQ2NkxSaww3LqKUnNyVaQ6XlF0HbBTov2i+hPrPdBtF9CfWe6M5v\\/ANoNtbFu3wFsTmwCklMxgyrWJTe9+wxWwr0wSFWUD+iUxhubD8BufWk3r8TkpKjwsfTpq9QLgE3795j5KZ5ODkvquGVSdizdFDanELEpiLjGyX1L2QBeTcNyTq0IaIOzcYEu2ouOB1b5Q2Gfh6hyRXJ41dookb0xCoS1tPsh+QxOoiXErcT5kzlcdtVRgOy+4sBTZllnJDzLwzQO5dovoT6z3QbRfQn1nujcSn\\/tA8RBKU1PYhsYmiQA4qn0qr0vMPRCuzz1aoKaJANjnWQTe5I11cx5P2Bnr5G3G77v2PTtPq2\\/aJaXva3C1+7MYxbq3IaaL1UI+43SCxOkUrUyppVVn8PLpBQttSCCulUG2dcvTGo4y4nLUaSWS08tW2Z6luLkAp0suP2dpQSc0op1paTuLCpyUaUoMqyK6vSr\\/qCih2ZS2jzaONgw7rfrl1gtO5\\/bRfQn1nuhzLT89JKUqTm5qUWsAqXKvPMKOSSlJUtot55ayzmQfrkDKJPJeXtgaYLbdf8AJxp2Te9M0HaLVZBaFAH0m5RVCWFpJ0DTk6hCb5ypSkpSdBNeTXhl0KUxOhtV7pSZaYTa+UD0mKmhI3b+xN+CdTGnS6+Qm0rKTtHbXv3BO7pdBybl1V27aBV3lALUjVlJ+z36WgKSloErrvmvO5ZbFsvRjFePJN6e1o7V9zA565JFpWombs+8bFuBTh2rjadnSpe40XAQoNof2qqOhptt1naqae2rLUkuSv8Avenq1pW668kEZBC6nNTLYG4EiWmlvMhW4cG9YIJGeRUT9bI444jSQG0q8vUGxkA3PU2QXuGtnmuVZlHzr62RC3ipOp5moc8prTfLD8mWqlLdYwVtZwk66rV2kzWHsQSMvYCwWueqEvOqQq2UhuSdczFPpBN1Jis95MSrKMjVGTYWSDMutEk2scjsjMpNt1u3Rccb2iGTfejtj9hqHjiFglixZTLKdo5N3Nh9ddHkS1r7IOt1CdpTMm8xtU7PbsvrYLoLW0JjpZxeoN31jw6uv0RPTp+khX2UoFWt2lThSfrSU3N05at3\\/wBn+c06xy\\/BSkFRy1ABu+Ou+S0S8YxMIxa0f7FuGbmwS9Va7YFp1yfbcOWs6xX25Vu4ZR88PKJJbD6m9dvajPUXZFG2r+TDirs0UXbhL0Gccy2kMc4arFDS2XD6CXq06y1Rk5QCHFtzDqQbKUUJUkmB1Pyd8XyWZcskzSEn0Q2lh\\/NYA\\/8AV5lb+twADKC+trnSIKMES+725J7k5cWQV2a9c2E1UmUubJNlX1PMIenFawbLlCxNl7qZLKVgByVozdNbcYRlLOMLWH4wHxe5ArFejtTVTwPxos6\\/pUJXMS9BvmlT1jVpTef0UnJ1amO3VRKnNLTwmpxNsyi9\\/wCxDLO1JLZ\\/UK1JGqYOrOFsfUsBKvpDBmIqbWpcNrTnQfyTyFLUpNlZGQ6TmGXMAoitKvs\\/xXSFlubpjoKb3SlK0OG2+zEyiXmFa6WS0dd+ljGkjDgedWF8wEgnPeRmVTZOfQU5DMcSCOqJfNHl3JWkUyVeTqvy9Pkpd5IUFBLsvLNNOBK05oUAtB1VJ3Ky9MRw6Boj42YJ4xWJhNjVYU\\/ZdwXheVBRIomJmn1Wl1WguVaTkpuq0uuUGcqNKqMpKpMy9Nok512ZkUJHlMu06622ZJO0X0J9Z7o+ZHliKdlsT0KjzUu7KT0j9KuTUrMtrYmGM7VIl2gtl0IcRnVKvmyk6gAi4sT3XsRp71N2a4al5hC2ni1PTDjbici0Gaq0\\/NISpKyChSWnkJUkgKBFlAEkBaCEdovoT6z3RRSyhK1rWEoSCoqUUBKEJGZWsngE5ZE8MzzcI43ynhr4G9+7S+vyPKLbzd3sIPLTTjv8bez6G16y5btx0attKOdOn5eYdCciXJZK9Sba3HM7aUU+0TrJIC88juA1RfKCcHGJS68CNIGlyrezuSh1jC65ZploNpcnKFMG6LQmH3EnUmJidka1dDCXXMn0SdFlGtZ5lplErkvinpiYKYWIflX7gVd1ea2jYoVmoYq60vhsqSmcqxdaokmELybmkKqLk9LnW1ac8pKmzgtp7cpjoy6Veh+3gVXqsLA0jbSvSw7os2wKlPN3K5d66I1ULbqk1S6tRZMLpE7L2hcFbrU6xddOt2VdaZdk6JUa1OK2B+o3kKztXk8FbXsEYik5yQpNalaTjDCLk8w6w09WqI3MJrIlEODMV1CmsUxKH+zQy83JqZDy3Fttxzr5Q1DE\\/hpuqNhHaSKHEvrLjaVhKXGpiXsFKSpVimabyoCiBMXA0JjQk8rNWQ4J9\\/P6uHrhqtX4PpPw8d8Xk5AnohEnM5nnjpRAub8B8evsjhOKRQnIE+rtisJLOZy5h7\\/Hxj36yu4de\\/v4eFoUkXPcNT8vXFhOWZ6N\\/phuTxJ7TCizwHp8eOaEVnIdu7vjJQLC\\/P4dfZD0JKOZJ9XZCCjmezd9sKqOQz9A7fs4w3UcgT6u2H0DefV17oISWczlzDwYRWeA9Pj2wpwhAnMk9MOQtAub20Hsv1r4wms7sunx3Qgo5A9e71\\/ZCijmezdCCzmcuj3+PjDyRYeOph3rr74sgggjIQLDx1gihIAJPAAk9kMCcySefMn3mHTysk6vOSPUN\\/vyhi6rVSek7h8YUNSBzhxNgCo+HXr+ENVHWUT0n2c3shus5nqG4fH0wqTkM+iECcsz0b\\/TGW2La8hYddb4EDefV8DCKzmeyEFneB0e\\/wDRl64VJ4k9phuTxPaYd9W\\/TrrjD6BrfkPf1eNovItKH\\/dNdGdPQMZSe06P+KvDsA9vDdnE4vG1KTh3VlZAak3SlI38FGoyyCcufzXFHxnEG\\/kVVa3Kb6NSuvGTL0aP+KuXsAicZjg4E4eVJGrmHZ2lt555Efr9lzjkedsJzzSRrHsjK2hFtPk47aQ4pIBwRjnQjN6asKkNW039rksSLJJBO68XvsbuZmmW3\\/hRLf4oTTr6btANd+njEVrl9v7jrDf\\/ACl7N\\/mtxliK9hyck1oc5NN9Q8vJ9uUSn+X2\\/uPMN\\/8AKVs3+a7GaIr2HX\\/74\\/8Awf8A\\/p0UJ5Ggt5O0uOWJq9\\/vCVhzb4k\\/hvNq0t9F0nx+paOylHIHr3ev7IbqO49mXwhZZ4D0+PHPDdZ4D0+PbHR6BYeOvwiiYkg\\/Jlv7rvHb\\/Jwnv5zsO4Ip8mWP\\/wC15jsOf+xvnj\\/\\/AHOw7gjsDZJ\\/SPTf74qH+2PRY+GP3LT\\/AHd74pibJESv5SqrLEPROHMqzcVR6RW7Ky95iWpETv5S5SnGLm0P64XkFqoUPG+lIYCFBbLlIqGFk448VHzCl5NeZQgAkgy7mYAKQWdsqSrZ1Xt9gukk24D6Zp4v7SB649xQD9CzRHBUuT3AzDQ+JA9cRhm1aqweY7j2H7coexxqTrJB45j9MP21ayAecbj2\\/bxPbHC8VUsblDjv+yL43pckrvw\\/xdPTeFB\\/0NMRotjd9yR844u08apApSGpa4LNnEKTntFLnaZXWnEqyOrqJTINFPm6wU6rhuihfKXbK9j+IyNzc3QVKPca7T0DxOZSRbvJi3tgygnafQQfzmKykaX1+h55XwSYlOaK7qDhi6EqCi3c9WS4EqCihXktNc1VD8E6ikLyOXmrB5wYggcvxJy0pyp+kNMM64cqlFwVnpsqVrAvt4I4e01Jb46ifJadKgp\\/3wLP4UTrtE3+11W94\\/8AHWo8SBl\\/uFbe7ed\\/T6Yg0fKDKdMSXKgYwTL2psqxZWDlRk9RRUoS7WGtu0lW2SUpKXPK6XNZJzUNiWFa3nBKen9gkz51sC2XFQSkt4XpjISDcgSodlQo7tVpbBULfnEa2vE32woCajUrG967nPMdpLTC\\/YCq3fGFuG7odsi3VDMBMkpG\\/cTsph9onsKkEjqKTH3aDxHT493ujrzDQ5WRbx\\/+dpj\\/APzZqOwAeBHaIi1RAFQnwNwnZoDwD645lmBZ53kXF9\\/5xvv+7lDpByO\\/gd3p5vHXzQ4Scj1cDDRJChmIXQSob+I49\\/YfR2Rr1jj7euuEMw6B4EdohcHMZ9O+GqDmMuce7x8IWQcjlzH3wwsXF+XRgh2k5jP0Hti6EUqyPUeMLRjH0VX4Ho+\\/WGVixvwPRi9CuY8\\/Dq\\/T7+2HCFaigebgez7IaQsk5j2GPFj84bjv+fr63wmOSB4EdRHvhdJzA9UMGV\\/gH0HP2d2UOkq1T1c\\/f6IaUm47xughaL0K5jz8Or9Pv7YsghmCHaFlBz5ucdIh4CCARwMcalWe7nHthw05qnInzT7D09nTCFJvqN43jroj1Qhab6jfx74dwQcYIZIBFvfyhsGxvF6FlBzG\\/PiOno9UPAQoAg5gwwi9Cyg9XOPHPDJBBsYcIChcb+tD39bo5JKs9x483X29cKAkH3jphqFAgKB3dPR3ZQqlXMePMent8fa0pHEez5de7c1DsEEZiKwgCQcxCwUD29ENwRcFEcPVCwUDw9UIQZkcDlCVJB7j1vhJSD3H9Xhe0ZlaEVJVUcZzUijXTbtqVyppWsKyQ9NrkaI2lJBCdopqrP5Be4tJd4kRI1w9ljK2fRUFOSn5Z2bUd+8zUw9NIUcwP7062lIHABP1t6o0JaA9P1Z3EmuuN5hmVtujy68\\/reVvVWcnEhRVrILfkciSC0Q7rjJwFsxIJpLK5Kl02T3p8kp8nK5HPd5PLttZZKCVbij8JIMfOzypagZjGypS4KZNiQlk2PBuRTOqSADuSuqKJHBV9b3j6AeTnTvNdnknMBOU1Gdqc8rhmPnZp6SeOqKakgnemx3ERysEI66\\/xlfxj3wa6\\/xlfxj3xy5p3+z7\\/Ho6X92Z5jro9HRaCEddf4yv4x74Ndf4yv4x74NO\\/wBn3+PR0OzPMddHo6LQQjrr\\/GV\\/GPfBrr\\/GV\\/GPfBp3+z7\\/AB6Oh2Z5jro9HRaCEddf4yv4x74Ndf4yv4x74NO\\/2ff49HQ7M8x10ejotBCOuv8AGV\\/GPfBrr\\/GV\\/GPfBp3+z7\\/Ho6HZnmOuj0dFoIR11\\/jK\\/jHvg11\\/jK\\/jHvg07\\/Z9\\/j0dDszzHXR6Oi0EI66\\/xlfxj3wa6\\/xlfxj3wad\\/s+\\/x6Oh2Z5jro9HRaCEddf4yv4x74Ndf4yv4x74NO\\/2ff49HQ7M8x10ejotBCOuv8ZX8Y98Guv8AGV\\/GPfBp3+z7\\/Ho6HZnmOuj0dFoIR11\\/jK\\/jHvg11\\/jK\\/jHvg07\\/AGff49HQ7M8x10ejotBCOuv8ZX8Y98Guv8ZX8Y98Gnf7Pv8AHo6HZnmOuj0dFoIR11\\/jK\\/jHvg11\\/jK\\/jHvg07\\/Z9\\/j0dDszzHXR6Oi0EI66\\/wAZX8Y98Guv8ZX8Y98Gnf7Pv8ejodmeY66PR0WghHXX+Mr+Me+DXX+Mr+Me+DTv9n3+PR0OzPMddHo6LQQjrr\\/GV\\/GPfBrr\\/GV\\/GPfBp3+z7\\/Ho6HZnmOuj0dFoIR11\\/jK\\/jHvg11\\/jK\\/jHvg07\\/Z9\\/j0dDszzHXR6Oi0EI66\\/xlfxj3wa6\\/wAZX8Y98Gnf7Pv8ejodmeY66PR0Wj6Ki3bc9tqQaLXalINtqK0y7Ey4ZJZUStW0kndpJOZlRWA6w4kHNROeZj5fXX+Mr+Me+DXX+Mr+Me+NtRq7WcOz7VUoFXqlDqbFixUaPPzVMn2CFJXdmcknmJhshSUqBQ4n0kJVvAKWnpViZbUzMsMTLK\\/rNPtIdbV4ocSpBFiRqndyvH0mI9alcWRY07fNBptRuLDa4J64LRuRlpUrPScxVaDUbfq0rMsJ2krMSs7KzzU0W2USqW6hSaTOpQp2TaKuCSNcHI5DtyOfo5x8eeENdf4yv4x74qlxaTmFHPr3+\\/fG8xttAxjtHqkrW8cYgn8SVmUpsrSG6pU1NOz65CTU6uXbmppDSH555tT7oM5OuTE44gobcmFttNIbYkaZJ01jzany7crL9ot4MtFQaQ45YuFpBulpKlDN2beVsKJUlIKlRjXj\\/pGUrBAGXnpWmMLTQ2q9NV+46tLUa2qPJPzk9TWnahMOus65RMSLgdSuYp7QQtlKJrXWoJjkaZnLAWZU3FW\\/bN6VnFV2WE41N0Gynnbfw78pC0Jbana4prYVthIQ6qXnpCUuppSXFak4EKjepymfJwW1yjuAlNptrViXs\\/SBwtZnJzDav1Gbm5O2qwuaUhc5aV8syUrPOzNv1ZLIXSayzIzVTtSsKXNyaXpGdrtMrMO9egQrB+8K5Z2Nyao9e1pVN6l161UtvUemSU5LKSdVb6Fmo1OTmWFNTUhPyz8jKT9PmWZuXbmJZ5h5f0Y8mnYpsRVhai45xFWXsQVxxhMwuiyMoGkodUmygJtT0y6pLRUuXdVKv0VcvNsusOlS0XcoHartVxJhGYVISlNap0s4eyYqziFTzz7qUhSktNLQ3JyrqU3IRNCZDrQDrarEpR0hfmlvpHY6zzlCtl2dt6mPbUIt7DuUnmZpUq6Q2VVOuIVMVhaNnrIfUicp1Nd13FOSjeWqORwh0bb5pN00S97sqsnRX6XUm6p81tuGsVaec85UwzPTbLyZKWMyl1aHH25upOqK3AthBKVHNmkW\\/QrZkkUu3aRTaLIoAPk1NlGJRtShmNd3ZJSXnlaxLj7ynHnFFS1rJJUp+o5D2COxnMXStPkHaNhGgUzDlLebUw72Mu05NzKFpLa1PulASta0KUFLeEy8L3ExfWORa9jWtYgeW9PTcxNOLCkl2ceVMuBCwAUNJUexYbI07JpsJSLBJFosWrmHNx6\\/0e\\/siyCCIWTlASN56v4n3eyIfFqjkOvm8dUIE5Ano3xepWZ6hwhBauYc3Hr\\/AEe\\/shxtO4es\\/KHkiw7zv+UWE8Se0wgo6xz9Q6oUWchlzn3ePjCCyUjdxPDv7B6eyMgC9gIVCazmd3AbvTz+OrnhBZ4Do8e73woo5An1dsIE8Se0w+BYAcoPffd7v1RYs7sun3ePjCCjqjrPDv8ARF5OZJ6YRWczl0ePs9ELSLnw1h5IsAOO8+74aCEycgT0Qh1+nfz98KLO\\/Idp9\\/s4\\/ohOH0i5A9vhCoIIITdVqoPSdw9P2Q\\/Bvhs4rWWSOA3DsHfxhi8rNWXMnd6TxhypWqkq6B7eb2wxJ4k9pMLQNb8vj+qHFaBKR1w9+sWLO7Lp4+PHCG6zuy6fhlChOZJhuo5kn0DsjLSLC3rPjCwLADlFizuPSfB8dcNXTkg9J3D08f0c8LLOZy6N3p5\\/HVDN5WashwHv54cSLqHIWPw+33Q79VHer7fu98bTuRQYed5TDRxcbaccblGcY35lSEkpYZVgNidKh10jclCpmZl2M1f3x5pGZ1om\\/Y7qBw8nss91SpXAf\\/PIyyHblxy6IhOchzmeUhwc3KIRbOLRWQCdUHDC6U6yuhIJSO0gc+6azj28pFgOpRq6r1XpragrPPUBfd3AqTv1mkZnzt3AZ5Qjai6iX8nPa8FGwewZi0Wtc5nqL5ugC1tCoJJPeTF97F0Xmaad5GJWlcALJbp6jr4C\\/uiKZy\\/VWfa0X8IqKEtmXnceqbUnHTrB1DtIw8v6UYbQcwgNuorcwp4KSpZW21qqSAsLi+4dEH54yIP\\/AMj+H\\/39EmL5QFPyyMBsDKY4sibmsX6jPMt6jmqqWkLNqsvNLLhzQNR2pyqQlStZwrUpG9C8ozGHJyFa6\\/m4evy\\/4RTnkfMhvycqOoIKPOK3iB0qIP5QivKZz677BkN3FhdsjeDGPt2dKsdVRJVcNyVJbCRb0P2JLuEbt5LhVY6jMDuIjssnMk9fs5obqOZJhZRyB6eHRv8Ashso6qSege3m9sdCAbgO4RSA1IHOJJvyZOQfd0q9IOrJLfkslo\\/IpzoUVbXyip4jWfMy+ohKTrNhukzW0VrAJUWQAdfzCOd+TDtPnH\\/SamENOlhrB612HZhKCWG3n71acZaddyUhLzyJeYW0hR13US76h+xLgjsDZQAMEUw2Or9RPE\\/9ffHxSPYe+LLw0CKYi3F506219JIvr3pHrB74mgRFp+Uv07aUbQ3qu2CTJVPHumiX2ee1+dZXB+ZLxdCwG9h80BvZbFzaeU620bDIDspaIy\\/ylOnIXhJovVkyzi3ZHEe\\/aamcBdLMuiq2xRpp2WcUk7DaziqQy4yHk7Yok3djm35QYd2rtJe2fYkQoXAl5NwC5HpM1OSeSbgjUKbBG8G1iCkkExKCaLOgb\\/2OfZNsHv4CIj7CuKT2j4+M4esq1VZcyvfzevh6uiOLSdUgjmh8CFAEHjwPOPtjg1Ysb8+vv9cVQnUFJ3jdfh9un3RyMbnuSNnHfI8fJHJAaYmMMplKgk66nJtm\\/WXULzUU7NCJJrZ5JQQpSw4peaCjS82vXTnz8D2jjG3nklZ4M3PjVTi8sGaoFmTolQpzUeEhUK+yZhaB9HrS3ziGUKUddCZpep5q1g0l5RDPb7HcYpAClIRRHk3BNuxxJR3FHT\\/s0rFzoL3Ogi0tiLoZ2oYXKty3KqyRcC5eodTaSNf46k2A1JAA1tEsDRGfSuyrkRrAuIuhRUkHglykU9KFHdlkpba+wt8OGUKz5RpSnKdyklanFPNuIr2C+FVWaSkKSWGmZasUItO55hS1PUZ1\\/WT5uzfSk+elcTPdEB8roN5saoAarFNeCtbPPbyb6dTLVBBQJbPW1vO1j2mIV8pso7FN0+MNKjKybrQr+itYk5OzajMqZnanJYoYy0tZbW6tbKHZalSVHaelpUNobTsH3mttNKffvLybJkP7A9nISU2RSZlkgXuPN6xUWbekb6Fogm1iRp6JBNnbZWj9I1Ym90VOTc1OpDkmkaAaE3dNr2043jVFhSsqsGg5kkgVNOZOZyFYqASM95yCQEgcwGr0x2Mg83RwjqrCB1JsinpBObU1Um1g7gFGcddyHAnzFpOsOnVy5z2kDkcxzQzWU5KtUhwM9NKGlvrPLV9undY8Y5fmUntnwRY9qs\\/+Yn4aX+Ih0g5HLmPvhZKsiOgnI+33GGoOYzHPC6VZjrHGNaRfQxh+3Tf3cPuh2DkQeiFxv4c8NEHPd0cOz7IWQrmPPw6v0+\\/thgixI5QQ7Scx1jj3wuhWYy5x7oZpORz9cLg5bxGOtHDgd3d18OMeEXFocRUEg+8dMWg5jPwIrDST+Yr3\\/D7QfZwhgi2hhwDwI7Qesd0PG16435aw4j4+mOOQrLceHuPd46YXSooOY9PWOiEKFj3cIOvCORQcvN5ubu8fGFR7\\/G+GqSFAKHD2j7YXQrPcePvHf46YaWniPX8\\/n1Yi8HLeIWScx7\\/HRCMKtNuPOttMIcdddcS0000kuOPOuKCW2220gqcccPmoSj65y4ZCEAFRAAJJNgBqSTwtxMEOmnMvNUd3MTzdXZDmMi8PNDHSwxWbYesTR5xZrMlMqDbFYds2r0S3nVq1VajdyXBL0qhqKUrStwfOI2TbrRczDqIzdsXkUdOG6gybio2G+Gjaxmo3pf8AKVF5DYSlWWxw\\/kr4CnVZ6jbanWwHEnbOstfSxuJfCuI54BcpRKm6g69r5m82wRcJ0fdShq+Y2Izk7ydxtnMUWqzllSlOnX0qt6aJZ0t62se0yBsAg3upYBGsal4IkOWlyAtxrS0\\/iBpJ0OlqQkKmZGzsPJ6uJWrUO0bbrFaue3tkhpwtqS6uhPF5tA1mZdR+iyBofIpaHVsBpy+MX8Urim0LyWybpsa1qY8EKbJT5A1a87VwvNC0kt1oENOK8wOtpdjJnsF1amMGZrbtJoUukgF+rVeQlWkhQTZanA+4kI9ICxIXpqgHLeRSGzzFs8pIZphTmvYLeZUo25tsreeSe5TYPiDEWVCyg9IPEeOeHaVBQzHq5x2xLvpHJ0cmraDTW2w++6mcQR+va3e+JlaW4EoAUlyTpNdk6GStaS5rLp6DtF\\/ROIZySO16TgZoJ2eEfMOjdhbOOtOJW0\\/OYY23XZ1taH3Xg6zPXZLzM42tK3CpLiXkObPYtZlDLTTNe1XFWzKhh5NV2s7O232bFctJ4kp9RmADbQy8s8qYC9bhHYkkC4JBiaSWwnG87kUuWQwlf5wl6gvfpqXJNho24kPWA56RC+SvLcfX48fD7Wh4eYgXKGzbVi3ncAd2WxNEtit1baCYb2jGz8hkpjaB1sFxnUz2je9rhumq0u5sKLWQ2LMwqt6gFks7EUi3rbt9LWxQtLWy+apMlvYhRQ3s\\/wBibccyz\\/Y45GYxmmHUlLNvstAEEbWouPZZJPHUkmM9+fOMk7gRlFeVLbxsMpi1I\\/GE3PrCbpTT6DX3gpaR9UPM02ZlxqQPScTmBuLakSqS8mrEbwSqZqBZBPpJTKSosOYU7VEL1\\/uJt7oh80PRB0qbhDS6do6YzFp7YbKansObppEm8iZCti6zO1emyMq4yrUzW+h4tM\\/RKdWgOtZ9uUTk29NeuhLkvgfU5Bg7Mrert0WHQi0h0qGuuVq10Ss8rU1SXG2pRyYbAz2Q105yjnsWLgdBS3I0hpO472ZxxYyG86xnEpyJ\\/c7uBJG+OFmMQ7nfBSJqXZSSAQzJyxzy\\/wDtzbx3+zcIryp+VPsxls4p6cRVJQBKCxSm2wV3NiUzs5InLuuFKSdVaAkCJXJeTAxdJnatOkEgrDb8oyeF7ESU7bjpryCtxjT1o8aLGK+jtQ26RitbsrSalel4Sy5T5uqUjW5QSqJenSbUpNT9Nfm5JE9tVTizJp1lKYKHUrmApxDO1WHlVrFRrsumVqrwn5dL8rNIZeZYKETMm8mZlH0JQ2jUel3m0OtrTqqSoZkfVjjtc9A9vfHE21bGMhjzE71cpjM+yxMlTzjVQbl2nm3nG2GlIQmWmZpBZS3LtltSnM4T6Cgoozr6UwZhlnCNBkqFLr7SXkGgywsuFxxaO0cdK3V9kyCtTjy1HK2lOugF7BWCEtc9A9vfBrnoHt74rHs18j117j3XlcKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkKwQlrnoHt74Nc9A9vfB2a+R669x7rkclTKjM0qdanZVWTjavOQpRCHm1EFxl0J+shYTw5j54yWAqMJOUx0LpPSQwoTj1hZSEvYw4d0eYXVqXIMJXPX5Z1PcdmZ6ivNNALm7mtltb9Rt7V15qpyRm6Kw3OLmqKiXzJ1z0D298fd2HdBoNTEvNLIplQWhqY11ZNyzxISzOZfghJyameGcuoE7RTTYjpLyc9qpwHitukVp4owxiBQk3lurIbpNQmFsCXqAuClEs6401LT5JQhtotTalASmVyAbRMGyeMKBNyTzQW6lvOhSUgu3bCihbRIP7IYUe1ZOuchTCgpDyhEFEniSesmECST7h0Rtx5WfQ5Ro\\/4tMYtWJSjKYSYy1CemyxKtKEhaOIv0s9XLeQlDZYk6dXWQ7cVtsbQeam4KZJSzEjQWDGo2PqTlCAFHUKSlaTwKVgKTbhcgi+uhuL6Ex82qzSZqh1Obpc4mz8o6WyoAhDqCApt5u+pbebUlxBOuVVlAKBAIsWrIZc590XE5DPwYQJz3mEpBJzH1dd3R0jXITfU8N3efui1RyHsEIndx5oqo5nP1QitXMObj1\\/o9\\/ZGUkWHeerQ7FpOZJ6YQUcz1Dh3+OqL1nLd08ez7YQUrIdZ4Q8hPE+r59fbBFizmcuYe+EFnm6eMXk5DM80Ik5nM88OQtAub8B8etfuixSshu48B8TCBOQJ6N8XqVmd3AeM4QWrmHp7ej0eOEPJFh3nU9da3h3rq8WHeSemCCCH0Cwvz+HX2QQQ0eVrKyHBO7088OHF6iSefgO08IYk5AqPWT1wuFoGt+A+P6obvq3hI7T283shqs5DLp3ejn8dcKElRJPEnOG6jmSfQOyMltO7u1Pj17hAn0lX5a\\/LruixR1R1nh3+iECcgTCizmcujx9nohBZ4Do3+mH4eSLkD2+EJKOqkk8w\\/R6zDAniT1k++HD6uCR2n4eM4aLOQy6fd4+MPNp3d593VzC1ekoJ5dH2Rud5BOUmZrlB7emGGS41T8LMTZydUFIHk8q5TpGQS6dYgkGbnpVgBvWXm8DkEhRExzSFmFNWPIoQAoTFyyDK8wcggU+qzA1d4yIWyjmPmbhnnkYjvyeWlIqGnNeM4XlNGhaOF+VZCAgL8oU9feFdCLRVrp2QSmsmZ1xr+cwGtX6TWTLP0jnAi1qEypRBXX0LCd+8NU6dSVEjdmkujLn85WecRrbrNmV8nDaaUqyZ6BNy5sqyimbm5KUUgai4Wl4tkW9JJKQdY6K2Ks3mqSd+esvOgGxA7NhvcBu1ZvruIvuiJF8oKqLKMO9GymlDnlE3euIM+2tISWUs02h25LPIcVtAvaKcqkuWgG1DVQ9rrQUoS5HKw7A2NVOW8uSgJy35BMwQD1ZqPr7IkC\\/KFKjqymiZS0LaKHpjG6ovtbvKG1SzeE0vKLyCjqNO+VziAVI+kWxmlX0S84\\/2Hgyk6krLLOYZSVEbiA0o5Z8N2sT1Z58YiPkoMdh5NWC1ZSnzmYxM9bNe4TjOtMjSwsLMWGpuAFcYj225WbH2IhvyJo6Ab8PoemLO7fYm1juOnCPv1ngOjf6fHvho+rcE9O89g4evf6ocE5knp8D1QwWrWUT15DsHCLwQLm\\/L4xTqBc34Ae\\/q9olW\\/Jd6dNvXxpjVNDC1SMnamC0hMTIUkJZm6lV8SZiSlyNdKyqYZpc+sFKSgeSq1yCWtYj7z5LfTi3R9Nurh4LE7VNHmm+T7MDZfNUrjVMl7bKcIWX\\/njZloNoLXkwVtHdsUskdjbL2i3geiZx6SxPuWOU2C6nOlNrbgUZTbeL2IBFhZmH9KTLEE+kp8nhqJh1P\\/6xLNiPF8pApIf0QMGq5tlpVTtJOh0lMvs8w6ms4YYozZeU5rgoVL\\/MKGw2EK2gmSSpGyyVIdjRz8oLpLlR5P8AXOJLpFAxsw2qzuyZU6jUflLooQ8oWCEy7JerLR2yxq7ctMf3\\/MZm0RjzjA+J272tSJl7cT\\/QwExbQjf2VuNr3sbZS5XBmpM+LX\\/IE77fVUlV\\/Va9uNuUQckHdkeI932cDDthXFJ7R8fGcMAcjn4MOEnIhQ7RHAbieVtd3cR174qBXoqChuO\\/7fb8bxyjKtVWXMr383r4erojalyUlQLeMGI9M128pvDQzxQR9Mr5tuihMa6MlD6JHzoUu5jctxnnzz1TJIUARwPs6j1gxsf5L+qiT0j56WLqW1VnDO6KZqFC1l4tVW2qyUJWMwz5tJ2u1OokJaWjW2ikINTbapbzrZVjhqxOWiOzFrE28zfYmySLE+iGSe4jeN8WDsqfTLbRsIOk5QurtM375ltyXG8j6xeAsNTe2pNol6aHE0NriDLFSiC3bD6Uk5NJKFXA24cickqcLjWeSTrJRvB1G8ou3yomjlnSd0bbh1ZnKqYDVSjaykAShNCxCr8+Uy7oQAuZSLkT5W3tFbJpUkSlG11nJM2h\\/MAXRd0nmQX6DKTIGsCnKVqSWiVJ4lZ8rySrV8zzt+axEf8A+VQW6luo6E92MiZUqakcfrcniVteSMJp7+EFTpQaa1A+JmZNSrG2dLrzGylJZKUMKClTEv8AJLnA\\/sKwgwCFGUmMSyxJvmSTieqzYBBF9G3xa17JItpoLy20sET9Xc3AfRT\\/ACB\\/ISkv6vS0PffTUWjoYLvbSzSnNJDNXnmxluIzblXslc+ebxy4eaU9ZV28g5jLnHujozA18fc5VGd30dbcdOROsNvISSQT0DNg6u7eQvfxju8HIg9ES6vt5avUE8TMKWP\\/AOQJX78326mOUJoWmHe9ZPtsft3+uHSDkcun3\\/bCyTkc\\/QeyGw38OeFknMdfPGijDWPzvbv6HLhwh0Dzg7+I8dBhcEEZj9HVDRB5vV3QslWR38D7IQtNxcbx74bh4lWY6xxhVCuY+ju8c\\/bDUEg5+CPAhYHMZ9MMkXFuhBDtKtU9R4wtDVKsxv4jx47OuFkK5j6Ixlp3\\/pDlx64ceEIUm+o3\\/Hr7oUhVCsxkePMero6z3QlG\\/HkirJ0Vqla1XvfGHA23cTrxpV9zNDl63cyJm4WKHJmnUKoUx9iy61OuWXOtB6bmFpn5ilJrkrMSbymZtxotNRr56t4coqZSZxVXJfDdHfnpeQfrc5LzcxJSDk0FhhycEky860w66hLBfUhLDTjraph1hnO8je4XwxUsW1QUilBpU4Zd6aS24vKpxuXCVPJZFj2jwbUXEtXSVpQoA5rA6msFNFjSM0hZpuXwXwbvm\\/WFuhhyt0ujOytqyjwd2BbqF41Y0+1KY5tNZITUKzKn6N4nMMOlG3fBnkCdIC6RJVLGrFCxcJqe8EOzNGt1ibxHu6XAzU5JTaJeYt+05Z9wgMtzchdFel2NpttjNbIS7sgiq6Ri5KUapViWvIUSmybLcpImdQ2RKyzadm0zKUim+TSMkhhtIDbIfnJdtAAS2E7o6Vr2Il63NtBWLiqcwwoKC5Nl3yKQUCo5pVIyKZeVWMvMBW0tQRu1gDlFe4r8qryaMDlcvQ0Yt2wVdnTNIMKwnhRbrZstCqhUEt1dSVLvkelJCpSzqU3Q4pBTn6Lw75Nk++G3q3NIl0GxU2656djY3EtKLUbjcoOVBlQvYoSoG2P1hckTyemDqWHsRahcmLlblW0uzDd6XlMy0l5UATtJe1cPW6C+ZY7i3JVaYrLbhzDrrwIjMWzZrRewSQlnBTA+0LVdYaW2ioWtZVt2pMzSXG1oX5XWmpU16bW8nJt56eQ+6prNCysANx0VBHO+Iv8A2gO0p3tGNn+DMA7OpUk9jMylJOIK+gHQB6qVQpp8yQkJupdDSpa05lEpOQXXRNiGC6QEKW07NuptdQQ3KoURbXM0FTl73IvOqtrbXU5E1PSPuh85Uui0enNkZEzHlVReB3Zarm0kmd2\\/MKllnrH4XwFRxdxCqeuHrknGEK1hqU9uVpuoFE7kOSUvLvDVGQSsuqWOO0zzjrWCOdsTeUdt2xgp013arjNxt6\\/bStMq72H5B26UpKXKdh\\/6MkVN5UizRl+zBJUE5lKJsGTwnhmRCfNqNIJUm2Vx6XTNOptaxDs0XnAeagq5tv0F+Wna3VqmB85VKoT5Cgc52emZs5\\/jHyhxfnDLm3b+aON2nV7fshOCKcm5ybqD6pmfmpmemV2zzE4+7NPrtuCnn1uOKA4AqNuEb9tthpIQ22ltA3JQkISN17JTYcybDn3XU2nV7fsg2nV7fshOCMaw5D2CHPQ5H3\\/Pqx7rqbTq9v2QbTq9v2QnBBYch7BB6HI+\\/wCfVj3XU2nV7fsg2nV7fshOCCw5D2CD0OR9\\/wA+rHuuptOr2\\/ZBtOr2\\/ZCcEFhyHsEHocj7\\/n1Y911Np1e37INp1e37ITggsOQ9gg9Dkff8+rHuuptOr2\\/ZBtOr2\\/ZCcEFhyHsEHocj7\\/n1Y911Np1e37INp1e37ITggsOQ9gg9Dkff8+rHuuptOr2\\/ZBtOr2\\/ZCcEFhyHsEHocj7\\/n1Y911Np1e37INp1e37ITggsOQ9gg9Dkff8+rHuuptOr2\\/ZBtOr2\\/ZCcEFhyHsEHocj7\\/AJ9WPddTadXt+yDadXt+yE4ILDkPYIPQ5H3\\/AD6se66m06vb9kG06vb9kJwQWHIewQehyPv+fVj3XU2nV7fsg2nV7fshOCCw5D2CD0OR9\\/z6se66m06vb9kG06vb9kJwQWHIewQehyPv+fVj3XU2nV7fsg2nV7fshOCCw5D2CD0OR9\\/z6se66m06vb9kG06vb9kJwQWHIewQehyPv+fVj3XU2nV7fsg2nV7fshOCCw5D2CD0OR9\\/z6se66m06vb9kG06vb9kJwQWHIewQehyPv8An1Y911Np1e37INp1e37ITggsOQ9gg9Dkff8APqx7rqbTq9v2QbTq9v2QnBBYch7BB6HI+\\/59WPddTadXt+yDadXt+yE4ILDkPYIPQ5H3\\/Pqx7rqbTq9v2QbTq9v2QnBBYch7BB6HI+\\/59WPddTadXt+yDadXt+yE4ILDkPYIPQ5H3\\/Pqx7rqbTq9v2QbTq9v2QnBBYch7BB6HI+\\/59WPdfnsU8Jbb0tdHW\\/sDbqLLVSnaUoW7WJlBcdoVxyAXN2dcrakNqdKaZVWW5apsy+T8\\/RlTsg88lNVd1oSt5WlcOH92XJY930x+i3RaNcqluXDSprULtPrFGnXZGflVOIU424GpplwImGnHWJhGo8w4604hcTcLSr6rbr0nUtYiWK\\/Jp9KcvpJJ9QTMbuBLeSJhtI3qdZSMt5jRvy3WjaizcULQ0k7alCLcxcYRbN6LYbHk8piBblMb+aZ1x1IQ2lV12lKDydlG0W5N2jWp+ZdKp1Gf1T8mraIrHuzxqm1B7tcQ4LMvR55SyVPzdLU2TRp9wkqU4pcuy7JvLWorcmJCZmnSO3STxr5Q+CUy62sSyTQAFxMZB\\/1d10BwEWF\\/NZt1CkgDKlicUCSlmw0WqVrHqHCEFq5h6e7xz9kXqVkN3E+PHb1QgTkCeiOgUJG+2g3fPrjHKoFtBFFKyHWeEIEgDM\\/p6ouJJOfgDwYQUrM7uA9sPpFz3ceu+CLSecnfxPjoEIKOZz9A7IvWeb190IqOQ6+aHo9AJNhx665RYs5nLo9\\/wBkIrOQy5z7ovO7jzQgTmSemFoFzfgPj1r+uHgLADlFqjkM\\/QO2EOv07+fvi5RzPUPGcWw8kXNvWfCPYIIITcXqpPSdw+J9Hvyh+DfCDytZWQ4J3dp5+OXPu9GecMn1cEjtPw8ZwspQSCTzD1no7TDIkqOZ5zx5oWgXN+A+PX2Q4r0QEjjv+fr+yLFnIdZ3Dxz9EIKOQJ9Xj2xco5kn0DshFZzOXR4+z0RlpFh46mFpFgB7fGLCQASeaG5PEnrJ98KLPAek+PHNDV5WQCRxO89gz9\\/whYFyB6\\/Vvh1PopKj0Pv+FobKUVKJPOfZzCG6jmSfQOyFVnIHr3Q3UcgT6B2xltp9+g5cIEDeeen3xIk+TiU3baTWPNaCmv8Ac7ApmlaqkEvK+d8QbUnCptz8FtHzFk8gfsiiwr+9ZRJ20lZlCabacqFpG2n6m+EZZKUJaXkmtcEZAJSZoJOYOeuCNwyiO\\/8AJq6AHq\\/pe3QshHzfSMFaCyFSmttzWZ7E+oTJanSsbPyX5hlBMSiG3A\\/5ZLvOLa2DQfkA6S72tN2hL62eylqy7qZEZB9dNbJ1ufMy+9OWQ1cj9ciKv8p+dMl5N2OEosFvt0OTAvYqE1jCjNO8QT+xy5awIuAVDLmjp\\/YfL5pmgk\\/VW\\/VX9Nf2tmcQDx\\/PbA13b+RMNn5QNU9tino7UfZAeQ2BelSEwXM9p863DS5TY7LZjZ+TGjFeuXnNt5SU6jZa1ndJ1hAikTasxkuorTlvz8yWliSebLzwB6Y2w8vXV2ZnSxw0pLC2HFUvAC3nphTT4dcZmajiBiOvyWYbSCZdxErKSs2hDh13GZ5twpShSFK1QWIkihqURltJ19We7M5IZRmcufzMuwDKNz5PMp5l5O2zVm2XtKS7NWNwT5\\/WKlPhWpV9YP5t9rHQJTZIrja472uOMTqve1RbZvp\\/UJaXZtoBqOysRvFiCTqT9g6rVSek7h8YZE5DPohZ5WasuZPv8c8NnDzek\\/AcYtJtO4c9T4fq98VikWA79YmafJgaItrAjSiuHZSwTVMW7PoomEZCdcVQLOdnlNTCtQKMq0LlQuSSXVhLr08UtNZlTpHcHyaKiJp+gniZWC1KCauDSgvZzylrdMrp9Nw0wikJWVm1qbSSJeeRVpmXaQt1ptueU5r7V5xDZHZ+AGyzg7D6FCxVJdqBqLh59x1J9YcB8DyJtZ1EQE0qTF96Fq0t+e6tR4jio37x4kSKI1PctrQEV7k0tIhSW1uzVBdwsr8mNsGUtrkcYbBl551wEBLyW6TNVJaGj5zjpaLZ2gbEbYYwP5Te2FXdyf2lxSkMl3yPBO8Ln1A205kLKlBei3Sl86mTCaCp8uJBdQGi7LjbJaz2uKGBNYaxDLkXD9EqrWls35SRfSCm4IuCQRobKA0MP1FHaU+fQBcqk5kJFr3UWV5bd97R5yqTmM\\/Qe2FkHm6N47PHvhqk5HqPHx454XBIOfPHzzULgjq\\/WkU2RcEc4esryOqeB4dvjxwjOLk8an836WOHTBc2bVXkr1pjh2obQo\\/cTXqgw2sHc6XJqnsNtMneuYW1qHWyScFweBG4+484jJrRBqxpOkxgrOBeoXb6pdJJAaJ\\/3c21EKcns0HaJqGrmn6UZ5sfTakQbaFJefYFxpJgAmawriBhNx9V1dKmw2rdoUuZT4iJDgqaMljHCk0bgS2JKK8rXehFSlVLT4FII9d++Jn+iZNbDE+daJA8ttKqywzQokhNQo84dXIhKCfJd6nCRqncNcojUl8qPtryvR\\/0Xrx2ST8w4xXZbJdLTpW2brsn502aXh9ChDosorW05k46plC2c0sPxs70ap8yeMVrNqWQ3PM12SdyWvLJdEqDzQyT9bOZYZA1gW0D6TzSkRiT8pPtxVc5O6jVQIKhZukZhpcaj9KNRMzbGItnhRDWaMyq6gjOZKWfPISTMFlK4v5GE+H9lrkoCCqQxfWZRXAgPSNKnRodCCmdOU23hSd4IjqrbVL5np1Sr\\/laTJvi1iLsza+AtY3YGbiN9uEQssCXs5S5JfP9imKY9llw27c6jPPnJ8nG7my64yBQcxlzj3ePhGM+Bb+rU6\\/LZ73ZGUf1czwYmHG9bLhu8pHHeM\\/N54yTBIOYi6cToKK1Nm2iwwoeuXaB\\/wDMD0I45nxaad5HIR60J+28O0K5jz8Or9Pv7YWByIPRDUEEAj09R6IXSrPjxHtiOLTxHr+cYR79x068et+joHnHohZJzHWOPfDRKstx4e6FgcjmPT1w3DJBBsd3A8OucO0K\\/BPHm7Oj0eOaFkqy48PG+GgOYBB48DC6VZjrHHv9MNLTxHHf3fr+PjHkO+GRB8ePGULAgj3johohXMT2H4QqDkc4aUm47xu+UEPEqz3Hjzdf6I26clZdKmapi5Zi1kmakrWumRQVj6L5tmKnSqm4GzvWXTU6ONpvDewyOe0GWoUHPeP0fbHaGEmMd84G3pTcQrBdQ5VaZm1UKDNTJlKXeFCcdadqVq1d8MzJl5WqJZa8nqKZWZcotUZp1aZlZl2nIl3a+2mYSmMbYHxDhqTUwieqMswqRVMr7FkTslOS89LpcdIIZS87LJYW6oZEJdUpz8nmtMtnmIGMKY0oVemisScrMuNzvZpzrTKzks9JvrCNM\\/ZImC9lBzEt+hdeW0x5maS6y06lIIcabdGR3ariEqBG791l19MX7f8Acfyv6sY0aOGkHYuPmHFvYgWNUlzlvVxL0uZSeS0zXLXuGSdMtWrQuiRZmJn5sr1EnguVn5NTzzQc1JuVmZylzcjOO5Hx8f61RqhQanO0mqSr8lPyEy9KzUrMtqafl35dxTTzLza7KQ604kocQdUqSfzbKP03kJyUqUoxOyjrcxLzDTbzTzS+0Q626hK0OIUkkFDiVBSVDQpN+dnG3\\/cfyv6sG3\\/cfyv6sN4I1VvD2jrj8eRjNyp5H39cfjyMONv+4\\/lf1YNv+4\\/lf1Y1I8pHfekPo94f3XjFgxO3Jc8hQ2WbouC1nLmuKTlpC0pNfk92VOk\\/NEyiaZVbj0zIVuoMg+QSlsmpzR2CKavW0BU3l1dIyXUr5xt1yeRqJSymXxEuaSUnLW1i6uYlKkp0kauqMm1A6ylKXrDV6c2b+SptC2sYZTirBM5QqnICYMnMsOVGVk52UnENsurln5eamGloWlDySFmzTgCuzcUUrSmD4h2hYVwtUEU2tzM1KTDjCJltQkZt9lbK1LSlaHWG3AoZ21oUEglKhYgb4m17f9x\\/K\\/qwbf8Acfyv6sQ77e5fnEFhxsVvD665dCG0MqckcRaXXlKSEec6GKtYtPSHNdCNUmacdKFKC5krTqOZMWXy\\/wBY824yi6ZXEGkOFQ2y6pY1oVOngZFfmzFtVuVqLmSmywrOlt\\/sqF+d56mttVfIp2\\/UtKlnCrc4lIJIkJ6VqDp\\/tWqe5OKUbcLg3sLXJtjyu1HZ5OKCWsTSaDp\\/RUvUpIXNtM85JsI3m2iuF92sSeNv+4\\/lf1YNv+4\\/lf1Y0r4f8tFo2Xg5KsuYl4dMOOuMpcbuBN0YbqaWshJD09eMk3S21JzzdfbmFSaNVThdLaddOd9j6YmF18yaZ+jzLFXkCpKDU7TrlCu6loWtOskLnadOsjJad6dm04pQGerq5mKZxFsc2mYUJ+n8HVumJBtmnJF+UuTuCUTSGHVXuLWb1vpcWvMafU6RV\\/3JqtKqm\\/Sn1KUnCLAFV0sPLWCkG5BSLD62Xhlzt\\/3H8r+rBt\\/3H8r+rHW9KxUsGrhKZe5JKWdUP2KpbalrSokAJCp5thha8+GzdcB5+G77xp+XmEJel3GnmVjNDjLqHW1j8ZDiMwsdnbwivZiRm5RQTNSszLKJsEvsONHS24LSm43kEXBA9mwU0pH121I\\/tgU37he1\\/dDzb\\/uP5X9WDb\\/uP5X9WG8EYtvD2jrj8eRjzKnkff1x+PIw42\\/7j+V\\/Vg2\\/7j+V\\/VhvBBbw9o64\\/HkYMqeR9\\/XH48jDjb\\/uP5X9WDb\\/ALj+V\\/VhvBBbw9o64\\/HkYMqeR9\\/XH48jDjb\\/ALj+V\\/Vg2\\/7j+V\\/VhvBBbw9o64\\/HkYMqeR9\\/XH48jDjb\\/uP5X9WDb\\/uP5X9WG8EFvD2jrj8eRgyp5H39cfjyMONv+4\\/lf1YNv+4\\/lf1YbwQW8PaOuPx5GDKnkff1x+PIw42\\/7j+V\\/Vg2\\/wC4\\/lf1YbwQW8PaOuPx5GDKnkff1x+PIw42\\/wC4\\/lf1YNv+4\\/lf1YbwQW8PaOuPx5GDKnkff1x+PIw42\\/7j+V\\/Vg2\\/7j+V\\/VhvBBbw9o64\\/HkYMqeR9\\/XH48jDjb\\/uP5X9WDb\\/uP5X9WG8EFvD2jrj8eRgyp5H39cfjyMONv+4\\/lf1YNv8AuP5X9WG8EFvD2jrj8eRgyp5H39cfjyMONv8AuP5X9WDb\\/uP5X9WG8EFvD2jrj8eRgyp5H39cfjyMONv+4\\/lf1YNv+4\\/lf1YbwQW8PaOuPx5GDKnkff1x+PIw42\\/7j+V\\/Vg2\\/7j+V\\/VhvBBbw9o64\\/HkYMqeR9\\/XH48jDjb\\/uP5X9WDb\\/ALj+V\\/VhvBBbw9o64\\/HkYMqeR9\\/XH48jDjb\\/ALj+V\\/Vg2\\/7j+V\\/VhvBBbw9o64\\/HkYMqeR9\\/XH48jDjb\\/uP5X9WDb\\/uP5X9WG8EFvD2jrj8eRgyp5H39cfjyMONv+4\\/lf1YNv+4\\/lf1YbwQW8PaOuPx5GDKnkff1x+PIw42\\/7j+V\\/Vg2\\/wC4\\/lf1YbwQW8PaOuPx5GDKnkff1x+PIw42\\/wC4\\/lf1YNv+4\\/lf1YbwQW8PaOuPx5GDKnkff1x+PIw42\\/7j+V\\/Vg2\\/7j+V\\/VhvBBbw9o64\\/HkYMqeR9\\/XH48jDjb\\/uP5X9WDb\\/uP5X9WG8EFvD2jrj8eRgyp5H39cfjyMONv+4\\/lf1YS0jMIWtKzQ8xOwoEsicu+Qoq6jZRWWjMN3jaw+e7ODDrhUJZNWXLrtaZfOS\\/m2fqaf75usjtLCStKp10IkVqIl60wuTWkkBKJllJmJRagogkkoclkp5zMgc27oDyacarwdtTozTzpRS8U\\/8AyzUUlX5PPUXGxS3lA+ilTdVTKNKdVYty0xNDMErWDD8dUOWruGqlJvN5wJd1eX84tFpSJlKb3NzLrcUm2odQ2RqkWghOocZcW08hbTra1NutuoLbrbqDqLQtteRQtBGTjZ4b93PDRSs+HDxvjYFynuBwwH0xsUKPT5MylsX7NtYr2mEMeTS\\/zbfD01O1aVlGhrNNyVKu+XuWjSaGFFpErT2NVqX3yzWvlSsh1nh3+iPq2pBQrL32G7UcCQN1xr3a6aR8xahJPU2enKfMCz0lMvSzmlgVNLKCtOp9FYSFJIJBSQQSCDFq1fgjjz9nR6fHPCKjkOs8O+Kk5ZkwiTmcz6OqHALC0YcUJ4k+mECcyT0xcpWe4cPfCSlZcOJ9kKAubDjDqU2F+J+EWLVzDm49f6Pf2Qis5DLnPu8fGLiQASfR1nohAkk5mHgLAAfrML6MHjx7YIIIfSLDvO\\/5QQQycVrqzHAbh8T6TvhZ5eQ1RxPHqH2+7thm4vUSTz83bCt8OIAAKjw3fd8IQeXmdUcBx7fHjjDdZyGXOfd498XZ857TCBOZzjKbTu5DjzPXy5R4kZiVHh8eHs+UWKOQ6+bx1QgTkCeiL1KzO7gPGcILVnu6OPWfs4Q914w8kXNvb4RYTxJ6yffDFSipRJ8CF3l5DVHE8ezx1e2GizkOsw62n2n4da+FoUo3ISOHs6HzhNRzPVzQgs5nLo9\\/jKL1HIE+gdsIKISCTwAz+ztPNGc2m2vLQfOHALC3KJcnybmgFjB3SZugJH+6+Jtl0DW2mtrG2rXqFRKdgfqan3VhRd\\/vxXq7wwY2\\/wCkjNa93UaSBURLW83MHJwZJXNVCfSQUcEK2cs0pX4S0rSPxSNevyeeiGk6Cty1JSSFXTpDX\\/WkrU4y4FNStoYcW2lLaW0hbbSXqA6A1MKccDheeSdk+0lOc2kBNh7EabaQvMyFLpMqoayTqFTHlgSAN4zE2F5L87JX+9lGfO\\/lkz6pTYaqUzBAqeI8OyZA\\/qgbMzVAjUaH9gB05bK9A+llJB662HywCqTvIapc7M8rF94gnwHnBSPEHSwtBs5aqufOmnZdkgVLItqwMOKIlK20NhtMxQvujKULQdZ5GvX3FbRzJwLKm8g02gxgPZoDduyaxq\\/SOTa9wIJPlTre\\/hmr6M+jVjJDlSri+6fT50jKiFIUJa5rct3Jtp1pI+5SwrStdQ2by3FF0LpCi84khl58uvMobadQgY6W4nUoFKb\\/APnbacRn9KtboO7IcF5DiQDv84xe+zKQNM2LbK5BScriME4SW8mwGV52gSszMAgWue3eWCd5PpEAm0UFj98TWLMTPJOZDmI6uUKJvdpE9Mpb9qAkcgN2kcwTxJ7SYQJJOfPnn3Qos7gOc8fX+gegw2dVqpPSdw+MSpA489B4dfCIXHoCfJ8LcdonJp4fVVxlaW7zxJxbuRhTksWUvNSl3TNnl1p1Ot5Y3trTea8pOWo609J5ZyqjBHf3Ix20q1eTF0SabslMGasq5bjCC2+gFN5YkXreAd2cwoKPlHz4JgOpGydDoXLfrZTUEdvYWY83w1h9k2Km6NTQq27OZNlS7X4ZybeqLSpiQinSIGl5VhRB5rbStXvUY2hR0bpJ2wb10dMfLObl0zC7uwVxSthEu55MpD5rtkV2lBhaZtSJUpdM1s1pmlJlsjk8S1rZd5Q0eZbmG1svoQ6y8hbbrTiEuNrbcSpK23EFKkrStKylSVApWCSBlujcvtB5l1lX1XW1tq0uLLSUm+h4E\\/DlGW4gONuNk2C0KQTyCgUm3tjyqQrMAjdzHt5\\/YYWQcxlzj3R9BfVuOWVfV52e+laXrVuy4rZmEr2gcS7QqxN0twL2zMu6VpVKZL2suw6CfpGGl5tj5sHI59Hj3R84X2VMOraXbO2tbawNQFtqKVWOlxmBtoNIpM7zpbuOtu6HSDkcuY++OysJa4baxUw0uIKDZod\\/2bWgtRQEtmmXHTZ0LUp5DjISjYaxLiFN\\/joWgZR1iDmM+mHku8ttaHG1raeZUlxtxtakOIUhQWlxC0nWStCgClSclJVvHMY1s\\/KInZSalXLFublnpZwEX9B9tTStP7VR5e0wth5crMy803o5LPtPpIuCFMuJcSRbUEKSDfhbjE3HBufNOxUsCYz1de56XIk5KPm1N9NNUPNWnIKE3v8AwBuKkrQCk8ny59ot3fyXOk6ymXLs7bsphrd8g4lTx8lXb+LliTlTmNm060h5JoHzwwoP7VlpL5mdgX2GFDpnDq62ZtFiXikpSzNJte50FGeolp9MjVEqQFbYaoQvcCXQAd5Ud0bCeUKstvEHQT0wbSU2t56o6N+MUzTW0thalVui2LW65QAUGUnVqbFaptPLglpZU3qJPkim5rYLRzf5Fs+tikYzo7tgum4lpc461ey21T0quUWSBf6\\/0SUDSxKFAmO5NrTCZqVl5luxTOUWebaWRdKgEB1tXqEyFcxcHSPNIwWmg1d0w1rHKao041q78ituYk5gHLLIqCWlgFWQyUoJOZIOVvV4EYY4VzAl77ohUfNeM9LqyG\\/6WnzYbGZUADtg2Qd5UNZASogRmdHWuL2QiqJOtnZRpdzzC3W9PAIHttHD9TTaZB\\/SbSfYVJ\\/\\/AFEXJOR6j4zhcEggg7+OfjphtCiFcx9HdEPIsSDGvh2CCMxCyVZ7jx9\\/2w0SrVPUeMLA8CO0QypOU9x3QkgEWO\\/gePXOHSVZHfwPjOFgSCCD9o7oapVrDrHGFUqy3Hh7oTDViDbcR1p9nPhDwHMZwslWe48ff+iGYJB946YWBByIPeD3wypNj3Hd8o8h2lWXZziFgeBB7IapVrbuf3wolRSernHjnhpSb6jf8euu4jtPATSbunQ2xLexLpstUK\\/hDdz9NlMd7Dklhx5UlKI8kkMT7YYU24EXVako4WapJs7Bm6aAw1T59xh6nyFTpssXCzFO0sT7Rtm7rQuCn3Pa120eRrlq3JTXi5I1mkzzW2l3ElxLTzUwlILb0tMtMTcvMIek51hicl3mUw7FJQ4hSFpS404lSFoWkLQtCwUrSpCgUqSpJIUkggg6qs47F0PdMCs6AuIzNn3euo1XRJxLuFhbxS7OzkzgbdlQfPlFboks2Xyq2JtSlT1ao8qx5VMSrK52lpdrVNdlLj58267CWdqdMexBhmWCNoNIlATJspSleMKXJtBKZRP1c+IaZLthNOJuqqSDaaUbzEpS0Ho7YltYXht9rDNdmCaK+4RIzDqjanOuKBU2VG+WTcXdSx9VhalPpCUl8OzIdcdB9nfBrjoPs746\\/sm96Nd1EpNWpNWkK1TqzT5Sq0Wt0qbl5+lV2lT0uiZp9Tpk\\/KuLlpqWmZVxmZYfl3HGZlh5L7KlJUsJ+12yfGfdHy8mZF6Uecl32ltvNLU24haVIUlSDYgpWEqBBBCgQCk3SQFCw7mZdbfbS62oKQsBSSCCCCARYgkEEEEEEgggg2McXc9vUe6KTOUis02TqslOSc5JzEjUJZqalJuTqEo7I1CQm5d5K2piTqElMTEnNyz6FsPsuFLiFlIyh06Y\\/JiYWYBYqTFPpMpdkvYF0pfrNlTYrKnUtSwcQmp0CZmJyTmCuft6beTL5pdU45TJmlzsyRMzTjTEyrbJ8Z90Yv6UejvS9IrDqpWcFS0lcTe2rNmViYbGVLumTln3JZl97VLjdKrSAaZVtRLxbl5hU40y9NSkoEX\\/AOTxtmrGyPFWVNWnpDC9eLMpX2mHnAy0ltThlKmWkE3cprjzriilC1qlHp1tCFOuIIqrbBgRzGmGHlU0FGIaSlybpLjasi5ggAv01Z+qUTraQlvMQETaJZwrS2l0KhXTWhvhu8VGUr95ya1KUQlc5RpphCSDkhCDRGHsgSPOcmXSUghStY66fkaloTyqszR8QH2iCcmqlb7cwFA6uQ8olqrLahTks5iVXr5hPmapUrPeu0Or2zW6vbdw0+ZpNet+oztJrNKnW9lN06p099yVnpKYbO4OMTDTjawkqSojzVFIzjj0qI3cR44R9Y5fH2Kkobelq64+04hLja1Ik5tp1twBSHELcYdStDiCFJWhVlJIUlW4n52Gp1Rham1vuocbUpDjbzaM6FpOVSFpdQVJUkgpUkgEEWOsa0qvodYlSSVrpVVtesoCTqtpnJ2nziyFHJIam5ASg1k5HWVPjeVJ+qkKc67XhPjvh3PJq1Oty8KPUJQnZVez5x6ammUK85S25215yZmmG1aoUc1IKCEpd1SnJO3YEEZg59kVjeS+1TECEqanpWmVFlacrqHpdbS3EEWKVdm72BSRcELl1jXdbSMpnEU80pKlBpZSQQoBTbgI3FKkKABHA5bg2IIjX1YnKF6ZmFUwiTbxcuSvMS+oh+jYlSkteSnEtkJDb07cstMXHLjJOqfJavKOq36y+cbHMH+XRuqiPS7GKuEyGwS0Ji4sJbknqNMNBJycKbVuOYn251TifPRr3hJIQpGy1XEvazHyFYt237hZ8nr9Do9bYCSEs1amydRbSD+ImbZdCTnvBGRB3jzo6NuTRYwhuBLi5WlVC2ZpwE+UW\\/UXWka4OYzkakmoyCUEgJU3Ly0vrJJ1VoX56YvWqLsPxuhbeLNmdPkn3gQueobTci9nOUds8\\/SjSnnym1wmYanEkWQpC0XBsvD+23GVDKEy1fqzbSbDzebeRWJIJF8yRLVFLyGkqub9i2ldzmCgsJWJD2B\\/LG6M+JSZOTTi\\/SLbq7oaQqgYv01yx5xsu6gQgXI8tu0piYcdKm0pZuWovpWk6zOzdZLmze28fbUrsnKzq21Ikp1tLsrVKVMy9bpMwydyZhmblVJW40sglJl2pgc2tuiBJc+hdckql1+0LqpdZbHnIkqzLvUidy3fRNzDBqEm+5nmdd3yFBGQ3byfiLbr2lfoxTjk7Z1wYm4cS+1S9Nu2vWJ961J9baiUGrS1NmJ62Kkgg66WavLv852JUF5UHibyINlmKy6\\/s6x0aXOO3U1Sq822oqWsj8m2\\/KtU2ZZbQSRmXSamsggKcUfSN44d8phL+RnENCp89ewM1RphymTabAemqRmzMMTCyR6WRyVQCSpIAGU+jZS7jodbbDlKqcpOggkttOpD6QCQdeXWUzDe8cVtJ4iOY1x0H2d8QicF+W5x4s1MpT8X7GtPFinsrBcrdIc\\/U8u865SFPuP0ySqdrTBYP0rUtLWxSVPLKmVTrKXG3Jfc5o\\/8tJowYjNyNNq+IVRwtrr4bbVQ8Y6emRpeuFhDgaveRmKlbcvJNkgNPVavUR5xgpeXIt6r7bHJWP8AyN9suBw9MDDsxXqayTafw8fppns06qcUzJI+lGG0pGdTs5SZNsJOZSxZWW7qHtN2f4iyIk8QtU2bcIAkMQN\\/RbwJAyoE2tS6a64o3SlDM2tRUAkD0kZt7WuOg+zvg1x0H2d8dI2jjbbN10uRrUjMSFWpFQb20hXbaqcnXKLON5lIfl5qUeW080SkpLjExNkkEcY7TkK7Sqk2lUjONv6yc9QKKHQkn6ymHC26knPPNbROY4cw5inKNP09xbU3KPsraUUOBaDZC0KyrQspuEKSQQpKylY1ukW0nymHUoS5kKmlpStDrZDrS0KF0qQ62VIUlQN0kKsRqI5vXHQfZ3wa46D7O+Gm2T4z7oNsnxn3Rr+x7j7R1+s91mYd646D7O+DXHQfZ3w02yfGfdBtk+M+6Dse4+0dfrPdYh3rjoPs74NcdB9nfDTbJ8Z90G2T4z7oOx7j7R1+s91iHeuOg+zvg1x0H2d8NNsnxn3QbZPjPug7HuPtHX6z3WId646D7O+DXHQfZ3w02yfGfdBtk+M+6Dse4+0dfrPdYh3rjoPs74NcdB9nfDTbJ8Z90G2T4z7oOx7j7R1+s91iHeuOg+zvg1x0H2d8NNsnxn3QbZPjPug7HuPtHX6z3WId646D7O+DXHQfZ3w02yfGfdBtk+M+6Dse4+0dfrPdYh3rjoPs74NcdB9nfDTbJ8Z90G2T4z7oOx7j7R1+s91iHeuOg+zvg1x0H2d8NNsnxn3QbZPjPug7HuPtHX6z3WId646D7O+DXHQfZ3w02yfGfdBtk+M+6Dse4+0dfrPdYh3rjoPs74NcdB9nfDTbJ8Z90G2T4z7oOx7j7R1+s91iHeuOg+zvg1x0H2d8NNsnxn3QbZPjPug7HuPtHX6z3WId646D7O+DXHQfZ3w02yfGfdBtk+M+6Dse4+0dfrPdYh3rjoPs74NcdB9nfDTbJ8Z90G2T4z7oOx7j7R1+s91iHeuOg+zvg1x0H2d8NNsnxn3QbZPjPug7HuPtHX6z3WId646D7O+DXHQfZ3w02yfGfdBtk+M+6Dse4+0dfrPdYh3rjoPs74NcdB9nfDTbJ8Z90G2T4z7oOx7j7R1+s91iHeuOg+zvg1x0H2d8NNsnxn3QbZPjPug7HuPtHX6z3WId646D7O+HEpPOSM3LTjBKH5OYZmmVHVIS9LuIdaJGsOC0pJG6OM2yfGfdBtk+M+6HWC7LvNPsqW08w428y6heVxp1paVtuIUDdK0LSFJULEKAI3WjxSUqSpKgFJUClSSLgpIsQRxBBsRGBHLo4Ty12YO4LaRdHkwp+1q6\\/ZdwTLRO3Xbl8yCKzQHpsKzSJWjVyizUk1qFDiJu6VpebWlYVLxhCSSST9g7onG434bp0idCDHTCZLKp2tKtCuPW2wUpdeeue2wxe9lto1tZTSZi4qZI05SknXRLJe1DkdSINqlZ7hw98fbbCNebxbgvB+LGynNX8PyE3MhAslufSyhufYSLaCXmguX3kktX+rlj5xbZqCaJjObKUkNTYKgqwAU5LEMX7yuWEq8dxKnVEi9yaKVmd3AeM4SUrLcOPu+2KqVqjrPCESeJPaY30VQlN9Tu+P3RQkAZmESSSSTv45+OiKqVrHqHCEVq5h6e6Hkptv3n3Q7FqjmeoeM4t6vB7YIIeQnifV8+vHlBBFq1BAJPoHSeYRdDN1euch9UcOs9OXu+EOR6kXPdxhMknMnid5PjKGTi9dR6BuHZCzy8hqjn49nR4HtENVHVGfPzDp6fVDrab68ToPn13wtRuQkeHd7uXuixZ5vX48c0ILOQy5z7ovJ4k9p8dcIE5nPp8e6MpIsAOiYWBYAcotUrIEnfzDt5vYIbqVqgk83TxJ6O0xes5ndwHCGby8zqjgOPWfshaRc24DU+7Trxh0egm\\/E8OuXH2QkTmSSeO8nmhuo6xz9Q6oUWrm6ePUIQWchu4ncO\\/iOHbGW2nu36Dw+Xyj1Atrz3eHXw74TWcz1CGj6t4QObee3mHx9IhdaglJPq7eaGJOeZJ6yTGUBYW5QuJ9nItWt9y\\/JuaPRcaU1O3D+qTdE7mXcnTVcU70+bXEpcaZWhK6FL0rMaqmlLSt5l19pbTivu8X53yvEq7HQdYJn2ZXLWB3yMjKSRG4JG7ybUyzzTll5xyUe1NAG0U2NoRaJ9uagafYwCwwqc62EhGyqdx2nTLjqrR1VupUpup1aZbU6FZPFJf1W9bUTjpfdbl03BeFdnH0tyTVWuCqzEyoFaGpNqcm5pbp2e2WptqWQVJSzrq1EgMjKON\\/LgqCvwKwVRUJKjOYqdnUp1K1fRlImpRICAL5v\\/AIvlAF9SEgekL9u7HZXzdoOKsPNaBIy6zuSkuCXWtRVqLXlio303m1rx59ml\\/cTd2aV2kpcbCy5KVXHXFaYkHCACqmovets0wqAddAWZBqX2hQ6tJXrbMlOQhpSm9jTKc0chs5CUQd2XnJYb1iQCd5IJVxyJ39XStdq8xcVfrNcmQryuu1eo1aYClJWRMVOcfm3QpxLbKFHavqBUltpJ4hpI80d6EBttLaOCUpSncBklAyGYAAG4c271ZR3SaeKRQsO0dIATTqbKSAsQRlkJOVlgRu0sk28NNLRyBWJkzc3MTShZU1NTMyoci86XCPUV+6LFHMk9fqHphm6rWXkOCdw5+0+OYQ4cVqpJ5zuHjqi2SlJipTsnTpRCXJyoTcvJSjRUltK5mceQwwlTiyEICnXEgqUpISB5xyyIZQgqKUJBKiUpSALkkmwAtvN7ADiTYa6RqRr98eojoHWoLF0JNES1PJjLPUXRrwTl6g0pcyFfPLuHVuzVbdKJpa3mTMVZ+dmDLqKUy+12DTbTTaGkEZH2lbVPs+1bZtKm\\/wDyPta3qNbkhqtJZHkNEp0tTJXJlsbJpOwlW8m280N\\/UQSkCCO7pRhMtKysukAJl5dllIFiAGm0IAHcAkWty8ItxlBbZabuBkbQiw0AKUpGlri2nDl4R9LBBBGRDkea7yhlpiyNOrS4t1DCZVhvSCxQrElLIbDTUvTrnuqo3RS2GG0pSEMM0+sSyJcAfsIbI3ERh8hWYy6Pd9nCNtfLpWb9yHKT4y1BqWXKyl92\\/hhekqgoWhp\\/bYfW\\/blRmWCttAUiZrVtVJ15aVzCfLFzADqPPYY1HpPBQ7R4EfPzF8n5hijEEoEhKGazUkICdR2XnbpZIvzbKCNb29G+htTk612c7Otf1uafQCdDZDq0g20OUgC3CxFodoVluPA++Fgcjn4MNQcxn4ELpVnx4j2xGvGMLxiVfovXAm5NHbBaqaxUv9Tm16c85mSpc1QqYzQ5pxWWt9IuZp7qnBkBrFROWW6QKimU7EjCtFHqublJv2wE02ogJQsuU66bcEtNgNvNFlzWlZ53zXmi0rIa7BT5sRi+TsuJFb0WLNkisLdtetXhb7ylKzXmq4Z2vS6Dk4s5NylclWWwpLQS2hOSAnz1yV8A6mKrhBY0yFAlmkrpis88x8zz01S0pKch9VEojdxKSASr68cjeT6v6A2v7X8Mp9EKm5ybYbOiizScQzEvLOpvpYM1htVt93Ad1zHdNWdTVdn+Bqmr8oXaVTm3jvHazNKYL6Cd5IdlXEnhdJt3+VnR5KetPEKSpdVaVK1Gg3a3SKowtLja5aYkaoKdUWlIdS06hTSm3m1IeQ2vdquJSdZMZvx1Tp8WUnCvTn0srOkWESkjbekdiwuhyyA0gS9Dm75rNXt1sJlUtMo1KNOU8FLLTCEkZJYY\\/Y09nS0wiZZaebOaXW0OJ3jelxIWk5pJBBSRvBKeYKVHcGM051UyaF7PMOp1tcBPYuJCrAWP5Y27hawtHFFaaLTyUqsShTzSiN121AceBN7Q4gggiDKTcd43RpYWSrMb+I93T4+MKoVluPD3Hu8dMNAcsiD1giFwQR7x0QwRfQ\\/qgh0CQcxCwIIzENEq5jw5j0ePHUqCQcxDJBB+B5wlSc3iIdpVzHjzHp8eOtVKsjnxHOOmGoIIzEKpVzHjzHp8eOvwi+hhmHgPOPRCyVa3bz+PG+GaVZdnOIVBByIPeD3wypNvDgfnBDtKik9XOPHPDCuUSlXLSJ+h1mUbnqZUpdUtNyzmYS42rIgpWgpW280sJdZebUlxpxCHGlhaEqh0lWe48ff48dSgJB946YSCtC0OtLU262pK21oUUrStBCkKSoEFK0qAKVAgggEEWBHoJBBBIIIIINiCNQQRqCDqCN0dgaBmnJdWgjiBT8A8cK5Ua1owXXUHnLJu+YbmJ2cwqqk5NB1U5LlnXeFsOzTuvd1Alm3DTZl03bQJZBmKrI1yXTaV4Um6aZTajTKnIVaSqsjLVKkVimTcrP0utU2aaRMSlQp09KLdk5uWmpZxt9h+Wedl5lhSXmFKbWrKFledm0K\\/bfnLdr8up6TmRrtutqCJqRm2wryeelHCDs5hkqOWslTbjanGXkONOONn77QJ0+L40Er4k8AcfJ6pVrR2rVTceti5G0zU9M4avz02VLr1AShLszM2lMTLwmLstSXS5OUadddr9AYXOOT8jc1BbefJ9ltrEpP45wPKNS20STYVNYiw7KtNtN4wZaTmerdHZbCEpxGEDPUpFCSmsBImJcJqSlIneptjW2NVM7DDmI37yF0tyk64o3kwbJS26TceZAjRQF5Im5BlCRLTPYUbcU04hxJ85KtYZ5kZjjn2jjv3iOt7CxCt2+rfoteodZpldo1wU6Sq1Ar1Im2J6k12lzzCJmTnqfOSy1y77Uyy4hxCmlFDifObAO0bR2Frp6fYe6Pl7NycxIvuys2y4y+0tbTjTqFIWhaFFC0LQtIUlSSClaFAKQoFKgFAiO0GFszLSHmVpcacSlSVJUlSVJUkKBBGhBB0IJBFlAkEGNSXKb6KgrtPc0l8PKbrVGnSrEvitTJJGTk3TJRtqVkL0bZbRrLfpLCGaZcSwo50hqm1INtMU6rTLujdDwO5W49PN6eiJnku5JOoekKizLzdMn2lys9KzbDUxKTEs+gszDUxLvIWy9LvsrU1MMvJLbzSyhWaDvja6eWiHN6N+ICrhtWSeewfvmdmZm1ZkFcw3bFTcK5qbsqemFLW4fJGwuZt+bmSXJ+jANKmJqfptTePcvkx7XRPSzGzPEczlqEk0s4SnZhes\\/TmU510RTiiSqaprYUuRFz2tPQqXSlvzJsP8U+ULsuVTZx3HVDlyZCdcScQSzKLCUnHVJSippSkWDE6tSUTZIu3OqS8or87X2WCgJHCFQsHjuPsjjkOKRu4joPN2d3CHSVpWNx7RzjtjskpB3+2OVodQQglRHZ0HP2fZ6YVCge3o8cYaUkjvHOCLwSN4i8L6R6vHfCcEJ6668II6yuvBPC29g45WrRpSJxzMmp0po0apFw8HXZqmGVXNLBG4TomUbzmhWZjGK7tCppW1mLFu5TW5Sm6XdDG0QVEEpSKvTGUrQkb0pC6Q6vVyUXlKGas6ovCzz7\\/AGGJHS8XYjo5SJKqzPYpsBLTBE1LhII9FLMwHEtpIvctZFcjGaxUZ2WsGphYSLeguziLcglYUE3\\/AItjGsW3JfS00Yaq7W8O67iLZIQ6H5qp4e1ufmKFPpQgAOVqn0p56RnJPJCElm5KYWVKQzrNZ7HLYXgpy5ekdYyZOmYwWZZuMdNlVtJeq0sg4eXqsJGzdW5PUSTnLVcWg6riGmrNk1LcDqHJnVcQpj7IKSefLt3fZHwF2YVYd3ul03LaNHn5l0qK6i3L+Q1bWIIKvnWnmVnzkfO1VzCmyR5yFbiHq\\/M7PNoDfZbSdnNDrrqkBtVXkmfM6whFgkpbnm3JepouBfK1VWW7gfk9EgWBhnatizCykmlVao09AUlSmZSYK5NZCr5nabNdrIvKvc3cbO9QAsoiN0WBXLaaIuIrUlT7jvK5MHq44lAXTMUaI4uiuzGsAtuVu23116kMyiNxRM1ubt4uJB1mGyNQbZbIxis3ECisXDaNxW3eVCmM0s16ybgpNyUZ5WSXMmpylzk3JrOotCxqziyEKSojJSAYL92aF1uzhcfs26ahRnSpS00+tsoq0lvBAZam5fyKclmwciHHkVNzVGqQsnMdNyeEuk5gfWvulw4qt1Uapyw1W7lwmuyrUqrFDa0uJQlNKmaTcSklRJ2QklN6yVA5+brc+4m8jPY7i0uTGA8eT2Ep52600rE0u1PyfaK+rLszQXSpptPAuLmqy5+ilX1R0Dh3ynphWRrEdHpdVHopVMyi3KHUNT6TjgKZmRmXAD6KGmpVBAsSCbx6JsvWKdMhJbmW0E\\/gu5tK47v2TJJPRqEmOQSpKgCCCCMwRvBHSDwPr9UQV8MOWL09MGZiVo913RR8TpCnjZuUHF+zm11RLK8wsPXBb67Tu6YmMytcvM1eq1MpcCQ60\\/LI8mXs0wn+UOWS8mTk8ZNH67bbWkJTOVzDK66ZdbL7hWSuZatu5Zez3pFlAVl5Obmqy9VsKS6pStmjnHF3kN7ccO53qTTKVjGRF1omcOViVW52OuUmRq\\/0RPuuEZQWpKXnCCbIW6kFcXLSNtGzerBAeqVQoDysv5KryDjrJUQi4TN00zjKW7lWVx\\/sbgErDZskydYI1N4ccstoHX+iVbVjWbHqUwop+aMR7Pui3ly5OZSqarrFLqFpoRkDrKFxqCck6xQVIKs2LN0rNHzEBDS7IxwwavIupCkN2ziZZ9VfSS06+WnZWRrE3MMPJZYmFOMPNIeZDD21SgtuhHO1f2VbSMLLWnEWB8V0bsycy6jh+qybJSDbO3MTEo3LutnWzjbq21DVKzeLAkaxh6qpCqViOgVIqy2RKViRW6M9socZU6l1pZvohxCV90ZGQRwQrjOeSmHR06q0qy6ehXYd\\/EcIuFcldwLUwFdGq2d3aXUju9kQYyzw\\/qZPhY\\/A7+7x5RvDTpob2F342Ug29YNrDeTw77iObgjhjXZMfgPnsQ2f\\/wDbFiq9KZEBqYJ60tgesOq+32QCWfJA7NWvh8+t2+D6OmuDDvsHq4bu+Ocgj59dwMo4S7pB4aykpz4Z7t+WWfEmPhrmxksK0Av7qrts21w2pIcNy3XRaLs1LYVMoS4KjMymoVSza5hGsQVMoU6PMQtYyZalVGccSzKyj8w6r6rTKC66RcDRtF1nUgbt5ANri7bso4wjtH+zYb0u4++wy2CQTYrcWkA2BNt+m7Q27ZgjCG6+UI0QrOSv560m8BZd1tKlPSdPxJti4ak0Nm08kO0y36tUqg2XGn2nGQ5JhT4VrNFYQoxjPeHLQaB9sB1LOOT9zTjWvnI2fh3ftSUvU2mWzqc7a8jQ3ApxvURqVfztq0tQTLqDwndJ2N7VK6UfRGz3GdQS4QEuyeGK5MM6m11PtSCmUJHFa1pT3xopuv4XkL+f4qw1JqSMxbfrlPS9awIyspdU6sm+gQgkjURt2ihWlO9RCQOJO7P17j6N0R5bz+UCaMNOS61adiY8XfNpUdRx+mWha9FeSkrSCJt68p+qJJ1EL1XLfH0biSFbVK204qXh8oWqz+s1Y2jJIyyk5lNRu\\/FCZqeuS4jLWpNHsymFnJAXmRW3StTiN6UtK8otOjeR55QNZyFrAM9JNqIu5VZ+iUnswbarZqVVlZojW1m5darn6tgbRic2pbNJHMHcWsPrSnMG6fT6nPZ78EusyZlwf7d5AHHUgGV07UZBnPazsqgg5EF9vWz6NUKKvZDFdxUZGQM4lRO7zGX15deaWtX2n0ZboWV2cu7pj10KboNtYIWWyMtm9SrQuSrVHM+TqXtnrivSrSDnnMvJb2VJY1WJpaV7R9tiZR0PVOU\\/5SDEJKm5DGO60yrqVBuXsfDiyaSWwUpac2dQt+y26ssrclnFAu1F1TTu3SxsW1KbFp0r\\/wBn9tcmUJeq1YwXQWgR2onq3OuupuRoBT6JPSylccqppCTvz6axec297O5QKDLGJagpIBStqSkJWXUo20Wubn0PJA1uQwsX3Ag3idyu7KUjeEzTn+Kykf8A5brfDn39mcNVXlIjPVlZpWXTsk7ubMhxQB6vaYgNTmNvKSXuh1M5jBpQJYmvLEPyy8RL0tCUfbnddMyxMSCa1Q5VcqtLS20Sr0uZdllYbl20MvhDnzExh\\/pmXSXF3Fed\\/PiZZEu+u48W52ol+W1NzUylNyVN5TGqdnsXUApJCS0lIVlKpfyB22R\\/8Z2wYPklgjMiWln55Y1FwEO1GmLUQn+Ikg6a74jM15S+FmSPN8NTTxG8TdelJQjTSwZlJo8gdO+5tr6Aqr1ZGtqyDuQ4az6En0gNkDfu49HoQN8gZkUzhkRnO5Hr3JlFAb+lQ+A8+17RWxvraGkVi5KA623rOtorFzVyeQy4SEkJS1Sp8IdKT9ZrNJA3q+qmFmdC+\\/y2DMXRZ7bp1tZDLtafbTkfNydcpEupRIyJBbGR83ztyoz\\/AP3F8ENgdrtyp+a+qWcFTT6RystGMU3uOaQBzNxfWq8qShA\\/0mNm1hf8KnTf1JoBHrvbnyj0CTfgAJ+axu\\/+fh\\/1SKC\\/W8iV0tYUM9yZtKh\\/GMuk83MmPP8A29C28jr7W77YRk2othtmquBbuXmocKpVottk\\/XcSHVJ\\/BbVnuS\\/sLr4\\/8rLU9VX\\/APh8ef8AuO4DvYbcJUEW1GA58ewnGVjx3XsbetJ8qahfwKR6sUzHG3PD\\/D5x6A6cQJQjfTnwf3Lzax6ylI9aYUTiDSj9eTqCd34KZZe\\/0zDe6IBqNGnHunzLb1KxNpzS2MjLTDd2XnIzTKkpI+iEvSXS1kcwkof3jmT9WFKjbmmXYFHnavS8YcQxLU9K6lNS1pYs3s1PJEtsyqbblG56nrmHmG07XJjaTGowoIBUENrZPkKYcfW23T9s1DeccKUoRM4enJLMtZASm5r0yQSTbUfW9E20JyGPKfw66pKXMIrbzEat4k7RWtrAJdpDA1OlioHUakkCPQRo9wU6uNuKk1OJUwobRp9AbeSFp81wJStxBbUoKQVBe5Scxn5ojmYjL8knymNQxI+atH3G+53pnFmkSym8Pb4uCoLmJvE+kS6St62bhn5x4vT9702VTtJWoTDrs5dVMZXMTjq7gpkxO1uShSKxKViTRNS6siTqvMqyLjDw+s2sJGY5y2vitPn9IjjHa5slxLshxbPYXxBLFKpdSXJSdazrk6nIukiWqEi6pKe1lZkJVYqCXGH0PykwhqYl3EC\\/cO4gpGLKNK12iuqclH\\/yT8u4UCap04hKS9JziU3yuIKgpCvqOtKQ6yVtrQpXMQRbrp6fYe6DXT0+w90VVG7yDmfd8ougi3XT0+w90Gunp9h7oIMg5n3fKLoIt109PsPdBrp6fYe6CDIOZ93yi6CLddPT7D3Qa6en2HuggyDmfd8ougi3XT0+w90Gunp9h7oIMg5n3fKLoIt109PsPdBrp6fYe6CDIOZ93yjvjASsCUuOo0dagEVen7ZtJUAVTVNWXG0hJ+sTLTE6sgHPJrhlmRC5018JP1CtK\\/HjDJuXMpTaDiHWp23ZcgAs2jdCm7ttBvMIbQtTds1ykpeW2220t1LhZbR9US8rOrKaDdFCqqlhDUpU5fyhRGQTKPK8nnN+\\/LOUeeGfEawOUaTuXuwhVbmPGFeMslKFum4n2HNWzVJhCUqacujDufRrvTCkjNl2Zty56BLS4eA8pbo8wZbX2EyGfp15IuI\\/pvZVUsOuLKpnBmIHS0i+YopVcHnzHoiygF1JVXO4izfom2YI5G8pWg3aka0hFyhTRWu25Ksso+L9\\/wD8N42sbEE2jQuSSczCK1Z7hw957vHRFVK5hw5z0+PHWkSAPcOmOmkp4n1fPr47uQ4opWQ3cT7unx8IRgJzzJPWSYIeSm57hv8AlBBBBCbiwgdZ4D4nqHt4dcPQb4seXkNQcTx7Oj0+7thmtQQnPn4AeOiLycsyT1kn7YZLWVKJ5uAB35Dv7IUlNz3Df8ocJyCw3neevdFhOZJPaYRUrM9XAeOnsi5avwR6e7xz+1FSsuHE+yMtCbC\\/s7hHqE21O8+4RYtWe4cB74RWrIZdPu+3h64uJyGfgwgTxJPWSYc5d+7n4\\/Lv8IeQLm53D4\\/dvixxeok9J3D4ntGXvhkTlmT6emL1rKlE83AA78h39kN1nM5cw98Pto3D1nr3e+D66uNvgPv6vFhOeZMIKOas+bLIdX6YvWr8H0n4Q3dXqDdxOYHV0n0ZxmoFhe3h4Q7CDq9ZWqOCT6yMwT8BCkhIzdWqEjSaeyqYnqnOStPk2E\\/Wemp19uXlmk9brzqEDPnPDeIak5AnojJnQpsgYkaYGjDZLzSn5O4MeMLZaqNpBKjQ2LypE9XlJyadGs3RpaddSVt7IFOb5ba13EvtgX1va4vYXPfbvtw431h1hpTzzTKTZTrjbaf7ZxaUD3nhePRwoNHkrCsejW\\/JFPzdZdqU+kSqlazaTJW5SGZKXKgt5ZSnYSSSQ5MKKTuLyiCqNJeljdZtHRi0irsW8pExR8FcUalLurzUXKmmza2qnNlWze8+ZqKpZoFxJSlTxU6dUKjdNibPfN2H94TIVs1\\/MU\\/LNuAqK0OTzJkUFKk+clSXJlAQoEFKyDwG+NzysN2otTQJx0dbmNjOV+Xs205BO7OYXXr8tmWqbAKm3MiaCKy6dwJSypIW26EOo4d8pMHE+17YRg4Aq85rsqp1N8w7Ov4kotOU44m31UIprylKUCEoDhHohUdxYaWml4PxlU0gJTLUuaDYOgvJU2adQ2k33qU8hCRe5JTb0rRCppbe2qdOa4hyelUnsLyAonI55AZndkd26O+1HM5+rsjpC1Wy9X6ekkkIcddOe4fQsOuJz386kJHWTxjup1eqndxO4fE+iPohXFXmGU\\/oslX+Osj\\/APQRxVNH0kjkm\\/tP3Qg6rWXkOCdw5+0+OYRkdoY2Z+qNphaLFhqQHGLs0iMGaDO6xWEt06oYiW8xU3lll+Wf1JaQXMPuCXmGZhSGVJYWH9QjGsnVGfPzdsbTORNsVN\\/8p1ot095CvI7euC8b7m3UpC9ibFw4vC6KUpSDMSy1CYr1MpUjm0p0smZ262Jhll5smHpYzlbpErYqEzVJBhQG\\/K5NNIUb62CUqJJOgFydBHko32sww2QD2jzTYB3ErWlNu7f749IWCCCO3oteCCCCCCIX\\/wApQslNL0o8Cr\\/aYbaRd+Ba7aedbQyjyuese+rlm3X3igJdemUSN6UyWL75WfJZaTYbIbYCRHOaXkdQnd+D0Anm9PviYF8pksVyfwU0YcTQ1m1aGKd6WIt4Dc2vEW0pK4G2ju4vJwtdVvXmdgctYZhEPUHPIj7c++OJ9rcl5pjqs2ADc2ZOcQBzekpbtSTxJmEPa63tzuIqvELZZrE3YHKtTbovoD2jTalW7s1xfjbujk0qyPUePfC4OWRHj9MMW16438R7unx7YcoV+CfR3ePgIrAixtx+O6NOoBQzD18+h8I3pclTcXleGWJ9qlYUqhXzT68Gyvz0N3PQmJBPmlJ1G1rtN4o89SSvakIQrWU5KG0R6oJ3C6ZkFLyXRbnqkqlBUTkxMSsjU21DMFKErfnJkHV\\/DSreSN8Pvkq7kXJ4n4l2kXg23XrGka6Wy4UIemLXrstJNare9DrzbN1TakjW2qGdvqoWjbKErXQuq51r8oa3M9ZNDq0s3v1swahJTqt\\/m79anjilWYJJXwa49k\\/\\/AJb8qypNAFtjE1NcKNwzec4flqi6CTwVUaU6EgAlS8oNrmOz8GTBq2xKkrUordpEw\\/Lr0vbzeqvtNAC+5ElNNXvuAOlrRCs5fiwhZHKd42z7cv5NJYh27hZfsk39MQozWHlv21VH0F5Cc\\/KbgtesPLDTj7KXnHG21t6nksviVZk75Za1uzSVayl0iQQ6rMnWdZl0MPZk8c3Wl58cjzk+dG6H5UThyul6QujJiwGFJZvbBy5rAVMAHUdmMNL0euJaFeaE7VDOKzGsSpSy0ptO5LSI0Y4RzwmbMkmCoqVIzM\\/KE57wTMLnEpOtxIbm0BOW4JyTzbu6azabwxR5tNyWVNMqO82DTjK1E6m+dhN7nQm28Ry1jCW7Cpz6CCP2c44BltZE1d9IsNAmy0BJ5WOkdvJUFAEcD7D0Hr6PtEXQyQsoV1HLPrG\\/h1j49cPAQoAg5g88QeIWpOU9x3RXx2RUEgg+CIpB2Qhab6jfx74TC4IIzEKpVnuPHmPT9vv7eLQEg+8dMLA5jMfo7YZIBHwPKDrrxh0CQcxCwIIzENEqz3HjzHp+339vFUEg5iGSCDYwlSc3cR10fHSHaVcx48x6e3x9qoUU8N\\/V0\\/b1w1BB4GFEq5ic+s\\/Hx7OHhF9DDW7uI5\\/K3x\\/W8BBGYhVK+ZR7D39\\/gtASOHjthVKgrt6PHNDKkka7x1vjyHYJBzB3x8df9h0HEi3Zm3642U6529PqDSEKnKXPISQ1OShUMt2ZbmGCpKZmXUthRQFBxH1aV5bjvHthUHnB9IhbD70q+zNSzq2JhhaXGXmzZaFpN0kHjrvBuCLgggkFSFrbWlaFFK0EKSoaEEbj1odx0j5jQs08cWeT5vWVwlxcaq156O9Wn3ppqnSakTU9aZnZxKpq7cPn5otrUxtSqYr1lzU1Kyr8w87Oygp1WmXpupzE8JsZLFxWtC3r0sq6aTdto3RJpnbcumjzQmKbVGNotlbbi9VLkrOy0wh6TnZabZl5ySnmJmRqEtKT8u+xEOW+bGt7EOgv0C4ZcuNKO1kp5nURPUycCdVucknlIWG3UglLiFJUy+0VMzCHG1KTHWWjTpX478nFiMumlt++MFrlqHlNbsqanHZeiV9lDaWl1215taJxFrXlKMKZROlLDkvUW2GJOrS8\\/JtUmoSdS7avJ9ou2+UmsTYQl5KhbVGGnH6hTUlqTpeNsibrmGVKysyVfUBmU+spYnVgioKQlXn8r0xsl2zv0NbFFrrjj9KulDa7Lcdp6QQM7KRdb0mN7kqnM6xYuSoUAth2eRtEfjCOKvWxrMxksWu4WYh05uq23cUmuVKc20Tco+g68nUKZNuIdEjVqXMIanaXN6qw0+0kLbcaUZd7FvRp0qMK9I\\/Dqj4hYZXQxcdsVDUlphDmzYuC06shsLmbdu6kJfemKRVZMLQXJd8uIelXJeo06aqdJm5GdeyqQ6hSUOtuJUDktC0LTkU5BSFJWknMHPMKTnlu4HcfldVaLXMI1lyTnWKjQ69RZ\\/TtG3pKoUypSLoUlWVQQ9LTUu6kKsSlaCAUn6qj2ghyl4jpagky1RptRlVIUk9nMS0zLTDZSpKh6TbrLrailQ1SpJUki+givaS+jpeWjLiVPWLdKFz9LmUu1GzrqaY2EjdVvl9TbM820HH0ylRllp8lq9IW+5MU2b1TnMyMzIT85j0Dzg9hHfEvHG3BSwdJ\\/Diew3vxssTzavLrZuWUbaXV7crjTS25asU3X1Ev5JcUxVqW8tLFUkHXWtow6GpuRi7Y\\/YA4h6NuIVRw9xCp2xmmdebolblA6uhXXQ1OKblK5Q5tbaNvKvahbmZdYbnKdNoekZ5hiaYUlP0a2F7ZpfaXSfoqsqak8a0dhCakwEpbZrEuEhLdYp6QEps7lJnZVH9Cv3U2hMs60EfPfbBsom8AVRU9T23JjC9QeJk3\\/ScVTXV+l9HTizdRCbnzSZXfzhoBK1GYbdB6eQ9luUM+scfSOfxuhwFBQzBB8c44j0xxoWDx3dvf+iFASDmDkYv0gjeIpWORCyOO\\/t4+v9MKBQPP6DDFL3MsekfEQsFJVwIMIKAe7w+XytBDqCEAojn9HHx6IUCxz7vd3++Gygjdr8fZ+uCL4qCRwMWgg8DnFYSRzHtgi8LPOM\\/ZF4WnnJHoz8euEYIOuuufGCGVWodDr8sqTrlHpdZlCCDLVSQlKixkoZEbKbadbGfSEg8eMdIXFou4OXBtHG7fmLfmXQoGYt2ozElqE7wpqRmfLqU2U5nLVkAk55KSoJTl35FQojnMbCRq1UphvT6jOSetymXmHWkK\\/t20ryOAnUhaVA8Qd8PNTMwx+0vOtdyFqSD4pBsfWDGDNc0JZJRK7bvuaYSM8pauUhmaKs8iP19ITUmEFI3KHze5rZ5+Zq5K6oquh7itIqV83v2vW28s0GTqsxKvK4jVW3UpCSbQvnyS+tGRTmvW1kp2fa6uo9o7sou2h5x8O+JbKbSsWyoCVzjE4lNgBNyjBJ8VsCXcV4qWVb9TpGwbrdQb0LqHQODjaT70BCj6yfhGqiRwj0mbLJTQafeVEADiUrta7WWUlLygpwgUSu6yUvKaSpwKCCohG2SlSkZfSpvDTno7TIlr70nZRun7FqVbpl8YlLEomXKG5dMm1T6wtTbcuUNpZVKoKGkoSpKktp1o2Z7Qc4Pv7oNcdB9nfGW7tGXOnNU8L4ZqC73Ut+QK1Kv9bWYcmTdQuL3I1OhjZMYtqkv+1KDXPsHZhm\\/+I9wIuO\\/feNdP6v8AyjP+GvTX\\/ORjr\\/8AGY+aF4acFTln2Hb10nXpZ5tctMy8\\/eGJrLUww8goeacl52qNB9p1BKHElCmlJK0KPnFJ2ea6en2Hug109PsPdGK1jOkS9zK4BwhLqJSSpqly7dykgpKuzl0ElNzlJV6JUSNbmMx7HdefAD05OPBIISHqhOOgBVswAW6bBQABtvsL3taNUU7h\\/pQ3QgJrEtiTV0OSzjOpXrlnHU+TPj6aXUir1gBDboUAuWWBrBStZCszCElorY1zeW3tmSpySQAqduGhKASUk6xRIz864N5AKSkOBR85GrmobZNdPT7D3RTXHQfZ3xnjanWWkFuSpdDk0cEtSkwAO8JTNNt314tnW+gjVrxJPLJJQwSd6lh1auW8u8tNQY1nU3QzxLmilVQrVoUxs5BSRO1SdmUjzCPoWaQmWUBmpO+cBK0av1FJdj7ym6Ef1V1jEIZZAKl6Zbu8nzSSmbmqtuA85IzkiSdVeY85EZ67QcwPu74ptDzD490a+Y2lYufvknmZYHgxJSt7cgp9p9Y000UCOBBjGXXKivc6lv8AtGm+7S60rPDnpwtGJtL0NcMpTVVUqtdlXcGWshc9T5KVOQTnk3K0wTAKlBZ\\/8MICFJQM1J11djUvRwwXpOqWrIk5xxJzLtVnqrVNchRI1mZ2felQADq6qJdCVAArSpWsT3UVq6h6O\\/OKFRPOY0MzivEs3cP12pkHelubdl0HdoW5dTSCnTcQRoN8YjlQnnPrzb5HJLikDhwQUjgOEfOUyxbIoaUJpFoWvTAgDIyNCpcqvMADWLjUqhxayANZxalLUrzlKUrzo+n10jcOAyAyGQyG4bt3NCUEaR1559Wd9515evpuuKcUb2v6SyTrYXsbGMRSlLN1KUo8SolRPrNz74vKzzDL2xaSTxMUghuPIIIoSBxOUWlY5t\\/u7\\/dHoBO4QRfFpUBz+gQkVE8\\/o4ePTFhUlPEgQsI5+z5n5e2CFCsnhu9\\/r\\/RFhUEjMkDxzDifRCCnuZA9J+AhAkk5k5nrhYAG6DrrrxjBrHXBWq2tWUYt4VrnKVNUmoS1wTspQ3XZGpW9VqdMNzsvc9uvSam5iW8knGG594SqkTFOmm\\/LpVSZYLRJSMuS15SyX0j6JK4a4jT0pTce7UpTIqCXnZSUksWaFINlL1y0aVSWUs3LJMt+UXPRpVjZskqrtKSmlzU\\/T6JqvUoDoVmOB3joyPo9PZuMYSYs4TXHhxckljTgtO1O3KvbtTYuJxu3XnJKp21U5J3ylu4LfclcnWZZlwF6ck2hlKJ2jjaFU9T7EnkYzwdhzbfhNOCsXrakq9Ioc\\/A3FriO0ekZpxKEin1A3S5MyE5kaaeQpf5TKy8kpnpWWeNz7KNqdRwLWEKJMzTpoNy9RkHHMrM\\/LJNkJKiCGZ2XJUqSmgnMgktLzNOOId9AOn1OTqko3NyrqVtuA5hXmuMuDett1JCilSeBJOXBSCWlIXD\\/AGiPxhGivkzuUypGk1R5exb6madb+Plv05Kq3RUlqRpOJdJkWwZm6rUYzS2xVWG0GYuG3pf6SnOa9UpiHqG9NylI3c0+pyVVlm5uUdStC9ykKUkLaVwU04jWBQtG\\/PI+d+ytazYSqPkRtG2a4k2aYln8M4nkHpKekXbXN1szDDhJYnJV\\/KlEzJzKElctMtgJcAUlaW323mUfQ+i1il4ipUrW6JMibps2n0V2CXpZ5IHayc41dRYmmCQlxtRIUClxtS2loWrm9oj8YQbRH4whjmOkesQZjpHrEV72Q5L6\\/wC749DXZQ+2iPxhBtEfjCGOY6R6xBmOkesQdkOS+v8Au+PQ1IfbRH4wg2iPxhDHMdI9YgzHSPWIOyHJfX\\/d8ehqQ+2iPxhBtEfjCGOY6R6xBmOkesQdkOS+v+749DUh9tEfjCDaI\\/GEMcx0j1iDMdI9Yg7Icl9f93x6GpD7aI\\/GEdM8rJhoccOT3XiBIMCcuLBeu2xfRU2D5Y5TmH3bFvNlG5SUy7cjWTc86hxbQVLW+h5lxRSyy92xmOkesRkVhVTqBiZh7ifgtdbaZygXfblcpNRklLbK5mgXXSZi3LgZaQ4lxIDbMyyWyptxAenCvIEjaddeRpiVqj7UJrDE28WpPG9CnKY2FkpQavTm3KjTnCojIFiXRU2GQtJKnplpCDmVlcq3a\\/QBXcHTzYSC4wFWURfIiYAZzgb\\/AMnMGVeJBFktKJ0BIgGkgDMwiSSSfAEdg4qYe17CPEq\\/cL7paLFw4fXdX7QrCdmWkOzlv1KaprkywkqcCpWcDAnJRwOONOyr7TrTjrSwuOve2Po6tpaFqbWMqkKUlYNvRUk2I0OpBBHjuuNY+ba0KbWpC0lK0KUhSVCykqSbKSoHcQQQRwIg8dsEEUJCQSTkBzwoCwtyhMUUoJBJ4D2noHX0\\/YYZKUVEk9vUB0eiLnFlauoZ5dQ3ces\\/Dqhq65kdUek\\/DvhQBJsIcACRc7zw+z59XTdc1jkD5o9sIKVlw4n2eObm90VJyGfq6z1emECcySYyW0ewe89fKBIucx56ePyHW6KE5DM+jrhEnPMnx+iKqVrHqHCEVq\\/BHp7vHxMPQ6Bc26EWqVmeocO+Gjy8\\/MB3cT2\\/ZCjq9QbuJ93T49kMycsyftz74cQk3ufVz5fcP1QtRtZI9f2fPoxRashlzn2c2fdCBOQzipOZJMIKOsezh39sZjaPvPPu68YUkWHfxihOWZJ6yTDFatdRPoA6B43wq8vM6g4D63b0Q2UrIdZ4RkAXNucK6Pu6\\/XFi1cw5uPX+j39kbXeRLsX7tuUZwWfdllzUhYtLxDvyoBLa1JZ+bLEr1Jo8y6tH7CmXuSt0N5Cz5qnkssE\\/TxqeJyGfgxIu+TgWCuraQmkFiiuXS4xZOENGswPLbKhLT2I14SlXl1tLKShl92Sw2qLKVAh0sKmGknYqmEqU8oNS7yv0W1ag5TmUMqSDrqCQQOJAEb3DMv51X6S1a4E6y6RbMCmXV5woKHFJS0Qo8N+kSndISoJk8Np2XWvV+dapSZBAOWS1tzPzoUjPn1acVk8c0jnMRSeXcvEUjRew6s9lakTN54y0yadT9Jqu0i17UueZm0HUKUFQqlSoTidrrDJtWq2VarjMnnShqOzpdp0gKJM1UKjUXATuHkMuxKt8d+Z+clhI\\/cuZ82UM\\/l97zE3fejth22tINBtO+bzmmwlQU4LtrNEock46orIWGvuLqKWAG0KbLszrLc10Ib4mDYxd5amDJEjOzhKmS7r5AJ7H6NoNVxLL5zqCTP1OVSCk2Sp1IIuFX64rz30XserTwslyqPJZbBt6XnNQlJJ0C3ES0u8Re5OW\\/EW0S2K1tKw65vHk8k8sE5fWcW00Ad+46inDnvAIEdoOL11E8w3Dsjr6xG9UVN85Zq8mYSd31c3luDhnv+iz39PNH3ilZDrPCPoFVVZ55xI\\/MS2gf4gWfYVG\\/gY46mNXSOQSPaAftvFizmcuYbvTz+2JD\\/yaOw03Lp13\\/ec00VyuHGjzds5JvAKyZr9z3hY1uyaVqLKm0tu0GYufcHWnlOIbDQcb2+pHcJyBPREvv5LTh8GqLpgYrTMo4pU9VcJsP6PPltSW2xSpS9bkuSVae\\/Y3Vums2o9MNZhculiXVwmYlmziT86xhRklN0sOvTKjut5tLPPJV\\/lUti3NQ3akbGjtdpUpNHBLhXru\\/JIU7fnvRp3ncYlvQQQR1zFjwQQQQQRpt5eHD1V88m\\/inVGmTMTeGt24Z4gSzTZyWUNXhTrOqTwQWnApEpRbxqc86CuXKWZZ1zbKCfJ34CaVZHqPsj01tNrDtOLWiBpN4diVE5OXRgXibI0ZktB9QuNm0qpO2y+hheRcdlbhlKbNNICmnFONJ2TzTmq4nzJUqzG\\/iPbHLW3eQLdepM\\/b0JulKlybjVySmnFq0GtwicaFzoRltuUYr\\/FjITPMu20elkhW\\/VbbiwTfd9RTYsDwud4h2lRSQQftH2w9SoKAI+0dW7du\\/THGoVzH0d3d+iF21lCuo8R1dPbFBrRw4jceY69\\/HfESBKDY7utevsjN3QDur7mtKLD1Li1ty1xN3FbE0W8s1\\/OlAqDtPQpCiAtK6xK01Kxreblro11oShcunRLrZp+K7dPWopTcFvVemoQFaoU9KiXrSVFOeqtaGKVMZZjXQhx3pXEIPCm6RZOJ2Hd5leo1a17WtX31a5SlUtSq1Jzsy2sj+9uy7Lrbo36zalpI3xMiwgrhoGKFi1IlLbaLlpspMOKVkEytTeFMm3CRlualJ19zM8+4g8Dx1tzT+D22PZdiwJ7NmZMlJTDgFszdOrGWdVe4PaeY1pKCToAlAIMdZ7Bpn6RwLjKhXzrlJtc20neUmoU9KWQN4ymYpa1C2uYqOlwIw++U7Yamv6JGB+KUsyt+bw5x2FuzK0M6wlKDiNZlfXOzbz25TLQrdl2zJav1HXp5nWOslIMQbA+d16fXqfnl5POSk4lJVzzjDjKylPHd5C3modKQrmJ9Ablp8LziryZulJSmJQTdStK06NihTXNUrdkRhnd1BvOuzjOWeofuTpNwyb6yClMnOTOWqrUU355WDE\\/5Ncs3JqUAiepbuqnL678q+y6gZjgAwZk59OUdw0hzz\\/Bs8yLlclMKKQreEpWxNE8TYpcdAJ0vexsNKW2iSmSourAH7JlJeYuL2zNEsqB4FQQym4G4FPHWMrGnNYZH6w9o6YdNuFBy4pJ3jo6x43+2OLSeBBy6IdtuBYyO5Q9vWPiIh602N7afA9fKKuBv6Kt\\/A9ceR4\\/HlYIaNuam4jzfd2D4Q7hEIII3wRUEg+8dMUghtSb6jfxHP7\\/j47\\/IXBBGYhVKs9x48x6ft9\\/bxaAlJzH2EfEGFgQR7x0Q0QCPgeUHx66MOgSDmIVCge3o8cYaJXluPr8ePgqDzj0QyQRvhJSFdx68LiHSVEbuI8cIWBzyIPWCIaJVnuPH3\\/b1QoFZHd6RHkNEW0I1+zr7b9zxK89x49PT3QoFEcPVDUKB7eiFAsjjvHthtSOI9nyjyHgUFdXSOjv8ZxwN0WvQrxo03QbhkGp+nTicihfmvS7oz2c1KPpG0lZphRJbebUk7ylQU0txtXLg849cKBfMfX39HjhHjbrrDiHmXFtOtLSttxtSkONrQQpKkLSQpKkkAggggx6lSkKCkkpUkgpUkkEEbiCNQRGHli3xj1oCYny+JeEtwvzFuTjyZOpS04y\\/M2xdVKKw59zd80Zl5tnbb1iQqLK5abYfSahRZyRmQ+w1LM0HeUOwm0uLSD9rzQoF\\/UaSYmL5worM4yq4KCVrbZmKxb7+qym5LVXNuBpmsSLLZZVMSUtXJChVGfl5VUfCfp8jVZGaptSlWJ+QnWHJebk5ppL0vMMODVW060sKSpBG86wzBAI1SAYwpu3Cu\\/8AA+66fi5gVX7gok3bk2qqyUzQZ2Zl7ktZ5La0vrlH2CXalRnJdx6XnZd8ulyRffk6lLztPdmlq0e0rZZgvb3Tks1wy+HNocrLhikYvaZQiXqwbSAzTsQNNhHbtqPosvpKX5Vas0m4G+0p03duzPa5VcITSJZ5apqmuuAvyS15EKJ0U\\/KLN0y00d6kZfN5qwS4lKw0436B0jPsTbbU1JTAUAUrQ4hWqttxOSslAZKQ6k5EozQridyVpEMMZ8FsNdLLDyYw6xIk0ytYlA5OWtdFPbYRXLdq5aS2mqUZ10FK0TAQ2zWaM+oSlWkkZENuy8lNyOgHk+OV6tjGR2i4X47TtJw+xjdSxIUy5HVy9MsPE2a1ktMMDXcbl7YuydzyRR3nG6VVZ0rRb85Lz09KW23v1olxStT1Fy7ipaea1XFM65Q4hSTucZUNUrQFDNJSErQc9olJ1RHzCxdgbaFsLximVrEpOUaqyDyZmQn2FEsTjDbhDM\\/TZ5CeynJRy6gHBolRclZ6XZeD0sntqSqOFtpWH3W0GXn5KcaVLzcpMIBW0paUlcvNMKOdl0EBQAUTdKZiVeUkNvRGJ0l9F3FDRavhy0sQKWpymT6pmYtG85BhxduXdSmHdRM3Tpo6yZWoNIWyqqUGZcFRpDj7O3S7KzEhPzmOIUR2dcTTLno+GuPVkT+FmNdvUy4KFVG220OzgVLlubaSRK1GSqMuWpyhVyVUoqlqtTnpYqCnmFuJbcdl5mPlpm8mPino3u1O+cPWapijgogOT6q1KSyX7rsySJ2pZvOlyTSdvJSjRIVdtIl00hxtpyYqkpbpWzLL7r2WbWaZj6nIbfcbaq0u2ymZuEttPuKGUHsyby0wpSVAsG7Tl0uSrriF9m3xBtP2M1fBk0\\/O0pp6foSlLcCUhTs1IIGqg7lF5iVQDcTaBnbSCmbQ2UB13WGFjn3e2LwecHsI74bxUKI4GLfKAdUnr4iKOh4l5Q+t5w9R9Y7s+uF0uoPE6p6D38I48OdI9Xd9sXgg8D6OeEFJG8QRyIPOD6RFwWodfbHHBSk8CR2GFQ+ocQD7ISQDvAPjBD7aDnB9\\/dF2sk849O73w0S8g8c09vD1j45QoFJPAg9hBhJQO8QQ5ghvmRwOUXBaunPtA+GUJLZ4EevT5wQtBCW0POB7u+K7Qc4+PdHmRXL3iCFIIs1x0H2d8V109PsPdHmVXI+yCLoIt109PsPdBrp6fYe6Cx5H2GCLoIt109PsPdBrp6fYe6DKeR9hgi6CLNcdB9nfFNoOYfDvj3Krl111oYIUghLaHmA9\\/dFCtXTl2AfHOAIV4eJ\\/XBC0WlSRzj3+6EcyeJzihUkcSB2kCFBvmfZBCpcHMD6d3fFpWo9XZCCnkDhmrs4es\\/DOEi+o8AB7YUEpHD26wQ6J5yfSYTU6gcDrHoHfwhoVKVxJPaYtKgOJhVidwvBCynlH6vmj1n1nuz64SJ5ye0nvhMudA9fd9sWFRPEwsIJ7vjBChWObf7IsKiezqi2CPfQT3n2\\/d9sEEByOYIGR4jiMjzb+btgJy3mEyvo9f2eOyC6lHTQc\\/v4+H649SCTp7eX3xiHidg3cVn3HI4w4HztQtq67dqTVwpkremFU6oU2pSCvKm61a7kqULZmW3EBx+ltgtv6y\\/JUEKMmvftybnKm0XH1qlYXYtTtPtPSAlGvI8nky1JtzFlqWCiqaoTWs23TbvS0hxyr2w02yhxaV1S20qknJ+j0DWCTzk+kxjLi7gOzc84LzsN77nb4k30VFKpR405iqz8q4iYYm0TLCml0yuNvNpdYqbS2w7Mark2pt39eo8xnhHCm2HDreF8dASlQkWlt4Zxo2yl2oUZ1waSs\\/fKqfpDqsvnEu64m1kupcYfQ1OS1xbMtq1awBUQptzzqmTJQ3UKdMLUJWdZSQB2hAUWJloX82nkJU4wSUOJdl1ONKnY0isylZlg9LnJaQkPy7igHGFqz81SScik\\/gOjzF9SypMcxmOkesRFp0DOVxqVDqdMwR0wZ+aoFzU55ukUHGSptmWRMqBaalKTidL7JKGHlZANXuguyE+2th24WGFtzVxTkli174pNxSkq83NSZ8tlmJqSm5WYbmKbUpaZbQ9LTVPnG1uMOtTLS0Os5OKS4hSVsuvhWR+W+1fYzjLZJXF0vENPV5q9mepdVlM0zSqtJgjLN02dCUpfayKQp1paW5uUzoTNy7KlJK\\/oPhbFVAxpTE1SgTYeSlKPPJFwpE\\/TnFpCg1NMAqJQfSDMy0XGHwFFt1RQoD77MdI9YgzHSPWIQgioM5\\/R+Pd8\\/ePXI+zHM9dHoar5jpHrEGY6R6xCEEGc\\/o\\/Hu+fvHrOzHM9dHoar5jpHrEGY6R6xCEEGc\\/o\\/Hu+fvHrOzHM9dHoar5jpHrEGY6R6xCEEGc\\/o\\/Hu+fvHrOzHM9dHoar5jpHrEfaYeXUbOu+j1ouESjT4laolGsdemzYEvOKKUpO0LKVCaZQN6n5ZoDLMZfCQRtqDXajhytUnEFKcLFTotRkqpIPalKJqRmG5lkrSLdo2XG0pcbJCXG1KbVdKiDjzUkzOS0xKPjOzMsuMOp5tuoKFgHgqxJSrek2I1F41Lcu\\/oxP2fi7aelHa8gV2hjBT5G2L2m5RsuS8liNbVOSzSp2YdQlLTDd2WbKSSJFtCnVvTlqVycedKpxpMaCInsTVkWDpbYAXtoyYqDWl61RBJUyfRs11KnmQWict246ItagBWrPqsvJzSGVENTckw3KTiZqTmKk2qFNpOaNGJ+ifi3cOEeKlJckqpSX3ZiiVxlp75gvS2XZh9mlXbbU44geWUiptMrzbOU5TZ5ubo9VZk6tIT0qx9qcPYkpWP8J0LHuH1pXTq9LJVOS6VhbtIrLf5OoUyct6SHmJlK05lAJe0fbuw+wtz5u7VsGTmFsSTyltK80mX1LDqUEN9qv0u0uLpyTif2Q2b\\/AF1PNGymVR0BDNxwrOXBIO4dPWfG72xVxzX3Aeb7+0fCGrjgQMhvUfZ1nujNAvoIrAAJGZXqHXH4fCjrmqMh9Y+wdMNScsyfT46YCeJPphFSiT1Dh3+OEZDaOHrJ+z9fee6PBdZudw6t48z9wgUrWOfDoHMIQWrPcObjFVq5h6fHjuSUrIZnf0DnMZAG4DSHQOA9UUUrIdZ8Z+O+G6lBIJP2nq37t\\/6IuUeKj2nwYZOLK1dQ4Dq6e2FJGbwHvPH293dDn1Bb849ezl3+uLVK1iSTx9QHR2CEFKzPUM\\/TFy1cw9Pd3\\/phFSshu4n2RltovY+wbrDn7PdAhP5x38Pn64tWrmHp7u\\/9MN3F6id3E7h1deXVF5ISCSdw4nxzmGKlFRJPP7BzD0RlAWFocihPEn0wgSVHPwBFy1Z7hwHvhFastw5+PUPth5CbanefhB0YsUrM7uA9vX49kTEvk5GHyqLo0434mPNbJ6\\/MZJa2WCT5z9Kw9tKlzUtMADNIaFTvmtyyTrbTaykxm1qBtTsOhxeondx4Dd44R6AnI84cKw05OvR0kpiUTK1K7qFXsSKkveFzqb+uuuXJQ5tRKUjM2pN2\\/LpBTqlqXbIWvepWurLvYyJvf8q622LAHce111BtdsDS+psbAxPNnkqX6\\/25HoyknMPAkG2ZeSWAvuBIfWRc2ISo70iOz9Jip+VXvTqeleaKXQZcrAJzRNTs3NvuZ78s1S4kzvy3b8zvygpcsrfSrv05bwpKJpMyxh1ZVg2NLqbeLzTWvRvu3m5VKwpTaVy9SvSdbmGkHJmaS+06EzCXUCbNi\\/VBV8SbumUr1kM1RVNR+KBSGWqYoI4ZJLkotWQz1lKK+J3+ebpbX83ifpP4\\/X3LzJm6fcWLV8zFGmMgC5b8rX52QtzMZDLVoUpTkEcSU62+ORvJiZ\\/Cnyj9rmMjd+WpEnU6bKPaqCVzlZlKfTnAsg2z0uiTaUJB+opQTdKI6F2xPinbP8J0cWQ5OzTE04m9lKRKyLjj6Ckb0pmZ5lRPApRxUY+SspnZ0dTquMxNvuA\\/uEJbZA7EqaWfSeEfTqOsc\\/UOqOLobXk9FprXAmVbeUMsiDMZzBB683Trc+frPIqOQ9gjuqYV2k0+5+m6sJ\\/tQopT7QB9kcnK1cWvmo28BoD6wP13ixZzOXMPf4+MT7vk42HS7M5OaTup+W2asW8a8Tr6lplTakKmJGkCgYXI1HXAAthifw6qKEBpRabfVMjc+p\\/WgGKVqpJ9Q6TzD1x6eHJjYZnCLk+tEKyHWVys21gZZF0VWUd1EuyldxEp6cQ69KOhCUI2srWrpnpdwp1s3W1EuvZB5dt7H5LtK\\/OzZSSmTpi0g23PTT7KUnMdxLTb4A3qFxewIMgw23nnlrO5uXWb33KWtCQCOIylZ8QIzygggjpCJxBBBBBBFi0IdQpC0pWhaVIKVpCklKhkQQdxSRxHBQ6QY8trSGw4fwax+xtwncQttWGWLOIdiI1k6m0l7VuyrUWVmEDVQlbEzKyTMxLOoQGnmHGn2M2lpz9SiPPg5cXDBOGXKRY2OS8uqXpeJUhY+KVKbUgDXVcdp06nXE+F5JDombyodzTCFBKdXaBhWu4yt1yj9uch21BpNRCbmRqa5dR0ulqel1qUTfWxdlGUkC+qgSLC4iWLWc0tKv8A9afW3x3PIzeFrsjU8SAN8anQdYA+BCyVZ7jx98M0nVOfTxy5\\/tHjKFweCknrBEcruI+48u7rx4RAlC47+EPmnNXcfqnn6D9sSycBLycvHBzCm8Q+ry6q2Na0\\/NPJVrrTWGaVJt1TJzfrqaqjMyArNKlBA10JWNQRLkq1h1jj9kSKOTdu\\/wC6XRnpdIcdC37Fuu5rXUCfpQxMTDd1yqnNbMrbS1cplmFJ8wplvJ0+cwsI5U8qujKmsG0OtNpPbUavoZWoXu1K1OVeQ44FDUfsqUkU6EXKgb3Av0F5ONT82xZVqS4bIqdGU6hO\\/PMyE0ytCbcf2PMzawdfqkblXEom9bXpOOmCV3WTU1pRQcYsLK9a1QdaSFpRSMQ7SmqRNqSDrBYElV3CASSSBv3gjytrbYnrQxIlqRVmVydSpFwzluVSWWN8tPJemaLOsOa24bCZK21kgaika+4pzHqS6NteNdwdtNS3EuTFJROUOYAy+j+bJ59uTb3c\\/wA2rks+nXJzzOcedFyquFkxgZyjmlhaSGESbTuMNWxIozTKEplmaVis1JYrUdmVCFKbDElJ3exJBDZJYXKql3Aw8ythHSWxytIxFQiSvMK3h+nVMAkeiqYlUpmNCSbpXNtpXvyFFjrvxtqdKMs8gZbCWnJ+nLNlG6Sbs3J0sUsuqTpdQUSCQNGaVEHpz4jxz++FgcsiD1gxx0pNNzstLzTZ8yZl2ZhvnzbebS6g55cSlY4w7SrLsh9xBuQRZQJBB5g2IPhrHPy0XvwI39\\/cY5FtwLGR3KHt6x8RDptzU3Eeb7uwfCOKBIIIO\\/mMO23AsZHcoe3rHxEYik21G74ddd6QQfRVv3A8f1\\/Hj38rBDRtwo3Hen2js6ukeriYdAggEbweEIhBBB+B5xWAEg5iCCEKTfUb\\/j113eQslWt29HT2QolRG7iPHCGsKpXnuPoPD1+B3tEX0Igh0CDwhVK+Y+vv7\\/0w0BI4QqlQV29Hd0wypJGu8db48IB0I8D1940h1CqV8x3dfT3e6GgUR2dEKhQPD1c8JhopI36ju60MOgSOHjthUKB6j44QzSojs6O4wqFA8PVzwkpB8efW+Ew6CiOHqhUKB6j0Q0SsjjvHjh9sKAhW8e3iO2Gykjw59boIxfxf0b6ZdJmrishEtRriWVzE3SvNYpNadOa1qby+jplRdJP0yR5FMu5Gabl3XXp05aaFPKu4maOdQp+Dek+1cd2WDSFy9KpN1PpfmcRMOmEFKJdEw46TMXnaks3kqVYceXXKfIKR8zVCqU+Vp9Djjgsjjv7ePr\\/THX+IOGFp4l0\\/ySuyezn2W1Jp9alEttVSQUc1BLbxSoPyxVmXJN8OMOZlaUNv6jyNjVG8NY4oRwjtHpKcQUM38ynfq1mhPlIQicpk8AXm1tJ9EpCjnauw8mZlCqUXNcJY4rWE59qckJt1pScqFEHOlxkKBLEyyr0JmXNvqL9Ns2cZWlxDZTL+wnxwsfFW1KNd1q3PRbqtivy6Jij3XQppuapk63nqqbmC1quSM3LuAsTkrMNMTEnMoclqgxKzLTiYy8s3FKq2+hmnz4+eKGQEhh1YXMS7CgQBJzCswtgIBIlX9owpKdRpUsNYx562EuMWktyfl6LuGw6v872FVpuXNwUGcTNTlhXcylTaEt1ml7Uu29caGEIYk63JOS9UYAMrL1GpU1U9IzEobQq5SHBzSnpLFPt6pG2sRJSSVM1\\/CS5Z1lFwSiWG0rnp+054BqXumhNqKlGdkENzUswG3a1RaK5Mshzgzal5O2ONjk05jfZ9U5jEODCorbrlMbCnZBgqCvNMSU1IWiXQhWVC5hba6Y4sNqcFOmVok0dw4G2q4bx9KM0urJl5WpuBKUy7iz2Uy5a2enPkhwu2JJl1KRONgqSBMoQt0566RXJi6NmlDL1G9cG6hKYNYozLZmpxFEkGhZ1YqC0hx1VzWO2qW+bJuacStp2uWs7IMuTDs1U5yQuOaVmrQzpB6AGlJo2vTk1e+HFQrtoygW6nESwm5u7bLclGzkZydnZWVbqVutFR1UpuulUF51W9ppxrUdckXUO4WplTVSo0+8xMsKCkqlnVy05KObycy0pLjShmUhxCi2vLJoqTmIyBtjH26aQlqVrctLXDKoASHHFCRqKU55AGbZacYdyTnuflFuuFJK5k5GNvgPymZBKW6ZjqUfpjzSENmoSjTs1JFSAkKW9LpDtRlbjTI23PouCoKaFkCKY38nej1pbs\\/QFiTmXSXCGA02HCo3uthWSUfJJKlOIXIuLP11rOsQgIImn35hFoJaQSHkYp4I2nJVueLhmLkYt9Nq3E9Mvqz2zt5WE5IVyZCHM3W1VibMu25tCtgsvvbbX9jdyGVnXLS5u6tFTGBcu84hx+UsvER+XrtAmXc3nDKU6+relkVClNoRsmZaXq1AuB9TufltZYQCsdUYYxHhzGTanMLYhpFbUhrtnpaUnGDOMoukEvShc84YsVJ\\/b22iq\\/ohVxfmbEmxjGWHApxyV87ZCilCkIXLursLnKl8Bhw8ky8y+o7st9DGzClDhvA6d46uyLtp0j1d32x2Ri7hDiLgRiBX8L8VLam7UvO3HmWqhS5pyWmWlszLKJmRn6fUJNyYkanS5+WdbmZOoSEw\\/KPtLBS4XW3W2+s43LiOzWUOpKFgkFKgUqSRYEKBsQfG3ssTVLrTjDi2nkLbdbWptxtxJQtC0HKtC0KAUlaVApUlSQUkEEXhYKSef17ouhvBDeQHcfgfhaG4dBaxwUfScx6jmIvDyxxyPaO7KGmsoc\\/wAffFdoecD3d8eZFdx674Ieh\\/pT6j3xdt0dCvUO+GW0HOD7+6DXT1jtHdnCcquR6\\/X1YwQ+2yOkjtB+GcXbRH4w9sMNZPT74rmOkesQWPI+yDrrf17IfbRH4wiuuj8ZP8Yd8MMx0j1iDMdI9Yjyx5Hr9Y9sEPtoj8YQbRH4w9sMcx0j1iDMdI9YgseR6\\/WPbBp0fu8ehq8LyOkn0H45RTbo6Feod8M9dPT7D3RQrT1n0d+Ue5TyPsgh2X+hPrPdFheWeGQ7B35w2Lg5gfTu74oXDzAenf3R7kVy+EELlazxUfXkPUMhFsI6yjz\\/AA90WwrszxP2\\/KCFipI5\\/Vvi0udA9fd9sJwQWQN5v13fbBFxUo8dwPoHX2xbBBBnA0SOvVvgggi0rA6+zv7s4sKyeG4eOeCy1b9B1w58dfdCggnu65QoSBxMWFfQPSfHjohMnLefbz98JlY5t\\/WfHdC0tg8L953dd2phwIA7+uUKE85PriwrHMM\\/HrPshMknjv8AHsiwqA4+rnh4IA36+4DroQqLySeO\\/wAeyLCoDrPRCZWT1DxzxYVAcT6Oc+MoWBwA9QgjrXEnCq1sTJENVeX8lq0u0pFOr0mhtM\\/Jk6ykNuE5JnpILUVLk5klI1nFS7kq+vbJro+aZ2kzoCVGTtetocxYwGU+WmrYqc\\/MiTprLzpcU5ZdfW1OTdl1Aq2jjlCm5ect6cddnHkUtc4+Kwz2KpZPDcPHH7IZzctKTsu9KTsuxNysy2pqYlZllD7D7Stym3mXUqbcQobilaSkiNk6um1ajv4ZxZR5PFGGJo3dpNRCiZZyygJqmTiCJmmzjedRaflXG1tlSy2pC1lYk+GcX13CVQYqNFn5iTmGD6C2XMqggkFbZCgpt1lwgdrLvodl3QLONHeJFOilyhGBmk1S5b9Tq9JaZr6ZZLlSw2ux1ii4i0UNtbWY1KY5MPityMoj9lqlBma5R2gEMKn5d\\/WbTn3TLipVWKRLzAQ+cs5V8hp\\/M5EJQgnVePUytYGfXEDu7dHGU+cW7lwyrc3ZlwyUyiekGGpuaZk2J1le1ZfplQlCmqUOYbdGu09Lqm22lBHkzLABUnKXCDlR9MHRsmJK38dqCcabKZW3Lt1K45gyN3IZbSUN\\/NuJFMl5+Uqrh3zMw3ddMrdYmiENOT9OClrTyfj3yNJWrqfqmyHEDU8pYW6cIYheYp9caUbKDMjPqLdMqoBJAL6qcppAHbTsy6So9k4J8pKi1VLMni+UVTpshKFVWmtqdl1k2HazdMClzDVhdTi5Bc4FrUAiWYQAImeQRqD0cOVc0ZscDIUmSxCbsa65rYMCxsWhL23PPTTyUIEtRrhcm3rbrDjz5cYkJSSrrtVeKG1Lo8up9ps7NqbfNInAhMypUgtYBSpZD0qsEZjVmG0jIH8ZxDCOPnZceK8V7O8Y4Jn10zE9AqlHnE5ilmekn5dbraCAXmA4gJmWTcZX5VT8uoWKHVA3joqlVSl12VE7Q6lJVeU9HM7IzDbxaUoXCH2kntpd2wJLTyEOJ4pBjsaCOKaeZfQl1l1t5lZCm3GlpcbUR0LQSlXgb4ViFqSU6HQ63BBBFuBvx5jhGdHIQRx8EJgjkII4+CCCOdptSn6PPytTpk09I1CReTMSs1Lq1HWnUZaqkqzIUlQJQ60sKbcbUttaFoW42e6sQ7J0etOfDxOEWkXa8oaujbOW7X5NbNKrdEqz7aWlVixLkdamHKJV3djL+WUedbmqXWAywxOyVZlteTYx4gi5dj22\\/F2xyrOzFGLNVoFRWj6ewrUlLVS6q2EdkXUEBapCopZ\\/Jsz7CFGyW25ticlm0y8RTFeDqPi+QXJ1NlOfIpDUyEJWtsEhWRaF+i8wVAKU0u1lXW0tpyzgj6acvJP6QGh89V7xosnNYvYFyy1Ps4j21TnTUrXknFhLDWIdtsLmZu31NKUJddwSq5615lapYu1GnT843R2dURJJJJ385ifphvpEV62Eoo12tu3XbikeTqMytLtWk5ZaS0Wmnn826jLBvMCRn15qSQlqbZaQGhhBpX8jjo16WtOqeJmirXKBglic+XJudoMpIuM4XV+fdC1KYr1pyEuqo2BPuuhAFWtWTdpZR5TMOWlV5mbTUE\\/T\\/ZxtE2e7ZZQPYGqqZHEaGlPVDAtadalq1LBCQXXKYpS+yqsik2ImJZxxLaFI86Mo8tMqniDH+xGuYXdcmZBpU1Tiq6FoUVtEEiyG3l2La9bCXm8jhyq7J6Z0iHKpWe4cPf48dSKlZbuf3fb1eDkTpG6KuPmihdyrNxxw8rNnzzrjvzNWFtioWpc0s0ojy22LnkttRqyzqJS48zLzXl8jrJZqcnJzALAxxJ5zExdlnpVxTD7LjLyDlW06hSHEnT6yVAEXGoO4jUaWilHGnGHFMutracbVlW24lSHEKG9KkKAUlXcRfjxihIAzMIqOZzP6BFVHM8OHD08\\/phq65xQPSfh49ENgXNh6z3afbu6t6AEC53nh9nzPRtdc1tw+qOfpP2Q2UrLcOPuiqlao6zw+2ESeKlHrJMZLaN2mg3d5698CRmOY7vj9w6vrFCdUE+DCBOeZMVUdY59HDPm+0+M4auuZ+Yn\\/AIx+Hf6unPMSmw13nq0ORa6vXOQ+qOHWenu6u2G6zkMuc+6LiQB7h0wgTxJPbDqE3N+A95gHv4W5xRRyHXzQgTlmSeskxVRzPVzQ0dXn5o4Diek9Hoh5Iue7jHqRc93GHVOp8\\/W6nIUilyz07U6rPSlOp0kwnN+bnp59uVlJVlI3KeffdbaRkcitW7MmPTuw0tCmYRYSWDYEqWm6Phjh3atnyqmswymm2VbUjRWlNFYbcDSZWmAo2mqrV+tvJjz4+TVwxcxf08dFuyxLCblW8WKBedVl3EhTL9EwzTMYj1pmZ1lBOxmqXas3LOZqBXt9mjWcWhKvQTxirJo2G11zQIDkxTvmtvgFFdYfbpiwjdkVIam3XTvH7Hx3xX20muN0Kjzc+4oBFKpFTrDovYFEpLLeSDa6gP2O4NB6VxYEgAXXsopippyaWB\\/Rk7I01tViLHNmcCTu184Zv+iADuMajsfcSn8PsJsZcWHXGkTln2BiBfiXHghSFVCi0Gq11lvZu+Y+t+dl22mZchRmXHENJStSiiPPfG2mpga61uzEw95y1qUtbjry\\/OW4tRKlrWtWalEkknWI3xMw5XTEY2DoNYmyjDqmahiHVbQw8p7iVgaoqtdlaxWmlJIO0EzbNv1+UKApC0B\\/aecltSFw3bdl\\/Ka3TkZZhD4eVvOQEsC+M8uAzbA35gk6uWajlUfkK0VcpgPHGL5lJMxiDEyJMurALkwzQaemZ7YrNypCpyuTze+\\/atu6WNzMPKBqKHK\\/RqU2q7VMpC5gpBOVDs\\/MFKkZbAJV2EjLqKhfMlSBvSY7rQhLTaG07kNoShPUlCQkewQmo5nP1dnNF61cw9PdDZ1eqNUfWPsHT2+OaOuUjeo7z1745zj7PDSx6tiniZh5hlQW3Ha1iJfNpWHRmmQFOu1W7q\\/T6BIIbByCnFzdQaShJ3EnrJj1maLRaZblGpFv0WUbp9GoNNkaNSKewF7CQplLlGZOnybO1UteylZRhphsOLUrUQPOJz1vNw5F3CoYu8phosUd9gu0+0bzqGKtRe1FKRJnCu26zfNFfd1AdVLl0UWgSTTihqomJxnPcI9KiOh9jkl2dMq8+UkGanWZVKiNSmUY7U5TfVJVOHUAaptc20mGGGrNTT9vrOoaB0NuzSVqA0vr2qSRexsnTSCCCCLkiUQQQQQQQRD8+U3YVuSeImi9jawwlbdw2Xe2FlWmkN5Kll2ZXJO7rfl33CnIpm\\/u8uZcm3rkjyKdUUDcVzA40VfKFMJncQeT6qN6ykml+fwTxUsK\\/nphDSVzbdDrL8\\/hrVGmt5e8lXNX1SKhPtNlaQ1S2p15KWpJbzEH2j076SwXXWQkqcYlRPt2GoMg63NrI0OpaZcTbiFEabxqK8z29KmwASppKXwQLlPYrStZ3j+phY7r34RBGac1vNV9bm6\\/tHP0+uHCVZceB5+jrjjQcsiD1giHja9cfuhxHxHjcfRHExFxY8Yq6HoJBzEbgOSkvMIquLlgPOkmcp1vXjTmdfINppczNUWtu7PeFF752oHnpy1fJvP19ZATp5QrLceHuPd46YzQ0Br1+4zSdsMOvliRu1us2ZPHWKdp89U552ks6oI19pcMjRUhKhxOeRWlMVbtkoRr2zPGMilGd1qkOVNiwJUXqO61VkIRbXO55mWgBqrtCjULIM82YVUUbH+F51SgltdTbkHlE2SGaohdOcKydMqBNdoSfqlGcWKQYmt6Ftf2tFvS2VblSNUp9cl0n8MVOVXIzZQnIZBo0iV2h\\/8AnhoDPiIpnym3B9Vp6XWD+McpIKlaXjHgymizs5qKDVSvHC24p2RrDiXdbIuy1p3ZYEs4yB9GhDKyoh8askDRNuL5nxYlqY45qs3NRarSAFABHlDCG6xLqK+ZZNNcYbP4zwb3l0A4JfKYsHPuz0MsN8X5OU21TwVxkp7M7MlOfkdm4mUibt+sHX3FO3u2mYftZDMKz3ZKCdavvJYxJ2tJw5LrdKlSszUsPvjUg9opU3JIOgtlTMyTfIhAN73MdA7ZKXcVNwJ+s3KVNrdvbKWHyL3P1UTCrgA3UQfRiJHhzUPnCzaK4VEuS0uqQXmd6PIXVyzSeb\\/5XQyQN+SVAc277xKtbt5\\/HjfHQ+CdTU5TazTFKH61nGJxCfwtSdZ2K9XPfklcmCocAV\\/u47yB5x6I6PrLHm1UnWhu7dTie5LwDyQO4JcA9UcgzKCh90W0zkjwV6Q9x6sYdJUU78swebm9nDu9ELg8FJPYejj1cYaJVrcePvhRKsuznEalSb+Px667sVSb6jf8Y5FtwKGRyCvVnwGcOELKD0g8R8R1xxgOe8GHTboOQVuPMeY9vRGKpFtRu4jlHgN\\/RV7evjuI39\\/KpUFDMHMeNxisMUqKDmPSOYiHaFhY3cecc4hEJUm3hwPzi+CCCElIPjwMJi9K8tx3j2wqDnvBhv2xUEg7vsPuhogjfBDsL\\/G9ff3\\/AKYUB5x6IahQPUeiLwop4ekQ2UA7tPh90Hh111aHYX0+v7IUB5wfSIahQPUeju6YvCiOHq5oaItoYQUcRoevZDtK\\/wAb1ju8emFAeceiGoUD1Hoi8Ejhughu1tDp18PC8Ogs8+\\/r5\\/HqhQEHgc4aBY593X4+2FAecH0iEFAO7Trl+qPIvmZeXnpZ6SnZdick5ptbMxKzLSH2H2nBktp5pxK0OtrG5SFpUkjmjEy9dHio0Wryt9YK1ieti46ROIq0hT5WqTNNmpKoS7u3YnLYrjTzUzS5tlwBcuy8+htK98vPSqEJZVlmFnn3jq490KBQPA+jx8I2VLrNRori1yjoLTySiZlHh20lNtKBStqZl1eg4lSFKRm9FwJUoIWATfKlJyYk3EuS7ikkKBKQTlUQQRdIO8fmqFlJ\\/NUDHeuh7ywlx2ZU6fhfpgS1TkpuneT0uRxek6U63VpMpUGmxiFbsrLhVQldnkpVx0OVXMPIaDlQotSXMTNWTJFw7xgtTECgUa4qPXaNXKFXZRqcot0UCflqlb9Xk3FFKJiWnpV16XSCtK0LKHCyh1t1tZYWjZIiGXxhvaOIUiJS46Y28+22pEnVZbUYq0gSc\\/1rOBKlbPWyUqXmEPSjigC5LuFKcut8K8QtKHQcrsxcGD1xOXjh1MzQmq\\/ZFSZmqjb1QYT5y11S20TCX6XUdiA390ltTUvOajQE66mTCpFdGbTPJtwLtLTMVfApk8D4vcu47h+YUGsM1Z7efouZS2foWYdUfRllNqp61ltlqXlbuzkdP7OfKCnaZ2FMxMXZ+TGVCJtSwqeYHoi6nFlKZ5CbaB1bc4ASQ\\/MBKWTOSSpKkhSSFJUApKkkEKBAIIIJBBBzBG5Q9Bj6m1rqrtn1WXq1Bn5iSfadZcfZbfcTLT7TSwsys+ylaW5mWc11JLTqSBrlbZQ5qrGlXQx5UDB\\/SKap9tS9STYuJTqQmawtu6faSak+E6zjli18pYlLgaKUrUJJlqVrjKG5h+Zt5MohNQc2v0S5qXXUhMs9spoD6SSeIQ+kgEqLYz1X292ttGVHJOrtUtK8yPn5iXBmOtleIxL1aRquHK5Sn0TMu+A5LTDSkLPYzcrMMqUl1hZSQ1OSjz0o8MwbfcBjsOkVqhYrpvnFPmpWoyM0gtrQMriDmSCtl5pYC23ACM7DyG3kXBUhNxfrvlmtHeRxnwCsbS6sOnIeuDDaUYpN9CWbSucnMOa5USy07OKQVOTD9hXbMbJaW0FLFNr1wTsy9sKc2RFqCxz5iJzmANZoN1Ue8MDb8lWKxal+0WsU8UqdK1yk9K1WmP0+5aC555KWarSXHXEoa2SQ4xOKQfKJpOvDn0sdH6uaLmkDiRgrXfKH2rUrbq7bq77YSbhs2qpFRtOugoGxL09RpiV+cWpdTrclVmalTSvbSLuX08wVi2U2l4Cw5jeW7NM69LopGJpdnL+w8Q01ppmbzISSG25tvs52WSdRKTErmOdZj5+7ccELwvil+YbbUJOeXmQ5awOYFUu5fcVOMpUy5YG8xKTCybrF8fQQeBEVhtmDz58\\/XF2soc59\\/vjblux0JHiNRFIlvkfbC8EJa6uo+OrKK7Tq9v2QWWON\\/Xf4x5kV3HrvhSCLNcdB9nfFddPT7D3QXWOF\\/V4cut\\/qTlVyPx+EXQRTMdI9YgzB4EH0wZlcU+4jiOvEiCx5H2RWCCCDOf0fj3fP3j1+WPI9frHtgggihIHEgdsGc\\/o\\/Hu+fvHrLHkev1j2xWCKZjpHrEU109PsPdBmXy9xj2x5H2GLoIs1x0H2d8U2g5h8O+D0zblpyH3+Pw4R7kVy+EKQQlrq6h4684t1lHnPu90GRR3n4mPQg8SB74WJA4kRaVjmzMI5gc+XP1xbrgdfu7OYwoNjkTw7r9d8KCBxuYWKzzbvb49UWkk8TCJWeYZe2LcyeJJ9MOBvwHvPDrfwhQAG4QqVJHPn2b\\/siwrJ4bvaYTJA4mLCvoHr8d0OBAHf1yj2FItKwOvs74SKiePq5otKgOJ9Hj4woDkPZBF5WTw3e\\/wBf6IsJA4mEys824dfHuiwnnJ9JhYQTv0+P3QReVnm3dfE9w9vxiwnLMk9pMJlY5t\\/WfHdFhJPHfDgAG4QRepf4vrPd49EJk85PpMWlYHDefHPCRUTx9XNHsKCSe4c+t\\/wi9S+j1\\/ZDaYYYmmXZeaZZmZd5BbeYmGkPMPIUMil1p0KQ4gjiFpIOfDKLyoDuEJFRPH1QtKVXBBKbEEKGhBGoI3G\\/EH3w6ABa2hHHjcEHf6uFvbHQV4aOdhXHtZijsu2pUFZqDtKAcpq17\\/2SkvLDLaP\\/ALHIOyAGrrapGetyWG2Lum9onllrCzEWrXLZMlqZWhNkXfbAlWsiJZqz68l+bohd1EbR2zXJOaKENtme1Ds47oUoDdxPjjCRJPGN47WFVCQVSMQyFMxVRnLByl4jkmKrLmwsFIMylbjbqAfyTgUexNi2kERvqRiWuUKZbm6ZUpuUmGrBD8vMPS76U6XSH2HG3rGwunOUHQFJGhzSwN5ci3RMsUbH\\/DWv4f1dK0S85c+Hbr1ZoBeUtWu9VLSrT8vcFHlGEBKVtytQu6cdWQsS7aPMRujwV0zcHMcZFubw0xIs3ERCWdu9JUipokLpkWAvVL1VtSoNydepqMyNQT9Gpwc3amsN8RYLksq1LuZLFxUKn1MlOomZdY2c8ykjhL1BgszsuMs89jMISVBOYVqgR0DV9GxuSnmqzh9ddTtyqyjwm5Hyl58mTfQc2lyFXp6pepSCmjvbcKJx5O8B0lIJpDFnkz7GcZhx+kKquzqquXKUNlzEGHitVifyD7rdWl8yxolmoMyrKVECXKUpSnoTC3lM4kkA3L4ilJSvS6QlJdfSJKfATYAJnpNotKunRSpinvLUbKU9fOVTvqfdtCqBSlE4mWcV\\/epzKXVmfwQtSiwvf+Ah5avXH0W4hJCgpKgFJUkhQUFDMEEcQd3vGecQpsPNPDT70dC1L3BVjjHaMqENmWv6XevIpYQC2t5u7qbMyV7y7pGrsl1ypzUq24htapFQddS9sywL5bzBmvpkKfihRbwwaq6tmiZn5QLvyxNoUjXmFu02UZuKVDz3nCX+5KfRKoWEu1N8treVy9jLyOdqNAbensPMSWNqUi6kzeF5kVJ8JsVJS7SyhirJeIHpNSsnPJQQU9sr0SrofDm23Z9iINoXUl0KaXYFqrpQmVzEC+Woy63pNKAT9aaclVkXJbFjEiaCMVcKNK3DXFumJq1h3tZuIdOS007MTNn1+RnZ6QS6c0pq1JTMOTlMmSRqmVqDFOmEKBSphKgYyBp94UCo6qWqiiWdVu2M8PJlncMglbitg4rPmacV0745jqmHK3RZl6TqdNnJOal1ZH2H5d1p9lQ3peYcQh5gjeQ822ba2tFsS62JthEzKTDE3LOjM1MSrrcww6k\\/nIdaWtChfS6VEd8fUwRRJCgFAgg7wRvBHj1Rdmek+sxpCCOHt05d3L7OcOdn3+774pHO0OvVq26izVqDUpuk1FgfRzcm6WnCkkKU04B5j0u5qpLjDyXGXQAlbauA4PM9J9ZgzPSfWYflJuckJqXnpCamJGdlHW35WclH3Zaaln2lJW29LzDKm3mXW1JzIcbWhaVAEEGxCHGG3W1tOpQ604kocbcQFoWhWikrQq6VJI0KVAgjeIywXixhfjZaM5hXpL2Dbd42rWkoYnlVijMVSgzD2TjbE7OUt1pyZpFSlg6VStboyxNSLxMxJpkVNh2NL+mDyBjFVkp\\/E7QVvGVrNMmmnqm3gxeNcYeS+1quuGUw8xEmHfJphWuGmJSiXy5LFtImHpq+HXg1JKzwzPSfWY+zsvEW78P53y22aw\\/JIW4HJmnvEzNKnQMhlOSDpLLisgEB9Gzmm05BqYQDme5dlvloVeSZlcP7Y6W7jSkNBDDGKZDsZfGNNa0SFPqV2MpXG2wBcPrk5xxRU\\/NTU+4Etmj8c7DMP4kS5M0xLdPnrHK0QoS5N9zLwC3ZXUkhspmJW9kpl2xdUQjsTMNcQ8HruqlgYo2XcuH96UZSE1O3LrpM5RarLNu+dLzKZacZaVMSU439NI1CVU\\/Iz0sUzMo++wtDsddkgD3Dpj0G8QGNFTTRtSXw80p8Mbbnn2kON0atVBL8u\\/Rp6aRquz1r3rT3JO4rOmHS225MNGfZp8yG2GKjNVFsFk6A9MnkAMXMOm6jfWiNcbuOliJZfn\\/uBrr1MpuKtKkwFvBukzrAkrYxCYRLI2gckEWzXpp51mRpdsVZ36dfdOG5zC2P6R+EGzfEkhi+kpCTNMyauyrdLWsApl6pR3g1Pyj1gcqXZdpbyUl1poslLh49xZsxxLhOZW1OST62gVFCgi61oFrqb7MramUJuApyVddI17RtkggR2iSTmYQUrPhwHP09ccxctv3DaVcqlsXXQqzbFxUSbep9aoFw0udolbpU+wcn5Gp0qpsS0\\/ITjKsg7LTTDLzZzC0jeI4FxeoP3R4D4nxvPpjJDZQSFApUm4KSCkpI0KSDqCDoQQLG9xeIBa2hFiNLbrW4W4Wi11zV81P1ufq+0+z1Q0JyBPRFSc8yT1kmEVKz7OYd8OJTmPcN8HXzihJUSfAhFSs9w4e\\/9HjqqtXFIPbl7u\\/m3c8ILWEDPiTwHT9nXDwHAeA8O\\/rdHo104nTw69w91jrmqNUcTx6h9vqhoTkMzzRUnPMk9ZJhFR1j1c3jrjIQjhw3kw8BYWiQJ8nZwnVdmlniTivOSa36dhHhJNyklNhoKbkbuxFrMpSKQpbi0q1DMWtRr6YQ03qOukrVtgyy6w9Kh0oa35LbFAoiXCldWrDs6tKcs3JakyhC0KHOgP1GVcOQ4tDPLgdR\\/wAnYwk+5PRSxLxZmmdlUMXcWX6fJOagymbVw3pDNKproey11FFz129pctAFDQY1kEl9wDYnpM1xM\\/fkpSUKzaoNFlW3EHM6s7UVrnn1HfkAuUXTiOcaoIIJ3cjeU9iTzHCGJWm3FB2eMhh+XG4Hzh1t2dRvFwZVuf0BIP1jdGeOrditIytUdakfW86qr2nEktyyu\\/TzXf4aG0RXOXtxIDVC0fcJZWZKhP1e8MRK1JBaQW\\/meSp9tWxNrbAzJf8Anu7mm1kpAEu6jNYXmiPTY7W0qMzMEbpeUKU9Tj7iUpJOX4iHRl0mNi\\/LGYlG\\/wDTZuuisTKZmn4WWhZ2HskpsBDe3Ei9edWB4a8xL1q8KhITLygFlUiiXzUzLsqjAGx5fZ06ZmSMjMzOqD0tsIAB7A446OPNHQvk94c\\/BTYJgORW32czUaOmuzFwUrW5iWaerTfaiwOduSnGJeyhdKWUoOqTFT7VKoKrjXEkyFZkMz30azYkoCaa23IKLepGRa5dxwEaKUsqt6Vo+1UoJBJ5vb1emGJJUSSd54nxzCFHV66t3Abh18Mz7IbLVzD09nR6fHGLNAzW7\\/d4xWcSfvkvOEiri0lNIfGuYlkOyeGOEFFsWSddAIlq5itdLdTZmZcEAmZRRMM65JuKQ4NlKVJxKx+uW1Jm7RHL+TP4PpsrQbvXFSblnWqljbjVcU3IzRCQ3NWhh\\/TKXaFJQ2NUrcMtdbN+B17XCCXUMJaSphxyYkaR1ns9kfMcJUlJFlzLbk6s6el526t1o3G\\/9jlkXJJ0sbWsLCojPZU1i4sp3O8rvzrOU6gf1MI567iRaCCCCJpG2gggggggjGzS+wiRj5otaQmDiJRM7O4g4Q35b1BYLZc1LqmLfnnrSm0NJ3uPU+5maRUWEADWdlmkngTGScEMzDDcyw9LPJzMzDLrDqf0m3UFtafWlRHrhDiEutuNKF0uIU2oafVWkpO\\/uMeTHvQopUkpyJSQQQQobjmDvz6R6utUEggg7xvHjoMZf8oTg9+oLpu6T2FTUgulU238XLpqVuSCwdaXsy8ZpN72QgEhAWg2jcdEW24EoDjag6AEqjDpKstx4cx6Ps93Zw4EqMk7Izs5Iuj8tJTUxKOi1vyku6tlemovmQdLnS2u6KddbU0440sWU2tbahxCkKKVDXXQjj845JCwodBHEdH2R9JZ9yztoXVbN1U8lM\\/bFwUW4pBQWUFM5RKlL1KVzWnJSSl+VQQpIzT0bo+PSopII4jxkeqHiFhYzG4jiOiNW8y1MMuy7yA4y+2tp1tX1VtuJKFoUOIUkkEcjA244y4280oodaWlxtadFIWhQUhYPApUAQeBETNsML4lJKt2JiDS3i9S0zdv3NKvNZ5zVHmVSs8pISkklE1TH1NOIRn5rpGZ3k7AeUTwZTpFaDOlBhNLS66hULlwfuarWtKsIEwqdvCzWG77sdhtIz1kzF3W3Q29o2FKCV7VhK1JSI0VaDd9\\/dzoy4azDj5fn7YkJqyKgknX2KrWmnqfSmVKBJUTbooz+asinbagzy2ipKGCFy\\/dXhTY9XU4XXxQ2KXOOKV56p2iLXRppxzocfdkVTWeeeTwW0NmpMcG7HJiYwdjHGWEnHFJfoVZ86lc2mZyj1BUk8\\/uIIfSZBxKwkApCTYhdo7sxUpjEuGMP1xIBYrNKbQ9l1CRUpJEwGiATlUyozKFJJuld03BjyxsIqomTu1EopWSKpIzUoAdw2zQTOtnPMDW1ZZ1pGeeanQlPnFJjKxKinflmDzc3s4d3ojr7TJwgc0W9NfHvCVEo7I03DXGm5mLdYdQG3HLEnKuuu2S+ttBUG\\/nGyKrRJrZoUrJE1kFZZKP27TqVBOagpJAKFA5pUDkRvzIKTnmCdxHqj6E4nQ0+5IVOXJUxUJJp1tVvrCyVpX4ll1rTTde\\/COIKqwZaZU24nKsFbTgPB1lZQtJPcba8N40McgCDvBz7OY98KpVnuPHx7fZDMKI+MLAgjMRFbff3fd9vqvqVJKe8c4dAkcPHbCwUD29ENEr5j6D3+O2FAcsiO0GEqSD48\\/nDakhXjzh826R5qt45j0dvTDoHgQesGOMSrPcePvhdDhQekc47ejojGW2b6Cx5c\\/Dq0JBKdFDTdfreOu6OWbdCtytyuboPdC0calaVjMH0HiIcIdKdys1Dt3j18ezOGo8KOKdRy+Xy3w6gigIIzBzEVgIvoYRBF6V8x39fR3++LIO2GlI4j2cfVz63wQ4Bz3iLwsjjvHthoDlkQesEQoFjn3dfj7YbIB0Igh2CDw9I5x2xeFEdY6Iag84PpBhQLPA+v8ARx9Hthsotu17uP3x4RfQi4h0FA9R6IvBI4boagg8N8XhShz59u+EQjJ+ifUfUbH5H9ToL6fX9njsi8EHgYahYPHd7ovghBBG8Ede\\/wBsOgpQ58+3fF4WOfd7fHqhoFnn3j1H1xeFg8d3jp78oSUpPC3hpHkdN39gRZ17OqqskhdrXMlaZhmt0RIZ2k0hWu09PSTZbafcQ4NoJlhUrPleSjNKCQiMlMDOUJ0lNF1+n21pA0yqY34USimJeXv2mTK5q\\/ralGlKSh9dYmywqvbJGqpUndrkpPuvBKZW7NgyGXPkgecH0iDW1gpCwlaFpKFIWApKkqBBSoHiCMwQcwRwhdXYpWKKSKBjCjyeJ6MkKDDM\\/mRP01SgAXqPVmrTtOdASlJDTimFoSGnWXGlLQqW4YxtiLCU4ico9QfYUnKFt5szTzaTo082vM280NcrbyHEIPpICVgKEknRh038OcYqfSr4wpvqQuxujzMhPPty7pkrutaeQ5tZaUua3Jsy9QlFlxh1tCphluXqiGn35Cfqcrk472hyveDNv6TWjfZWmThcy1U7rwiZRbWKclTW1PT8vY9VmRMPioMEeWA2Hc06qcYKmG0G3Loq9emXvIJJtSYibmGTdCuNi\\/cKLkruEOIEiFrk7ksqcfkGlrdAL7M7TpV6XadlZrIInJdhbEvOJKkTzM2jWbVtR0TOV2xT0f56oWZpbYes4hYT3lS5y0cRrysaSdmbdu60avKTdMqTd+WHIS4mqZNfNs5NtKr9sSbLcumZXIytvTso\\/OCbgGAtnA2YVetIwlNzGIcB4rabbq+HZpLbOKcOzzCryVbpks32chiNMqbtzrFKMrVp6V7MNUaYflmkuXtWNpWHtrGHU0TERZoWJGG1CQn3Afo2adOVSWXXjndkip5KVNKdU8wizvazMu08tKcEYrrKHOff74+wxIksO6ffNytYQ33S8SsLnao9PWBelLmmZn52tGpBE\\/QxV2milVNuin0+ZYpl10V9DUxRrjkqpTHW1GW11fEBShz+vfE7fZUw64y4BnbWptQsdCk2OhANiRoeMcwPMuS7zrDqcrrLi2nE3Csq21FKgFJJSoAg2KSQRqCQQYc66uo+OrKK7Tq9sNtoecD3d8XbQc4Pv7oYyp5fZ8Ibhxrjr8emK66en390N9dPT7DFdZPSPXHmQd\\/XqghxmOkesQZjpHrEIZg8DnBHnZjmeuj0NSHEEN4IOz7\\/AHffBDiKZjpHrEIQQdn3+6CF8x0j1iKa6en390I5gcTlFNZPSPXHuQczBC2uOvx6YptOr2\\/ZCOunp9\\/dFNoOYH3d8ehCeXvP3QQtrq6h4684t1lHnPu90Ilw8wHp390UK1Hq7I9sBwHsghaLSpI5\\/VvhEknjFCpI5+\\/1DOPbE7heCFS50D1xbrKPP8PdCJcHMD6d3fFpWo8+XZ4zhQQT3dcoIWJy3kxYVjm3+zx6oSJ5yfSYsKwOG\\/x092cLCBx190EKlSjz5dm6LCQOJhIrPNuHrPri0nnJ9JhQAG6CFCvo9f2eOyLCSeO+EysDhv8AZ8IsKlHny7N0ewoJJ4WHXr+zlaFFKA6z0QmpRPUOiLCQOO6LCs8B6z9vD0+yPQCdw9fCHAkDvPPrQfGLyQBmT6Oc9kJqWTw3D2xYTzk+kmE1L\\/F9Z7vHphxKANTqfd11aFQoTlvMJKXzDd19Pd74sJzzJPWSYIcAJ3D18IIIIIIdCQO884IIIoSAMych1w1W6Vbk+an2n1cB1e2FR6ATuhVboTuTvPTzDv8Ad7o69uTDiybr2i63b1PfmnAdaoMIMjUdxzBVPSRl5hwJJzCHnHGt6gpCklQV9spYSMyewQ0W4pZ6BzDm7T1xkSz8zLOB6Vfel3E7nWXFtLHGwUgpPqvbnDqVlk3bWpK9PSSopI7rggi\\/XCMaJnAKp25VGbgwwvms2xWZB0v06YXPTlOn5R\\/NK0Kk7goa5WfktmQEpUiVedyCVl1SkK2mStgcoFp54CbCTuqcl8YbWlPo9nfFOVcsyGFEKceTd9Bfp92JfzBS2\\/ck5UGW17jJlKkIVYpQHDefHHu\\/TCRJO8xsKo5TMTyyZLGWHaDi2UQkobNZpzDs7LpPGTqLaETcq5v\\/ACzS+0sSArXSVUDG2J8OPB+kVedkVEgrMrMuy\\/agWsHkNKS1MI0F0zDbyTa5STYjZXgry3ODdaTJSGJFBvjB6pOOtNvz0oRf1lNaw1VzLz9OlZS4Gkheaiy1Z84W2v8A5YdUg57b8JtLjDPFymtVCwb8svEKULQdeVatwSbtWkWyrLOq0XaqqNNfzyHk1QlKa6AUrU1qKbK4l9w2DZtzhZrFv0+Yec1s55pnyOfzP4RnZQszSik+cEuOLRnxQUkhXTs\\/gEaVPsVqwrvq1u1eRcD8i648+iYlZgJKQ7KVemqk5+RWNZWTiG33AFKyVuziicUeS1sdxV2jtDnKzgWfcuUsvpOI6MgkXSlKluS1aTdXoqdeqLraE2PYqN737hvym8QyhbaxDT5GttCwU9k+jZ5R0GsxJtrlCLX0NNSSd7gBidxIXzQKgUpTUDJuK4MT5VLKB3AAPKKpYk5\\/VRMFWW7KPqkvlxKVNulaVeclaV6yVDIfVUFaqkk7xuzHAZ88KKw9NrT5wK2TM1cy8XLblAhJkb6lVX2l1tCUtlw1uWmKdiClSW9+vNVjydKs3nGnFbQnYDg7y3FkLcYp2LWHt4Yb1FCEtzVas2fRddAcmkqAddnKLOpotYpsqRrKEu23cj7awlpSlJzcTzfizyNdpdHQ7N4bFNxlT2wF9th6dZmphKPzQ5TppMnUO23AsyrM+pJ0K1AEi+MP7d9n1dCETE7MUKYVYdnUmM8sVG1wmeklTDKUWuQua813EWBKQqS5tHP98X\\/GV3wbRz\\/fF\\/xld8YFYM6eOCuMiWEWDijY98TjqGlpoqKkLfvEpWE5LctirtU+toCdYJUo0RtCXQpoKK\\/NTlnTcR7dqBS2++\\/TXlHL9eIUWdocgdV9kuISknL6R4Mk5EZcI5nrWCsTYdmnZKs0eoU+bZ\\/bZWbk5iVmmxzXKTLbM0gd62UjfxBtbklPSNSYRNU2ck6jKrtlmZGZYmmFfVuA6wtxs99laZtY7C2jn++L\\/jK747Ww9xlvvDZ5pFGqzk3Rw8HJm3qmVzVKdSV5uhptwl2nPOnPN+QdYWVpSXg+gBB6jBCtVaVApy4g7iM+bdlv9vNwzi7I9J9ndGPhrEuIsHVaWr2F63UaDWJQgsVClzTspMJGZKltLU2pIflncoS\\/Kvpcl5hu7bzS21KSUT0hJVKWXKVCVYm5ZzRbMw0lxBIAAUApJyrTqpK0kLQTmSoKAMdZcsvoOUXS6wLktMrAqiKmsXsMrZW\\/edGpraDUr8w0pSXpmr0+blGd01eOG6zOVCmqZ\\/XtVt\\/53ozXzu+1aUpLwxiSSSTvO8+OgR6DWjXi6qwroFu1uaUi07nmW23lOrOypFZXqMSdTBUdVmWfBRKVNZ3bES826tKJDVXGJ5afk+zohY6\\/qpYc0Qymj7jnVahVLeZk2gJCwcQFByo3PYCksoS1IUuY1nrisiXUmXbNFcqNDkWn0WhOTTv2Q2Z7RpDbXgCTxxKhiXxLTPN6Tj6ksEDzWroaSGqtLs3K0U6rtjziXJ9BCu1lAt16Sm3I4A2zbPXcJ1t2blm1qp02e2ady6KZUoJQtagAC80oiXmrWKl9hMFIEzcaVVKz3Dh7\\/HjqSUrLcOPu6+0+N2UClZdvMO+ECchme0nj7fjEtAtoP1xSHQiilBIJMM1KKzmfQOYCKrWVnPgBwHx7YQUviB2Hu8e\\/hkIR7Tv7h11uh5KbDXeerRRSs9w4c56eyG7iwkZD6xHqHXFy1hAzPHmHjx7csh9DzBxzSE0p8A8HFy5mqffmKNp0u4W0ILim7Ql6mzU7zmUs79qZG05GszmzUUtrEuUuusoUpxDrjjcuy684crbDS3nFHWyG0lSiba6JBO7hDzLS33mmGxmcecbabHNbiwhI9aiBE\\/Xk+MIDgRoUaNOGD0uuUqNGwqt+tXBKLb2apS7L5Q5fl4yikk6xMvdVy1doOKCHHggPFppSlITjTiZc8rVbtvG5pqbYZppqNTmzNvuJbYYpNP12peYfcc1QhpmmyrbjiyoIbSlf4O+NlWIVd+5qyLorQcDbslR5zyVZOrlPTLfklOBOW4qnpiWRlzg+iI6vKFYnfqR6GuPd0NTCWKjP2TNWRRlBwImE1PEKZlrJZfkciCqZp7VdmKsgJJ2aJBx9SNm2uPnBt0em8Z4owHgSTcJnMTYibedQAVFMzVp9ik09woASMqHJmokqUlKQEmxAC7dzYKbl8P0Ks1ZY\\/Y1FpPZNk3ALVPlDMPI\\/OIKktS4ABJureSReGJjViFMYs4wYo4nTKndpf9\\/3bdraHs9aXl69XpypScokH6jcnKTDEq03kA00yhsbkxzdGZ8jo1PlwAFGWS64Ohb+b60k556wU5qkc2WX1Y6dk2DNTctLD+\\/vtNHqC1pSo9gBJPUI7v3JGQy1QAAOAGQyGQ6uAj6jzctL06QptKk2w1KyUuzLSzKdzUvKMolpZsdyGk5BpuTpHFtQfcfdU68suOvuuvurOhU44oqUojmpSlHxJ9Vqlao6+aESeJPpipOZz8CMjdDnBhWkZpXaPGB+wW\\/I4lYvWLbdeDaC4tm1X69Jv3dPag+uin2tL1ioFO4KTLqOslPnJYlJZyZfYlmhmdmXmmUDmt1xLaB\\/jKAjBSkrUlCRdSlBKRzKiAB6yY9I3k4sG14B6CWinhc\\/KrkapQsGLPqtxSTiA0qSvC9ZL7ub0lVJCUFQlrsuSsNbVxKHH9QOvth5xcZuwQR2pKy6JSVlpRrRqVYZl2xa1kMtpbRprb0UjS8Wk02Gmm2k\\/VabQ2nS2iEhI08BBBBBD8OQQQQQQQQQQQQRCF+Um4KKszS3wwxqp8ktikY2YUM02oThSCmevjCypqo9YWFgApSzZtew7lwysKXrMOL2y0rLUvHXSrPt5xE575RlgkrEPQeo+KtPk1v1fAPFG3q9OTKGtqqXsu\\/A5Y1eZ1UgKQhy5KlYs6899Vpmmr2qCk7RmC2lXBST1giOPtqtL+jcZVBaUFDVSQxUmtNCX2w3MEG+uabZmFbkkXtawBNZYgl\\/N6pMWFkPETCdN\\/apBcPAG7oc9mpveHaVZbjw5j0fZ7uzgslRScxx9\\/UeqGiVZ9vOIVSrLceHMej7Pd2cK0Um+o38Rz+\\/4+O\\/SRul5KfEBLshiphjMzGqqWmaVfdHlczmtE20KBcbpOeSUMqlLXSnV+uXl56moNaU1oV3Qmati7LSdXm7RqxLVmUCl7zKVmWMu820nIFLcvNUwuuZZjXqGZyK98IbQQv02FpN4fLdfUzT7wfm7CqIS4W9v90zKWaPLqyzCwq5maEvUP1ltoKPP1Il26Kt0\\/c7i7TJN1zZyt0U+et5\\/WOSA+4hNSkFap1s3XJ6nsSbZH\\/10CMkF0xwxtPkzg7b5I1VH5KSxbJyjrpACW+1mmlUZ9BJBGYTspKzzutgXsxUAs27J2WT\\/wCEGyd+nKVmmsPTc1Lpvcudi04mpsKtfVJYmnpVsADRm2uXWN38pdwLXYmmXh\\/jfI012Xo2PeFEk1UqioEtz9+4WTSbWraG155Ayljz+Gbamss95WFKSvdqLsepirWrRZoqCnUyaJN855K20kTKOLXvJCnNiHTwBCyUpSkpiYh8o+wGVifoJ0\\/FmmU8zFc0dsTLduebmkELmGbGvtxOH9yyrTOsFrQ5cVWsWqzjjaHVysnRH5l0JlWpl9mFTg3UyuRqtJUvzpWYanWQeJbmkbJ4J\\/ctuS7alAgec\\/mM8zl23hecFc2eU17OFzFEmF054jeltkpSygjeB5pMSRP9oTawjnTaBTfNqvOKSnKh9bc82bWumZTZ4+BmQ7qL7tbnNHe7bpGQUcxwB5x29W+HQORzHr6R8RHGJVrdvR09njOFkOFG7iOjo90YqkG99x61\\/VFeBRGihp9n2iOTCtbpz6Off74vSrLceHuholQUAQd3SOI+0QslYOQO49PN6eg9Xqho+zn4\\/Z14QKRxGo5db4dAg8IVSvmO\\/r6O\\/t4w0BIO77D7oVSoK7eju6YSQDvhsgHQw7BIIIPqhyh0K3KyB9h7jz9GUccFEdnOIWBB7ecc4hhbf3Hl4jr2mEWUnUajrh9o+EcklRScwcvce0Q6Q6FbjuV0cx7D8I4lDqk7jvHt8d+cOUqChmD9nbDBSRv9sHor7j17fj6o5KCGiHVJyB3j2gdR5\\/T68ocpWlQ3H0c49EeQgpI3+3hF0EEEJKQd\\/t4x5FQSk7vsMKBY593u8eM4SghsoI3a\\/H2frghwDzg+kGLws8+\\/390NQSOBi8LHPu6\\/H2wggHeIIdhQPA+jx8IuBI4GGoIPA5+\\/1ReFEdfbCC3yPt+f3QeOsOgvpHq+2LwoHgYahY590XAg8DnCCCN4PXfCChPDTrv+yHMXa6uo9o7sobAkcDFwWRx3+z4R5CchG6x679PfDoLHPmPaO3hnF2sk8493vhsFg9Xbui6CE2I3g9deqKSspKyLa2pGWl5Jpbrj62pRhuXbW+8rXeeUhlCEqddVrF1wgrcUc1kqMO9dXT7BDXMjgSIu11dvo7soFEqJUo5lE3JVqSeZJuSe8wE31uSe\\/XXTjx15\\/aYdbQ84+HfFdcdB9nfDbaHnHw74rrp64TkTy95jyHOunp9h7ormOkesQ21k9PviuY6R6xHmQczBDnMHgc4IbwR52ff7vvghxBDeDM5ZZnLo5oOz7\\/d98EOIIbwQdn3+774IcRTMdI9YhCKZjpHrEHZ9\\/ug9R7\\/d3afq9a+unp9h7oprjoPs74Q1k9Pvimunrj3Invg9Xf8ADrSF9oeYfHui3XV0+wQjtDzD490W66uz0d+ce5UjgPj8YIWJJ4kntihIHEj4+qEcyefPn6opCoPaevXCpWOYZ+yLCtXUPR35wmVgdfZviwrJ4bvb8IIUEk7hbvPq6uOZ4QrFCoDiYRJJ4mLSQOJyghQRzPs+Z+UKlfQPX9kWEk8TCZWObf7u\\/wB0WFRPV2QoIJ7uuULCQNw9Z3wqVAcT6PHxhMrPNu9\\/dCZIHE5e\\/wBUWFY5t\\/WfHdCwgDv+Ee9dfr8bwoTzk+kmLCsc2\\/3ePGcJkk8TFIcCSdw+UEVJJO\\/7B74pBBDgQBv1+H39aQQQQRapaUjefRzn0QuCLoTW6lG7iroHxP6YQW6pWYHmj2+vr6oQUpKRmT3wQsJ4q0Hsi9Sio5k5+4dghBboG5O87+wdvX454SW6VbhuT0c57TCJIHGHEovvv4cfXHpVfRI6+zxPOLiSd5Ofb7+iE1L4hPrI93Hu3c+6LCoq3c3RCalBPb0d\\/RGQlFt\\/qHAdeyPUotqd\\/wAPv674uJ5yfXCKlZ7uA9\\/b3RQkk7\\/sHvhJS+Yevu8ZQ5b2Q4ATu68YuUoJ4ZE9HfuPuPvhEnPMqOQ58+AHjj09cUUoJBJO7pPE\\/aYaLcK93AdHT74UkE9w4+7Trd8V6I7z17Pti9x0nNKSQnn6\\/wBHv3x81WrZt2vtlFao1PqJI1UuTEugzKBlkNlNJCZlnIE5Fp1B35ZxzilAdvR3wiTxJPWSYzGFOsrS4y44ytP1VtrUhYO\\/0VJIUPEHw7vUFYVnClJPNJKT6iLEDvEdD1nAS3phSpigVOoUJ9J12m1ny+VbcQdZtSC4tqdbIO7WVOOlJCVpSSFBfdWEWlrpRaKVyW5UKze9wYnYRy08zJVyzq1WZuuSC6K4tKHJWkzddbmZ+06i2gqfpL1NfbpgqDbTU83Oyrz8nMuVKz3Dh7\\/HjqYT8vKTkq\\/JTrDU1LTTS2H5d5CXGnWlgpUhxCtxSeHSDvTvEbKfclMQSC6RiynSOJKQ+2407KVSVZmHm0PIKFvSk2pHnMrNoBC2Zlp1LzLiULbWhYChJKJiiuYfnmJ+l1Gak5hhxC0uy7qm1nIoKCXLEJeaJSM7L4cZdTdDqFIUoGWTo1aRlk40WBa93WhXk1e0Lllkqok84lLU9S5xtwszlu1yX1nFSVSps2Fyb7LhcEu+2EMuzEi7KTEZW7Zz8dX8RP8A7kQk9GjSGurQgxOVPpFQuDAe+Z2Xlr0tppwvTNOcCVNytbpCHlJZYuKkIWFNqWUNXHSWnaTOvMzbchUaZLuwWxft3Ei16BVaFX5K4KHXqZLVS17hknQ5KVmmvta7KddSErTNMJCkOszSG5tDjbstNtNzrDqHPmBt\\/wBhc3szrIqdJ7WpYPrK3X6PU+zGZIBC3qdUOzAQ1VZG9pkAIbnGbT0ulIVNMSv0P2X7SKftCoyXT2MvXZJtCarIINgb2QmelUqJUZR9WikEqXKPHzd1SgWHpjv7bOfjq\\/iJ\\/wDcjLep2FYmnrou4gaL2Lro+c3qG2ijV9DaHqxR52nFK7OvymbRSC5VLYqyZVipMpcQip09xUhUHVS1enW14dbVf7n+Ij\\/3Y+xsS96xYF10i66O4ryqmTCXXZZSi2xUZJw6k7TZnVSomXnZcrZWdVZaUW5lkJmGULTofJ72uzGx3H8pWHy4\\/hWsIRRsZU1KVOpm6LMOJBm22BcOT1KcV57KWstxImJILQ3OvGN7jvCMrjDD81TXG2lTSUOOyC12AD5RZTDihYpZmkEsO62QSh6xWyiIUuOGDd+6PeLN\\/YMYn0r5nvfDu4Z23q5LJLqpSYVLkOyVXpcw6yyqdolcpz0nWaJPBttE\\/SJ6TmkoQl4COoHHCs5D6o4dfWYmNcupoW0jSKwOt\\/TtwXpRnLyw3t1hjE+TpzA8ruXCll95S63Oy7LZcma9hdU3plFSfCdqm0pirrnJlcpatKYahvqVl28w74+uk\\/KS7LjExT5hqepVSlmKlR59hxL0vO02caQ9KzDLyPQdQtlaFBxHouJIcT6C0k\\/NCuUaYoVTmqfMtuNqYdWlAdSUrypWpBStJAKXW1oU08kgZXEKFrakUrLdznn6B09fZCBOWZJ3e0n4kwKVkCTnkMyfHSf0w0WsrPQBwHjx7MscAAfE841MWrWVnM+gcwHQI36fJ4cGFXxpfXpjBNyS3qPgZhjUDJT6WipEle+Jjztq0VsulJQ0Zuz5bEUJGYdc2CtQLZS\\/q6BVq5h6e7v9XTE275Ppgl+p1oV1TFSfkQzWce8Rq9XpaZUkIfesyxFKsi35Z1CkpcShq4KfetQllKKm3ZWqtvNDZu6y4njmoCm4ZnTnCHJ3s5Bm9te3N3QP\\/wDWQ9a27S8TDA1PM\\/iORKklSJTPPL\\/i+bgdir1TK2BrpbW97RtG0o7hEjZtLoDasn7gqwddSSBryNHbD72YPROv05W78UgxEe5dnFMUvDTBfBqTmgmYu67qvftal2llLoplm0z5mpLU0kcZWfqV1zkyyg6wXNULabjLoiTXpN3CatiGilMuqMvbdKlZJSAo7Py6eBqM04nVyGsZeYkmHc88nJbV3KBMQZeV1xYOJmmfeNIlpwTVGwnt+3cNKaWypLIm5GXduK5ApBIHlctc9x1ekzMwU67qKVLtha2WJeOM9jNLOPvKjFRUO3pmAZCdnTdPoJdpjCKSwjNYpzt1+qrnGk+iVCWWoA5HDHUGPZwUDZYJVJCJnEEzLsaaLKJhfnrqrE5sipKTSw4bWHapBsVJtrttOW29WQ4R5sqy69v4aygGUDdzgulY\\/wAQx2apWe4cPf8AZHxtny5blZuZIyMw8lpJy37NhJOYPQpbqkkDiW\\/RH1qlao6+aPo7UFBc2vW4bSlCe4gZlexSiPV6hx7MKzOq\\/igJ9mp95MUWrLcOPuHf46IkF\\/JsME\\/1RNPypYpTsspdMwBwju+55OZ2YcbRdt8iXw4o8kskgNLmbcuK9Z1pzeQqlhKUZqK2495OWZJ6yTE5n5MPgabM0R8XMdp+WEvVccsWhQ6U6pjLyuyMJKWaZTJpEyoJUsm87nv+UW0grbZNPbe2pddcYZlezunGoYqp103aki5UHTwAlU5mT\\/4lTAPcfC+fRmO2qMvp6Lau2J5FoZ06XF7rCR3XuQQLGTPBBBHVMWHBBBBBBBBBBBBBBBBBBGPmlVgxJ6RWjbjpgdMssuLxPwuvG06WuYVqNSNx1GizSbXq+ZW2gOUS5E0qrsl4hnbyLYfQ4yVIPlszUtOUqdm6dPy7spOyM0\\/JTso+koelpuVdUzMsOtq85LrLyFtuoP1Vpyyz4+tTHm28rngP\\/Y8coRpGWjKSiJS3bsu9WLVppYY8mkfmTFRhN6PylOZ1EIbkaFcFUrdtMIZAYb+ZVNM+YkZ0TttpXaSlHrLaLlh96nzCgBcomEiYlidL2Qth8A3sFOgW1iIYql7plZoAWBXLuHS5zDtGhffYZXeYuRax366Uq4KSesEQslQV2jiPiOr9Eca24UbjvT0dHX3w8B4EHsMc3qTl8OB+fXyiEKTbvHD7+vhaOZpNUnaLU6dV6c+uXqFJn5SpyEwg+fLzsg+3NSr6P3TT7Tbg\\/wAThEvLCPEZFwW\\/hzirbziUip0+173piAtSky8w8zJ1hmVcUQlwKlpg+TTCClKkusqQpCFAoiH0lWY35A9HdEhDk18Rvut0fzaUy9r1HDW46jREtqJLholacXX6RMLVvBT5VO1inMpOeozTEIzCdTLlfyqMPrmsL0HFMqkiaw7V\\/N3XUCym5OrJQlLylf8AZVCUkW27\\/VVMqKSLqB6F8natplcR1bD7yh2FcpweabVYhybpilL7NKTb68nMTi121UGEg3ABTKJx5wvoOlDo2YpYSzjkoii43YR3JbElUJtovM0x68LZmWaDXkthCj5RQ5+akK3KOIbUtqbkWHggrQmPLytJmqWPiNOW1XpR6m1aQqNVtOuU9\\/JL0lVpCcck35J5OeqHpeqyXky95yUF6utlkfTy0U7tFy4S0yRdcLk7as7OW\\/Ma25SpZChUKaoJzP0SJGdZk0HPeuUdI5gIF\\/Lc4BzGjrykGMsxTJF6n27i7OUrSAtF5xKUpmV3+uYmbvmGtlkkNtYoUy92m28m3G2WWElJCkuLsvyeMSt1uTqFKccSE1yjy9VYRqkNzbKEszraRuzpL7ZUNbCSURoDHm1eiGXUleU3lZmZp7iiNVNOZnJVw77JHZrINrXeSN9hGOQOe8fohZK+Y7uvp7vdHC06ebqEhJVCXILU5KsTKMjrZJeaS4EKO7zka2qoHIhQUk6qo5NKgrqPRFmutFJUlQIKVFJHFJBsQfAix\\/VHPCk30O8H1gw8QtSDmD2jpHQYdocSsdB6M9\\/o6RHGpVlx3j3QqDwIPWDGKtvn6jDfpI7x17D1raOTSvLcd49sKg57wfT454YIeG4L3H8bm9PXDgKy3g90MEEaH2+73e33R6QFap38fv8AmO+HaV8x9ffCgPOPRDVKgd3A9HNz8\\/wi8KI4eqPIQQRoYdhfT6\\/s8dkKhRG9J9IhoFA9R6O7pi8EjgfXwhCkA7tO7gflDZQDqND17PVHIIeB3K3Hp5oXByyIPYRHGhYPV7vX35Qolak8D6OaMdTdu7x3e39ceZiNFC469R61jlkPcyx\\/xh8R3eowuFBQzBzHj1RxSXkncfNPXw9fN6YXBIOYJB6obII3iDKFapPq8fh7+UP4IbJfPBYz6xx9I4erLshdJSR5pBHVzejmjyEEEbxF0EEEeFIO8evr7Y8gGfNnu6IvCyOO\\/wAdPfnFkEIKOR9vXyghULB47u3v\\/RF4POD6RDeDMjgcoQQRvEEOgpQ58+3xnFwc6R6obBZ58jF2uDxGXtA+MIKUngPh8IIc6yTzj07vfF0NgQefv9UXZkcCR6YSW+R9vXjB7+uuUONZQ5z6d\\/vi7XPQPb3w2C1Dr7Yu2h5x8O+ElCu4+v52jzKOQ6\\/VDnaDnB9\\/dBrp6x2juzhvrp64rrJPP8PfHmU8j7ITkT36+Pdz+3mfU5zHSPWIrDbMdI9cVjyPMg5+7w69Y9biCG8VzPSfWYIMhG4\\/ZxHf0QPUvFcz0n1mG+Z6T6zBmek+swQZDz6069Q9S8EIZnpPrMGZ6T6zBBkP6Xx7vl7h6l4IbwQQdn3+774XzHSPWIprp6fYe6ECQOJA7YprJHP8fdBYncCYMg5n3QvtBzA+7vi3XPQPb3wjrp64ptDzD490KCVHh7YUEp5e2\\/jx64c4VKlHnPu90UhErUersimZPEk+mPQg8SB749AtwA8IVKkjnHv90Wlwcw9cJEgc\\/f6otKwOAz9gPxhQQONzHsKlSjz5dnjOLSecn0k\\/GEisnhkPHXu9kWZk8TnCgANwghUrA4b\\/AB0\\/pi0rJ4bh454sghYQT3ePyggOfPnv6YIIIWEAb9fhBBBBFqikDziAOvn9HPC4IuihUEjMnIePXDdT54IGXWePoHD159kIkknMkk9cELCCd+ndx66tCynzwQMus8fQOHrz7IQJzzJPaTCKnkjcPOPVw9fP6IblSlEZnsA5ubcIUEk9w5x7dKdwueuP2DSF1vAbk8enm+OcNySd5PpMWFQHWejv6ITKirLP0AfCH0N+rvPHwEeAKVqTpw6+3wi9S+Yb+vo7On3dsJE85PpMWlQHcISKiePqh4JA3e3jDgAG7rxi9S\\/xfX3fbCZOW8n0+OeLVKA3cT0c3NxPwhIqz3k90e9WhaUk79B8eucXKXnuG4e0witwIB51cw+J6oTW8N4Tx6e6GxPOT2njDiUE7+6w59e2FFQGide\\/refdFylFR3n0dHj9EIqXzD1xRSs9w4e+ElKCes9EZCEbrjwHz68YEo4q9nz68YqTlvP6YSUoq7OiKEknOGy3hvCN\\/wC66OwfH3xlJTbXefh1zhyL3HAjcN6iPQOs93r62hOeZJ6yTATxJ9MIqUT2dHfDgSVeHOCGlTkJKryM1TZ9hExJzbS2X2V55LQoZZhQyU2tJAW04gpcacShxCkrCVJ710HdLGq6I1\\/MYTYj1SafwIves+U0K4X3iVYdXBNvISKsHSAGKNMO+TpuiVSUMyZ1bokG23BVZSpdIKVluHH3ePHX87cVBp9y0qZpVTSSy8nNDyT9LKzCQdlMsqI3ONKIKQrNLic21pU0taVMVWjUfE1EqOFsRSxnKFVkBL6E5fOZKaR\\/Q1VpzigrsZ+TcsttWVSHm88u+hxhxbZk+EcVVXB9bk61SZgtPyzgK0G6mn2VWS8w+2CO0ZfR+TcRcEiy0KQ6204iavZN5N3JINJcdYXPMstuKWhQUidllAFqfYUnNCkuApKyhagFlKkbnkx9tru9KfV9kRluTP0zK1atbpWi5izVgmqUsBvBe7Z15Zbqkg2HCzYs6+84Q4lLKCm1krUFqYD9sLKVy9Hl1yQqBX2K\\/Tmp1kIS4MmppgKzXLvDVK2zmdbUVnrsrzzU0rjra6U\\/J3a9sqq2y7FM3Rp5CXpNeWaplSZQRKVKnTCleaz8tfNlaeCVIdZKlKlJtt+UWpRaSpf0wwRjCl44oUrWqYQkrAanJQrCnpGcSlBdlnSkDMBmS4y7ZIfZW26EoKlIRnToq4oSUnU6jhPeCZOoWjfLcxLScpVGGZynfOs\\/LCSmaPOSs0h2XfptyyazJvy0wlcu9NIZaXLkVGZMQ5OVZ0GZ3QW0oa9alFk5tWDOIqJu+sF6u+VPJTbk1MhNYs+YmSCF1Wwqq+aK4HHXZyaoL1tV2aDa66hpMlNqafYeafYcWy+wtLrLzS1tutOoWlbbrTiFhTS21hK0LSpJSsHI5Zg9+aYOjpReVA0Ha9ZqG6e3j9hkhVw4d1eYSy07LYg0mRe2FPfmllpUtb2J9IZdotVUT5DIVR9isGWnHbXk0K7a8j7aj+FeG5nY9XpoKreG2JirYEmHl3dnKOlQcqeHg4s5nHKepfnci0CVeZOOoSluUpFooLyg9nnnTCcU01gdoVJROobTumSkJS6QBYInUJDSybATbTBKiqaXHn6uOFZyG5I9vWe6EFKy3Djzno+2ORrVLqdv1Wp0GtU+cpNao1RnaRWKXUZd2TqFLqlOmXZOekJ2UeSl6WnZKaZel5mXeQl1h9pxpxCVJjiCQBmY6qDZBIVe4JGUixuNNR48PbyjjFKNfSG7gft+XPfHJUekVKv1ek0GjSjs\\/V65UpGj0qQl0lb87UqnNNSUhJsIAJW9MzTzTLSQMypwAcY9NDATCyk6POAWFOEck5LJpmE+G1s2pMzzAWmXnpm3aJLy9arato224V1eotT1XmVqaaK3514llBOoIMnI0YEKx35QDBxM5IKnbZwien8brmUk5CTTYPk71nPL1s0rQvEifsqXdY3l6VcmE6pSlUTmsfrmFuYY13ZuhubrwZt2VO7f8563lw3jd\\/uSzUDmct4G8Exz3tzxO1SZdLRcSW6TTJusTLd7hx5SFCVZI\\/rhSwsIG8iaRa4UIvDZJRlTKpiaykLnpuXprCik3Q2gpcmHAeKCp1vMbWBYUNSCBrGxXxGkKPIYj4r3M4uXo1Ep11X1W1goUZOj0eTnq5OoQpxaG\\/1nTpZaGwtaUhDQ1lpSd3n13zeVYxBvW778uBwP129ror921p7NRDtWuOrTdYqC0k5ZJVNzjyk706oKfTLY5XfGFOGWhzdVvyk0JauYvV6h4cU4NPBE0imPOruG6Hw1mVOSMxb9Bm6JNnIoSquy4WvWdbQqIXSpYTtRlJYZFK3kqc4b2m83Hd2f+9oVnGi8h\\/DC5XCmM9oFQQTN4lrSafLvuAZ1yVGaXNTcw0sAANzdRqTzLoG92nC4slN5Nt6q6F1ej0BlVmKPT1TTyEk5UvzxSlttadxUzKSrS0E3smaUAbqUI7WpEuJKmSbKhkpLIW4OfaPEurBz3khSyneeA6BDwnMkn9A6PRApWZ6t+Xs49Z+ENXXDvQD\\/AIxH\\/wCSPj17uGYjrckuLUo71qUpXio3PvMc36rUTxJJJ8TrFFqU4oIQCcyAAkElaiQOAzz\\/AHI4n3eqLoA4DL0ZtC7RowQmJJ2mVmycJrYRdkg+EJdlr8uGWN2YhIUlKU6gF716vqQhWs6hCkpdcccC3HPOs5L\\/AEfzpN6fGjFhO\\/IfOVAm8SqVeF6SzoSmVcsXDdD9\\/wB3Ss2tQU0yzU6Jbk3Rmy7vmJypSsqyDMTDCD6jEXnshpmVuq1ZSfrqap7CrcEATE1rxCiuV3aApN9QAJZhuXsZiYI0ASwk8ybOOi9t4s0fA6jdBBBBF1RKoIIIIIIIIIIIIIIIIIIIiM\\/Kd8AilzRu0oaZIq1VCu4E3lPpaZCUqT5bf2HLCnEBLylLScTCrabRpKGGQ3slFXlEuaNa\\/K26Pf8AZJcn\\/pD2RIyTU5dNsWkrFeyFFJVNN3Lhe8m71StPzOz8uuKgU2uWiyXgprUuB4FxlZTMNRXG1JNawvWJFKczxlVTMsLEqMzKKTMspRa5zOqaLO43DhBBBIjW1eX86p0y2BdSUdqjnnZPaADvWElHDRR1G8ebalQO7gejp93X4zyVQ4UHpTzju64ZIWFDMbj7s+uF0qz3Hj7+6OLFoFtBpxH29bvhWJHA9dc45IKCgCk7vaD8CI2PcmXiUbWx0qFjTThTIYl23NSbKC4G0fdBbDcxXKW6sqzC8qWm4pVLeaVLenmdRZI1Fa1ELKDmPV48eyPucPrzn8P74tG+qSc6jaVxUe4JdoqIS8ulzrM2qUeyyJl5xptcrMJ4LYeUk\\/WiG46w0jFmEMRYdUEqVVKXMsyxXbK3PIAfp7q77wzPNS7x1F+zI0veN9hKsrw1iaiVxJVkp1QYefCPrrlFLDU60N9y7JuPtaA\\/XOl7RO10MrxFLvqtWhMPFLF00jyiTaUcwurUIuTKEo8\\/JBXSpiqOuLRntPJWNYZp+i1O\\/KdtHdu48GsCtKCjybZqeGd4VDCu8Xmw6ZmZtTECVXWbanZpRBYTI27c9uTtPaCS0+qcvoBQfR50plXhRiBKSFXsDEqhTBm6Yp2g3TIvNgoM9RJ9EtOlOqclAT9LmlNKTvybmcuffst05MApHS20OMecEJVMvPzeI+GlTXZbuuz5Ob5oyGLtw3n1OvZNiUavKjUCafcDjOtKpcAfYDm0Txf5P+LXMOVinedLMuKFWQ1OIcuhTdNqKly88hSFa5ms86opOiHOzvlUAT1\\/tRoqKnKPuy4DoqVPDsutHpJXNSgQ4wpC06ZXUCXSCLlSVKtmFxHm7YV1jyu3BIuK1nKVMusZcV+TvlUxLqPSnWW8yj8VLGrnkmO0wc8iD1giMZMM56YpF0zVGn23ZV2cQ\\/Ivy0y2th+XqMgtxYZfadCHGXmtnNSy2XEJWl5QbySrzVZHIWpHDhzg8P09cfQivS3m1SfIH5OYtMoI3EO3K7HcR2oXa3C0cSTjfZvqsLBfpj17\\/wDzXjkUr5j6+Y+PVCoJHCGaFhY3biOIPGFUqKeO8e0dOXT2RolIvu9nD1Rikcx7YeBQV1Ho7unnhZDikbuI6D3+PZDIHPeP0QqF9Pr+zx2RjKb32FxxHEde2Gykg3T94+fW+OSSsKGYPaIVCyNx39mWf6I4wHLeD6RDlDwO5e49I4enohgoI3ajl1v+MAUDooevrd8IfAg8IUC8tx39fOO3phqDlvB6uI90KBY5x3d\\/V8Yb669\\/zMeFBGo1HXt9UOgQeG+L0rI6x0Hx7OENQeceiFAvpHq8d8BF9CIRDsKB7ejxx9EKJWpHA7ug7x47MoaZ57+MXBZHX2w0W+Wo5Hq3whBRxSbdc9\\/xjkEvJO4+aevh6+b0wsCRvBy6wfiI40LB6j28\\/Tn+jshRK1J3g5dW\\/I+jhDKm7cx3G9vb+v2R5mI0UL\\/bu9RtHKJeUPrDWHTwPqyyPs7YXS4hW4HI9B3H7fRHFpeH4Q9I3+sc36IWCkq3gg+OjiIbII3iDKlW7Q9cPlpHIwQyS4pPA7ug7x47IWS+DuUMusbx6uI9seQkoUO\\/wheCLQtKuCgern9XGLoITBBBBCSlJ4ezSCCK5npPrikEJ7McD17oIv11dR8dWUV2g5x8e6E4I8yK7j13wQtrp7PR3ZxXWSece73whBCcquR9kEOMweBzghvBmRwOUeQQ5zPSfWYMz0n1mG+Z6T6zFdZXT7o8sOQ6\\/UPZBC+soc59O\\/3xXXV0+wd0N9dXT7B3Qa6un2DugsOQ9ggsOXXQHshxrK6fdFMz0n1mENdXT7B3Qayun3QWHIezrkIIXzPSfWYpCGZ6T6zFMyeJzj0DkPZBDiKayRzj3+6EII9seR9kELa6e30d+UW7Qcw+HfCcEe5VHh7evsgi\\/XV1Dx15xaVE85ikEehB4kD3wQQQQQoIHG5ggggghQAG4CCCCLVKSniQO07\\/AEDiYSU+PwQSek7h3n2R7HoBO4GF4sU4hPEjPoG8+ocPTDUuLVxJy6Bu8emEypKd5IHjo4mCFBHEm3XP9cLqeUfqjVHSd59WWQ9vbCJJO8nPrJ+JhBTw36o9J3eoc\\/6YQUtSuJz6uaFBBPd49fG0e5kp3C\\/f9\\/3Whwp5I3Dzj1cPXz+iEFLUvid3QNw8ducJFQHP6B498WFajw3dm8+OzKHktcbes+rcPt98eWUrfoPd7OPWsKKUBvJ3nmHH4CE1LJ3cB7\\/TFmeW\\/hCZX0D1+O6HggDvPP7oWEgd55nr7++LyQOO6EysnhuHt+yLM+c+nf8AGEyvmHrO73\\/HKFdde2FgE7ovJA4wmV5\\/V3Dp6e7tz9UWk57yeriPdDZb3EJ9fN6OOf8AxvgIUATu9vs9nq18YXlSnVWp5db\\/AF\\/GFlLSgZk+jnMNVuKXu4DoHxPj2wmTnmSeskwmpee5O4dPOe6HUN8tTzPDr27+EeXUvQaDreevdFxUB1no7+iEiSeMWk5bz+mElKJ3cB44xkob5e0\\/Z14ndCwkDvPP5couUvmHr5vR0+OmEycsyT2kxYtYQN+8ngOeGillZ37gOAHAQ+EgbvbxhUXuOlW4bhz9J7ejshEkDj9sUUoDdxPjjCJPEn0w4lJOp3fHrnB1bh3\\/AGRUkk+4dEJqXlmBx6eYH4xapeYyHDp5z8QOqElrCBmfQOmHQNwA8I9395667oqpQSMz9pPjxnDNbhWecJ5h39Jii1lZzPq8ePbCSl5Z5bz6\\/wBJh9CN3E8+XXt+EOpSB48\\/lHyd326a5Ky8xT5h2nXFR30T9Cqss87KzUjPMONvtbKbYWh9nN1ptaHWloclpltqZbUlbZC5AvJw6bb2NtpO25eb6ZbGLD2UlqbftKWppl27KKwpuSlb3kpUaiUzC31ty1cblxsZGtuBxsSdNrdPlU6IFKCQVKO7x6yfHPHz1Puu8cHcQLcxyw1mDJ3RaM229UJQKc8kr9FKdhUqZU2WlJM1JTkip2Tn0bliVUiYlnG5qRlnUQ7aTs5pu1LCb2G5wMtVaUD81hipvCwlag4kdpT5hwArRTarkQ0\\/a\\/m0wmXnUIWtjKq1NlO0ScwBiBqYKnHaNOluXq0mk37SXKvRfaSqyRNSqlqdYJKc5LsupaG5lxYnGS081NsNTUu4l1h9tDjbiDuU2sA55ZDeOBB1SD5qvO3x3fgTitMYUX9T6y6pxdv1EopV0SreurXpUw6j9dttDMLmaW9qz8sEgLdDcxKhSEzKlp1i6KGkhaOOWG1s3za8yFUK5WdV2mvzDbk\\/atysBtFWtmqbLINzMpNKCcyltucadk6rKoVJ1Nt5zL7yk9CP457o+VMs5ijZVjmVqEmJikYkwnWQ+x26SlxickJgodlZpq4S42rK5KzrBJafYW60czLvpfRkopeKKKQFNT9JrEikocbV6D0tMtpU060q2ZKglSXG1ZUrbcSlVgtNhrR+UHaCcvhfihSdNPDCnsqw2x1qTVOxNapjYck6Fi07JPT0rcwUwAwimYmUaVdqDj6AtCrrpNbnpybMxcsgzEbEkk+4dEeizh5SLE0wtHHFLQ7xmb8tpNftKcpdMmdZtU9LUlTrMzRKvSdqoZ17Dy55el16jKd2jCfJaY0tpyVkZltcA\\/SDwBxF0csdb\\/0er7pjgvqxLsetd5uTZmFNV9L7jTlv1uhNuITMTNKuqlzlNrNDcKEuzEjU5XWbS6pSB9j8O4qpG0PCdB2h0IJakMQywVPyZczro9cY\\/J1amvKAF1MzKHShwpQJhoJmEISy81m+cG0vBs1g\\/Es7IuoJaW8pTTiU5W3Av8o262NQETLZDyUXJQ4XmRqyQJRXycXARqg4S416SNUlECp4hXZJYYWm+626mZl7XsaVarFxzcmvJLLkhX7kuCSkH8i8sTlkFP63CT5Rtu0rroE1XbftNhwFukSL1Vn0pOaTOVNSW5Rp5JH7LLScquYQQDm3Uc8xxR2DoVYDy2jBopYG4IFpqVqFiYf0pF1KbU3sHb3rQduW\\/ZtDqCW1sTF4Viuvy6td0hhbadu7kFLwqxRveUrlz3letRmm5SkiZn6gqdmlIaZlKDSmC1LPvrPmtIl6TKNLeWrJIDalcdx+cflCYuVVl1BEs4XTX6t5vLJQMyl0umlsM5EpuQpwsyAKECyi65vJIV0bspoIp0rJJdQlH0ZIdvMFfohM7OjO7nKgBZAXMAKV9UNotYCyYqHLf4x\\/dVjtYWDdPntrTcKbPVWazKoATsbvv9bE64xMEZF4y1p0y15qW19YS3zxNoa1S\\/Ma2nuzZTaTUzOKHmsNBlBPAreJKiBwzShBB6nPX9bpDYtTeOOOWKmLU1twi+r1rlbp7MySp+RoLk2uXtymLJJJVSrfYptNT1Sgy5iWVuM+R0eXJA2s3rTSsgBkHMg2Tv35tJQR0kknLM5\\/RvZxhH8Xuy3CGEezDU1T6LKN1BKQkA1WdCqjWleiPqqqMzN2JuSlSQVKOp5jxrWziDEVbq4JUifn3fNiSbiTaIYkwb6+jJsspOgFxYJAsmOfdc1fNT9bn6vtPs9UNCQBmYqTxJPWSYRUrWPUOH2xIkI4e09e6IiAAPiecSwPktWj4qt4q6RelDVZALk7EtGjYOWfMzDKXGl12+p9q6bum5BxTZ2NQolDtWgSD7rbrT3kF5vsALamngZq0ah+Q40dzo6cm5gTJT8oJS58YJOfx+uoBKUKemMUG5OdtJTjYKltvs4ZyFiSE026S8ibk30LQwQWWtvEdYYMpv0VhumSyk5XXGBNvi1lB2b\\/AC5Sq35zaVJZ8GxFgUpjzeQYSRZTie2XpY5nPSAI5pQUJP8AawQQQRKI2MEEEEEEEEEEEEEEEEEEEM32W5htxh9tt5l5C2nmXUIcbcbcSpK23EKSpC0rSooUlQKVpO7zYeQR4Rf5aawda9fGPLv09tHp3RS0xNIDAtEq5KUay8Qqs7ZqHNZRcw\\/ubY3Xh+4pw\\/srxs2uUVE06klKJ1Ey19ZpQGJiFhYz4EcRzjvHjjEpn5Tpo6fMmIuAmlPR5AiRvegVHBu+ZthoNstXHaTkxc9kTc2tIG2qFet6rXPIJWrzxIWVLN\\/UbREVoEpOYJB6RHF+MqR9B4kqtPSnKyiaW9KgDTzWZCZiXSDoCENuhtVtM6F8bgVZUZbzSdmGLWShwlv+5r9Nvu0QoA24g+EcmlfAK9ff47emFQSk5g+npHdDFDoXkD9bgBzHs6OodsLpVlu5urmiKKRfUDXiOHq6+\\/CiRzyeGKCsQtHej0SemA9WsNKlM2VNJWoF5dHaQipW1MFvgiWZpc4iiS\\/++CiPj6yV5SYdF68RduElEZfe21StV162J3Wc117KQDbtKWUq85LXzRNSEulw+Ytcu7qndqtQheTQxS+4\\/G2oWJOTYZpGJ9DckmG1OBtsXRbiJiq0Z1SlDMbSmruCnttAoMzNT0ojXWpDaFywtDS9DRr9qloTTykyd30xTsmlS1lKazQ0vzjQSgnVCn6YuppccBTruMSrR2v0YT86dpFHOA9sVXbbQGabiUCqygULNBFWUXXQkCyUBqsMzbDaUmyGClIyBWWO2MEVX8LNl9OdUrtJ\\/Dx+jpm5uu9OShtBUr6yiuluyz61HVbySSSUlUQxOWY0en9FnlGcY2KVTjT7UxMrMpj7YOzlkSMm\\/TcRJqZqtwychLMlTDFPo+IUredvSkuwEsokaYxlLMNOJlm8cpOcanZWWm2VBbE0w1MMrGR1m3kBxBOWY3pUOHD2xKO+U0aMovXR\\/wAKNKahSO0rmCd2LsS95qXZTruYeYlPy7VJqFRmdmVmXt+\\/ZGk0umslbaG37+nlbyuIleFtXE\\/bokXF5v0h9UtvOZMs8VPyys+YAqeYQn8VgZx3vgquIxhs3w7WS4l6dpaVUKqKScyhMSQbYQ44q6vyjzCZSaVe3pTlrWtHLGOqSaZWptCUZGlO+csaG3m80S4kJJ1KWnc7IvfVB1OsdpA5ZEHrBEOW3QcgrcfxuY9vQfZDAKI7PHCFQQeEZqkkd45\\/PlEGjkQct4P298KhYPHcfZHHIcUjdxHQfh0Q6StKxuO\\/nHOIQUg7\\/bBDsKKeHqPD1QqFA9R8cIZhRHWOiFAoK4ekc8MLb\\/WPt+\\/1GElIPjz63w9StSOB9B3jx7IcIdSrcdx9nrjjwsjdxHXx9fGFAQeB9HPGOpvmPWOvVr6oR6SPD2j7vdHJAkcD6OaFAsHju93rjjkOqTu4joPw6PAhwlxKt2eR68uvgeBhooI7x3b+HXHnHt0q36H38Pb8e6HgOWRB6wRCgX0j1eO+GoUU8PSIvCweO4+z7IRCSgjdr8fZ+uHQIPDfFwURw9RhsDzg+kReFnn3+zx6oCOBHqMJh0Fjn3e7v98Xg84PpBhqFA8\\/oMX7xv3jPnhBQOBt74QUA7tOuuMPEvLHHJXbx9cKh5J45g+sesb\\/AGQwCzz7\\/Z49UXBaefMejuhotb9PWPsH3R5Zae8e37\\/ZHJAg7wQeyFA4sfhE9R3+\\/f6iI4wHnBy6CD8RCodWOfPthooPA390GYHRSevXu9scmH\\/xk+kdx74UDqDz5du728PbHGJfB+sCOzfCgWg8FD07j6jlCSCN4PXfBZB3G3r+f2e+OTBz3iCOPB5wfSD3ReHVj8IntyPtO\\/2x5HmQ8CD164ewQ2D550g9hI9+cXh9POFD1H4wR5lVy+34QtBCe1bP4XsI94i7WSeCkn0jvghNiN4i6CCCCCCCCCCCCCCCPLDkOv1D2QQQQQQWHIdfqHsgggggj2CCCCLdZI4qSPSO+CCLoIT2rY\\/C9hPuEWl9PMFH1D4wR7YngfZC0ENi+eZIHaSfdlFhdWfwvUAPaBnBHuRXh6\\/leHhOW8wmXUDnz7N\\/t4e2GeZPE5xYVoHFQ9G8+oZwQrIBvP2fGHan\\/wAVPpV3DvhIuLP4RHUN3u3+smGqnwPqgnt3QmXVnny7IUEqPC3jpBdA4X67\\/sh0SBxIHacoTU8kcPOPVuHrP2w0JJ3k59ZMWlSRz59m\\/wCyFhu559w+fL2QZlH6otw8N3qhdTyzwyT2cfXCRJ4k8ec8\\/pMJFZ5hl7+72GLSSeJh1LduFveeurQZCfrH33PXthUrSOknqyy7PthMqJ58ugeBv684TKgOf0CLCs8272+PVDgQB3+Py6PfCwkDh6+MKEgcd0WFfQPX47oTJ5yfSYsKwOG8+z7YVCgCdwi8nPMk9ZJiwrA4b\\/d64sKirj6BCKnEp3Z5nqy6uJ4CPQL7hc9da+6FZQNVH1db++3thUknifRzQit1Kdw3n2euEFOKVuzyHQPRxPE8ISJA4n0c8OJRffqeQ8Ot3KDNwSLcuJ9n64vUtSuJ9A3D1QmVAdZ8cYsKyd3AdXH0njCZUE8fVzw+lvdf1Addc49COKj13nrxi4qJ4n0cw8ZwmpYHDefZFilE9Q6ITUtKBvO\\/mHOYyEotvt4fOHIuJ5z64QW8BuRvPTzDs6T27tw4wktxS+odA+J5\\/d1QkVAcfVzw4BwHqg66vFSc8yT1kmE1L5h6+6LVEq7PZ+mE1LA4bz6Mh292Xvh1KOJ17uXz+EHXXXsipIHGElKKuodEWkk5kn0nxw9UN3HeZHpPd46umHACT8Tyj0Ak\\/E8ovW6E7hvV0dHbDVSio5qPr4D7IoTlvJhJSid3Ae\\/f3+Oh9COXrPXw\\/XDwSB484qpfEJPUT09nf6umEVKCBmfQOmLVuBA6Vcw74aKUVHNRz+A6uYCHwAN0e9W65xctalnM8OjmHjxzwgtQIKcgQQQrPeCDmCDzHMbjuyI7Yopee4cOfr+yEyQBv9HXDyEbid\\/AfPrxhxKNxPs+fy\\/VHc2hvpFzGibjMik16c2WBmK0\\/LyVypdLhlrPrW5mnXUykZllunLdSxVwgATNuvPOFqZnaLIJTLRsy6E1qmtIcebmJuXbbUX0uoUidlVgKYm0KTucCkkBxSSUqzQ6VFK0RCrr9Ilq\\/S5qmzW5LyCWXcgTLvozLL6RuOba8iQCCtsrbJyWTG43kr9LCfr9CXo\\/3xPf9\\/8AhXJ\\/96kxNzAC7ow\\/ZWiX+akbTVVMTlrIcYlm1BAU\\/b0xSnm21rpU9NL5b8qHZSnEtFVtGo8sDWKQ2wxilppHpTkkkIYka4QAFKclQG6fVFALKpYSk2sIRKPrX1x5O20ky0wMD1h\\/9jzC1uUN11Zs1MrJW9TwSbBEz6b8sLpCZvtm\\/TXOtpTIism9avYV10O76GsN1Khzzc4ylR+hmGiFNzchMBIKzKz8ot+SmQkpUlh9eopKwlYyD0odATC\\/TS0gNC3TeoLtMkl4YXJS57FGnTMo2+q9rPtdqqXVZFMnmQnyabrNoYpSElbNVl5lssz1sXHW9tNPMW7SKZOYeSlQYnpVicl81MzCAtBz35jcpChwC0KCkKTrKyWFpjN3RJxoXbdRnMLa66VW\\/dry36C+4taxSrlQkKTLJQSUok66mXalyEj6Kptya\\/MTMTb4oXyetrK8FM40wDWJpUtQsZ0WqiluvKPZUbGrFOdbpE2b6MtVNaGaXOOAAdqmmuOrbl5Z1UXltawLLYnpsnVmpYPztFfYmHW0\\/XmqY08l95sEWKlyxCn2wCLsrm2kpUt5IjLHHW6vuSw1uCaacCJ6rNJt+nqG5XlFUC2pgoVn5rjNOROzTY\\/3xjPIjMCNPypGNSMHNDrEVMlOJlrjxPEthRb6NbJ1abtbmBdC0hJDiNjZUlchbfbz2M49IjXSpYjd9pXXcmfuOi2fLPZtUOUVU6i2FDVNSqiUqYZdTu+klae2082VAHUqR3c8QxOW5xsF2432NglTZgrp2EtsLrVeaRkn\\/vuv9uRqKWHglwh1Mjaklb0zKLUhtba67PtoSEL11Y2y\\/D52obfsLUx1Afo+FXE12phIzseb0JaJ5YcSSQpqbrC6fSnrmxbdG86GtcS1D8FdmlUnEns56tjzCV1yqzVBJYSpKt4W1IImpxojULBII1UNK0nLqm5piWTxedQjd+Cknzlc+5Kc1HqEdypSEJSlO5KEpSkcwSkBKR2AAAdQjry0ZTazr02oZplWilJPM68VJBB\\/ctpdB\\/F1gOc59gKVnuHD3+PHV9V6o6XX0NDc0nXkFLAUf\\/KE29Y3C54xfVdQT+iPedfhaKKVn2cw74yL0P8AAKqaU+lHgRo9UlMyDipiTbdt1iZkklb9KtJU4KhetdaSASoW9Z8lXK450NU5R3b4xvWrLcOPjx+mJQXyXvRrF7aSGMWk\\/WqeHqPgfY0vY9oTL7KikX9io5NNT0\\/T3\\/qLfotiUK4KVUGgc25e9pMqy2qDGdhql\\/S9bptPy5m3plCn9Cf2O1d6YJ4XLLawL6XIA4QuTYMzNMMWuHHEhVt4QPScPqQFH1ROBo9KplApFLoVFkpemUejU+SpNJpsmyGJSQptOlmpOQkpVhOSGpeVlWGmJdlIAbbaSkjo5iCCOtAAAAAAAAABoBYWsBwHICLHGgAGgG4DcPAQQQQR7BBBBBBBBBBBBBBBBBBBBBBBBBGsnletGtOlFoA48WZJSXlt32Xb6sYcP0Ib2kyLrwxZmLgckKe35wM\\/cdrouW0ZUEpAXcJzcaABjzX0qI3cR44R660eYVykujUvRI018e8FpeRXJWtTrymbnw8JCVNOYc3shF02gyy8lthqYVR6VVG7enHmWWmvnSjT7IQks6goXbNRrml11tFwQqmzZA3EFT8mo211vNIKjus2m+oEQ\\/E8r6bE0BosFhw8lIupo31BUUlwcDZAGo3YSA849EOG3eZfoPf46uiGAJHDx2wsFA9vR44+OmKDUkjXeOt8RFSSO8c\\/ny68I+1s266rYt221edCc2NYtWu0q4Ka4SdRU3SZ1mdYQ8lOYcl3Vs7KYaVrJel1raUhSFqTEu7CXE2Wn5XD7Fi1Hg9KTsvb150fNTalKl5huWqaJKa2SloS5s1mTqDGsdm4XpdeS0qiHEh0p3HePd2ePXujfzyZeLCbuwdq2HE\\/M7Wr4ZVhQkELWjXXa1yuzFSp2qFq2znkVYbrkq4dXZSsqqmM6+a0ITyr5U2FFT+GaTi+Ub\\/ZWG50S064kekKZVFttturIBJEtUUSqGwdEideVxIPQPk+YhTKV+pYamV3lq9KF6WQokgz8gla1IQm4AL8iuZLhGqvNmk2NgRKh0gcJbT0tdGbE\\/B+qusKt3G3C+r0KRqLqS+KROV6jmati5ENtr1VzVtVz5rr8qjNxszlNZQpC066VeYrRaRcOF2KdzYdXjT36Lcdv1+vWLdFIm0lExSbntqqTVLqFOmUKIKZmSq0jNU9xJTrBwrBGeer6WmiBfSbhw8mLZmniuo2VPeSNBwlTpo1VU\\/N05ZUo70szCKhJoQDmyxKsJHFIiPjyrvIW4141Y8YjaWGiXV7Nr1Rv+epdz3LgtVp1NoXCLrl6dISFbrVoXJV5tdrVZ24ahJi5anJV+o2omWqU9UxIzU8lyUlDpfJt2o0SiuVrDmKapJ0ik4ilGJqSnJxxTcpLVqXUmXUh10hTUqmaacSpcxMKaYQacyhbiVLSFbfaphCbmlBclLOzUzJOPSzrbSSt5yTcAel3Ut\\/Wc7JVlBtsKWfOFEJKUnLHPSvLceHT0d8Kg84PYRH3OImDeMmC89T6LjThZfWFVfn5NM1L0u97aqtAXNtpUWnnqa9Py7ctVJNuYS60J6nTE3KrLZKJhQOQ6\\/BI4eO2Or2nWJhpD8tMMTTDoJbflnW32HUgkZm3WlLbcSSNFIUQeBjmJ5l2XdWy82tp1s5VtuIUhaVC1wpKgCCL7iIdpXzH198KA84PYR3w1Cgeo+OEXhRHD1QFF92ndw+6Gofoe5l+sfEdw9HGHAOeRB7CI40KB6j0QolSknNJy6eg9ohogjfBHIhZ59\\/Xz+PVCgIO8GGSHgdyvNPsPd6fXCwOW8GEFAO7Q+77oIdhZHHf7x7hCgIPAw0C+Yj0j4ju9UKA57wYZU33W7xu69kIKAd2nXL9UPEuqTuzzHQfgeIhdLqVbvqno5vQRuy9XZHHhZHHf74UCgeB9Hj4QwpvmPWOvVr6oT6Se8e3l6x8I5IEjeD3Hvi8L6fZzxxyVqTwO7oO8Qsl8fhDLrHDvH8ruaKDw1Hsj26VbxY8\\/v68YfAg8DFwURw9XNDUKCuBB7D7+iLwsjrHX39MJt6vH7fjxjwo5G\\/XXKHQX0j1eO+LwoHgYahY5wR1+Of1xcCDwOceQkgjeD13w5zPSYvCyOOR7fsyhrrKHOff74v2h5x8O+PCAd4hJAO8A+MOQsc+72xcCDwMNgpJ5\\/X4yi7MHgc4SUDhce\\/r2wkoT3j1\\/O8OQpSeBIi8OrHOD2juyhpmRuBPoJ+yK66uo9o7soQW766HdvFjw6I5eyPMhG4\\/Z84fB\\/pT6j3xeHkHpHaO4mGG06vb9kV109Y8dWcILXcR4G\\/zg9Md+7l+vuPRjkNoj8YeuLsweBB9McfrJPOPd74rmDwOcJLfeR4jw69Y9ZnVxT8Ry8eiI5DMjgcou1lDgpQ9J7447M9J9Zi7aLH4R9efvhPZngR17YM44p+3l3d3uEchtF\\/jGK7Vz8b2J7o47aL\\/GMXbZfSD6B8MoMh7uvVBmT+j7hD\\/aufjexPdBtXPxvYnuhhtl9Xqg2y+r1R5kV3e3roHuv5dH6J69fd8eZh\\/tXPxvYnug2rn43sT3Qw2y+r1QbZfSB6B8c49yK7uuvd4R7mR+j7h84fbRf4ximsr8ZXrPfDDaL\\/ABj7INos\\/hH15e6DIeY9\\/wAoMyeCfcO7r1D1PcyeJzimYHEgemGOZ6T6zFI97Pv90Gfknr2eqHu0R+MPXFpeQOk9g7yIZ6yekeuKa6e30d+UKDXifh1693tgzLPD3H7TDov9CfWe6LC8s9A7B35w2Lg5gfTu74prq6oUGu72nr16cx3QWWd5t67fCFipSuJJi0kDn7\\/VCJUTxMUzA4nKFhu3EDwHXwgDY4n2QqVjm3+7v9kWlZ5sh7T49EJFaRz59njKLdoeYfHuhYQkcL+MKCUjh7dYVJJ4mLSoDiYR1lHnPu90WkgcTlCvshXhCpX0D1+O6LConj6uaEyscwJ6\\/HP6osKyeodXf0wQoIUe7xhUkDiYsK+j280JFQTxIHafGcIqfH4Iz6zw7z\\/J7\\/QCdw9fs6tv14wqyU7zc9bwL++HBJO8nuHdCKnUp3fWPRzekndl6+yG6lqVxO7oG4QmVAcT6PHxhwN+JO\\/Tq\\/wgKydEj3a+zh74VU6pW7PIdA+J4mEiQOJHjq4wmVk8N3viwnLeTDyW\\/V3DU\\/r9sAQTqT9p69sXlZ5t3vhMkDeTFhXzAek+ngO\\/1QmTnvJh9Ldu4e8+PWnKFgAbuvGLyvPhu6+f7IsJyzJPaTCK3gNyfOPsHf6PXDdSlKOajn0dA7BDoAG4evjHsKqeO8I9Z+A78+wQgTzk9pPfFpUB1nohIqJ4+qFhJPcOcEXlfR6+77YTJ4knrJMWlQHWfHGEiSeMOgAbh6+MEXKXnuG7r5\\/shJSkpGZPfCa3QNyd539g7evxzw2JKjmTmYcSgnU6Dlx+6FpQTqdBy4\\/dF63CvqHR3wkpQTx49G\\/wPT74tUvmG\\/mz6Ozp5z0QiSBvJyHOT43xkJRuvoBw63fGHQLaCLiSeMN1ugZhPHPIniBl0DgTv9kWOOlW5O4e090N1KCe3oh0DcAPCAC+g3xcpX4Sjx5+kwipRPUOiKFRVxPDh1DqhNSstw4+7vh5CNeZ9w65+zvdSi2p3\\/D7+u+KqUB1no7+iESecn0xRSgkEqP2n4mGi3Cs9CeYfE9J93Nzk5CUgd54nrdC4ucdKs0p3J9p+zoHHp6B8+3dFz4U3vaOM1hTKpG67Iq0rUApBcDE9JIUWpmSqDbCkLmKbPyjszSavLlSRMUiefaU4hDesOYUrLt8cY+xw\\/wrxDxmuOXsTDKwrrxIueqtuoatq0KDUriqb8sUHyl5ySpkvMuMyTLWsubnH0tykowFPTDzTSVLC1OSjDEyqoiXVTXJZ9ipNzhbTKP099pTU4zNF0hrzd1ha0udp6Fjc7tMuQmJmVnJaYk1PImmX2nJdUuVB5LyHEraU0Uel2qVhKmyn0g4EqGoESltGLHS2cZ8OLUvy2XiqhXnTUzzEqt9LsxRK0yVStaoE4rUaBm6dUGJmQdWG2233pUPy6FNzbZVtn0UbOkzNV\\/Fevt7Gj2jKTjFNeeQSg1ASan6rPAHiml0tWxAz1VPVDWQQ5LbtMXJRckbpkYJy9+U\\/SKqlrYZYW16ep9eti0Za4JK9MQ5S4EsSaZ2oplrefmbRoslUqUpim1J5+5pyrIq1vyrjVCMiUzU5v3xlFHwmwco2G9tLdQirH5tQ9MONKn5uRlXkVCuVKbcYbYbXNVCadlWpstMMtZVBxDCJaWZaaT8n9pOHcN4UxxX3cOVin17D8i8qbpE3KzSJpp5L6G3pKXcebUUuvyankSk06lWR2Zlu1F0u5U\\/QmlY5m8TYQpMhMS8zI1+qNtylWbcl3GOwabKkTswhK0pCUzrTZdbYSCWmH3G1lKm0lWDuKOIdPZ+7zE+65xNOo1OlK\\/eNcm3NZ1FKoVJk5mpzajs0Fa2aXSZUoQEAqU3LZblZZwDsZcTqxjNiviHirXgUVO\\/7urlzuy2trt05ipzz78hSWVHWJlqPIGWpcoCpShLyrWstSgFKlEcsPjmMLdFtzD+nzQauTHKuN2kyhClJebtCieT1u8Z1tQBbWhzVoduTTKiCqWuVwo\\/YlasTenS3l07LSqcyHXUheWeYaTmp1WZ50tpUrjzdMdfeRJglVPwvibaLUGz51iafNLprziRm+iqOtTk\\/MtLAuUTtWdcYeBvZyjosBx5\\/wBu9dQ9VKXhuWUBL0aVEzNJSTZM3NoQGGljgZeRbbW3xyzq73um3ZNuyxlaUxrfXmSqZWcsjk5lsgefINJRu4BRVl0xzKlZbhx5z0ePHVQlKAEJAGQAAHBIHD1cw6oSJyBJ7THXjiy44tZGq1FRG+19wHcBYDuEc6KOYknibwE5Ak9pj0meQv0Y\\/wCxm5OjB1qpyS5K8cb25jSAvFLrOxmEO4iydOVZ0q6glb7C5LDemWaxMSj+o5L1MVAKZYdcdaEBXQP0bZ7S\\/wBL\\/ALR4lWJlymYhYgUtm7npPVEzT8PqCl65sRKq04tbTaH6dZNHrszJpW42XpxEtLNZvPtJV6sMhISdOk5OnU6TlpGnyMtLyUjIyUu1LSchJyzSGJaUlJVhCJeXlWJdtDLDDKG2mmkJQhISABcGymk5nqjWHEkhpKJGWVw7RzK9MkfxkNhhN9+V5Y0ubyPDsvmdemiNG0hpBtcZ12Kzu3oSEg8LOHfHIwQQRdsSyCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCIlnynbReE9beBel\\/b9NJmqBOzOB2JUwy2lbpo9W+cbsw3qMwGZYLalKZVmr2pE5OzUyttc3cduyEultRyflpxinpsaOFM0ttFTHDR7qaJZM1iJY1UkbWnZ7IS1Gvyl7OvWBXH1hp1aJWj3nS6HPzgZAeekGJqWbcbD+sY7iujiu0CpU0JzPOy5cldQLTbBD0vqSLBbqEtrP9bWsbiQcGpSvnkk+yBdZTna59o2QtIHH0rZDbWyjv3Hyzkr5jv6+jv8AfCoPOD6RCtXpdTt6sVW3q9IzFKrdDqU9R6vTZxBamZCq0yaekahITTRJ2UzJzbL0u+gnNDrakkdDRKiOzojjdbRSoggpUkkKSRYgjeCDYpI3EEaHQ2N4rWHaV57j6++MttC3G6SwMxyoleuCoKp1lXDJTtrXjMFp+YblaZUEomKfUlsS6HXVfNlclKZMvutS70w3ThUW2U\\/TrSvEMEHhF6VEcd493Z3RH8QUGRxJRKrQak2pcjV5KYkZlKClLiG5htSA8ypaVpQ+wopeYWpCg26hCwk5QIzqRUpuhVWn1mnqCZumzbE4wF5i2pbDiV9m6EqSVMugFt5GZOdpa03F4mYYSY0bJmSv3B+\\/abVKZUG9RqtWxVJCuUSqMtrStyUm\\/J3JunziWXMg7LTKFuyjwKClh9Pm5\\/Ye6ZchMeT0\\/EiiKpzv0bZuG323JiTUfqrenaQ4tU3Lo1RrvLp788tbpAakWm48+uzLzxNwouNV44NYiV7Du4HVJXPNUx9L9Arim1AhNft+bbmaPVm1qQgrbqdOn5dS20vGVLwDo2d4McrlVaKqUoWk9hy5LtDZsHErDVlU1T3ckIbS\\/WrUm31Lly44FvTUxSKolZU6USdstIRqr4exh5LmNaGHZ3BM8zjGnAFw04BEhiFgXKin6Pfc82qIQkgJcpk0ubfUCoU5g2QOsaDtjwZilLUtiWVVQakpKUec5lOyalEJSMk2hAeZSo5iETLK5dpKhnfVYkTb61RMG9Iaypy37lpFi4s2NUtXy6h1+m0q5aWHyh1DTs1S6mzMGn1OXS68qVdWxLVGTJL0suXcOsNKek3yBmB9+qqVyaNd6VLBW4ni9NN2XcBnLxw2mXikqTKSMzMTBvC1m3n1Fbk2KjdcjKtDyan0CXZCNn8ZglpGWHiVKNXngTipTK8JZLanpu1ay7KVqmJecUlDFapKzJ1yjmZLKs5Cs0+UVNNp1tgtiNhFh6Y100jYyV+Uli6JJOqlVVpwaplbbTkj6RxhKBS58pAIS0Gqa44VFT04omKYo2NMc7Pai7LSM1VMPzku6Uz1Kmm3mm+1GXMiepFQaU32v5v5aW7dsEhC0kgxJq3s+omJZRMwluRrkq6g+bzbbjYmQg8Zafll2WlJ1sh5KFEAKaXa0RF9JTk8NLbRVXOzuKGFNWmrOki6sYk2QVXjh+qVbdLCZyerlKaU\\/bbcwtJMtK3nT7cqTqSFiSCVJVGFQWRx4D2Dx0x6RVj40Ya4jIRL0G4pQVGYQUKt+rBNOq5K05LYRJTSgioEJz2i6a7PS+RALsYV6SHJNaF+kd5dU5zDlvCu9ppa3lXrg+qSs6eemVpWpb1VtxEhN2ZWlTUyW356bnbeFbmSlWxrUqt99aujsJeVLLO9jK40opYV6KDVqES60b2AU\\/TJlwOthIGZxcvNvqUSeylE+ik0HiHYtNSylqos4q6bq8wqiCy7bS4am20hDhO5KXGGk2AKn1XKognAg8PHbF4WRx39vH1\\/pjd7pGchDpPYYLn61gfXLex+tZnavtU+UWxZOIsvLtpU8sPW7W6g9QKmWG\\/oWlUW65mpVF5ClNUCWLjbEaa72sK\\/MMbgmrTxIsu67DuaSIE3QLwoFVtqssJVvS45TavKSk2GnUFKm30s7N1pSXWlrQpKo6Uw5jPCeMGe2w5XafVbIC1y7L3ZzzKTbWYkHg3Oy4ubAvMICrEpJGsU\\/VcP1mhuFuq06Zk\\/SyJccbJl3DoSGplvPLvW\\/wCydWdL20j5sEHgfRzwolakcDu6DvHjsyhmCDwhQLI47\\/f9vjfEjKDw17jv69kabrXXr1xyCXkq3HzT18PX35QqDlvBjjgQeB9HPCiVqRwO7oO8eOzKEEcCPUYOvlHIBZ59\\/Xz+PVCgIPAwyS8k7lDV6+I7x7e2FgecHsI74QUA7tOuX6oIdBShz59u+Lwsc+72w0C1DrHt8euLwsHdwPXw9B4Q0Wu71jr7ISUpPC3hpDsHnB9IPdCqXljjkrt4+uGQJHA+PjF4Weff7PHqhktnuPjv9\\/zhGRQ1B+w\\/L3w\\/DyTxzB9Y9Y3+yFQoHek59YMccFpPPl2+Mouz5wfbzQ2W7c08uj84M6hvHt0jkgpQ58x17\\/bx9cXBzpHqhgl5YO86w6D3jfCiXwfrAjs3wgoV3HrvtHt0HeLfD3Q91knnHp3e+LsyOByhoHEK4KHp3euL8yOBIhJBG8W674MgO4\\/b8OvjDrWUOf4++K7Q84Hu74bBah19sXbTq9seac\\/n16+HCE5FePr+cOdcdBiusnp98NtdPWPHVnF2sk8493vgtHljyPs5w4zB4EGKw3iuZHAkemCPIcZkcCR6YNZXSfXDfM9J9Ziuurp9g7o8sOQ6\\/UPZBDjXV0+wd0Gurp9g7oQ11dR8dWUGuege3vgsOQ9gjyw5D2dch7IX11dR7R3ZRXXPQPb3w31z0D298Guege3vgyp5Dr9XVzBYch7BDjXV1Dx15xTXV0+wd0Ia56B7e+DXPQPb3wZRyHsgsOQ9ghfXV0+wd0U1ldJ9cI66uoeOvOKa6un2DugsOQ9kFhyHX6h7IXzJ4kn0xSEMz0n1mDMniSfTHsewsSBxIHbFNZI5\\/j7oRimskc49\\/uggsTuBMLFY6z48c0Wlw8wHp390I66R0nx6IptOr2wQoJUeHt0hbWUef4e6LcyeJzhErUersi0kniSe2Drrox6EHiQPfC5Ukc\\/x90WFzoHrhBS0J4qHvPszhMvpHAE+z4d8e5SdwPXsHh9se2QN5v13Q5K1Hju6QPgePjhFhUBvUcusmGqnVngdUdA7zmYSz5yfbzQsN8z7IM4H1R7etYdF5I4Zk+oes7\\/ZCSnlnhkns4+uECtI58+zxlFhWebd7fHqhxLe4ges\\/H7wI89NXMD2feR7YVJ5yfST3xYVjm3+yEiSeJ9fjdFpWB19nf3Zw6G78ye7d136QoIHE\\/Lr2QoVKPPl2bosJA4mElLJ4buzv4+rKLSecntJ74eS3bu7h8+ft8YUABui8rPNu6zx8euLCc95MIqeSNyRrdfAd59nbCClqXxO7oG4eO3OHAANw9fGPYXU8kfV84+oeuEFLUvid3QNw8ducJkgcT6OeEysnhu9\\/wBnjfCgkndB118ehChIHE+jnhIrJ4bvf6\\/0RYSBxiwr6PX0+PG+HQgDvPwg90XkhO8+zieyEisnhwPtHjoi0nLeT6TDdb3EI\\/jH4A+njCwCdw9fCPQCd3t5de2FlLCRmT2CGy3VK3DcPb6YSJzzJPWSYsK+j19Hr4+OuHko5C558vl8YdCQO884uJCeJhJSiocMh0cfX0+iLSeJJ6yTDZb2e5G4fjc59G\\/KH0pA7z8PCFQstxKOO89HeeaGillRzJ7BFpIG8n7YRUonhuHv7e6FhJPhxMehJPhzi9SwNw3np5vthInnJ9JihIHGElKJ7OiH0N8vWePXW+HgkDx5xVS+Yevu8ZwitaUDfvPMBx7ezrjl6DQLhu2t062rRoFaui46vMNydIoVu0udrdZqk46cm5SnUumsTU9PTLh3IYlWHHVnIBEbftGzkMNMzG9dPrGI9PpOjpZU5sXnKhiITUL5ek3cgpdOw3o8x85sz7JUQum3nVLHdAbVk4NZna6LEOL8LYQlhNYkrtNo7SklbaZuYQmamAnQ+aySCqcm1Ag+hLMOq0Po6GNnTaPVKw72NMkJmdWCAostKU23fcXnjZllJuPSdWhOu+NL6lqWcyfRzDsEZR6O+hXpQ6VlQRKYGYQXRdtKEx5PO3i\\/Lt0CwqW4hZQ+mfvWvO063ETLAS6pdOl6hMVZ5DLglKfMup1ImBaM3Ik6FuASqdW7vt2d0hL5k9R1ys4rJlJu0WpoKOuql4ayjYtlUoobPVlbrF4zUu8jXYn0a2Q2hVu9MPMMqZK06eqNGt2RpsmzLUu3aYwyh2XkpdpDcpK06hUxorl5RpsNNS6WpZmSZbyAdaZyjmLGXlZUqT7aWwTRVVJxIKU1eulUlIJOoDjNNaWmdmW1fm+cTFOcSoEKYVwtag7Hp+bU2qszfYZrHzGnJEzNkcULfKVMNKH\\/AGSJpJ3hQiPFot\\/J2bHofzfcultijMXzUW1MTD2GWFbs7QbTStB1nJOs35UJeVumuSkwk7J5uhUiypuWdbUWKxMpUCnf5hdg3gLowWUbcwrsWw8IbOYDBnk0SRkKP85Py7bgl5uvVl7WqlxVUNKdSmo1ufqVUcStQMy4MxHQl5aVk3MF6TsajCSQrNKaxXEpmJrLIefLU1lapSXcB3oXMzE4hSMtpKpIjCnF7HOgWvS5i+casTaRb1Gl1LSazeVfkaVTm3dVbokqYzNvy8v5Q7koy1MpTG2fUAmWlFryTHKeJ9q2ONoE63K1GfqNacmHkolKPJpcbke2KgGkS1KkkBt55JslCwy5NOADNMOEkm+KBs4pFAZMyJeUpLTaCp6dmVpdnMgAzKdmnl2ZbUL5k9qhtBOjKQAI2J3rpR27Si\\/I2XIruGdSC2KjOJdkaK0vdktttWpUKglKgQpsop7agNo1NOtGMK8SMT6lcS5q7MQK\\/TpKn0iSdcdnZ96To9DodNbUXX3FvPLZlZOWRmFvTU28pxQGb77hb3aCNInlscN7YTO0HRxs6cxIrTanmEXvebM9btkS6koyYm6bQwZa7bgaUsEOM1BFn6qNRxt+bSsojRNj1pZ6QGkrU1zuLeI1arlNE15VIWjJu\\/NFk0hxA1WTTbWpxYpaX2GvohVJxibrD6Enyuozbri3V23gLyTtqeOyxO4rU3gOguZVlupMqerTrZKT+RoLbrbjCx6Sf\\/jMzIvNEhxLLyCEnW1falgzC2dmhNKxFUkjIX2l5ZNCrC+afWhSVgjKbSDDrTibpU62oaZO8qTpJ0fSK0mJ37jK5J1\\/DjDKhSVk2jVaTNpnKNW5oqVV7ouGnvNKcl5hucrM6qjsTso4uWqFMt+mTjJUl8qVglZ0p50xPqTmUgSzJO\\/JR855Qzy3hOzSM9+qo8eKvjJWVnZ1eylWHH1njqJBSgE5ZrWfo2weOayN3AR23S5QU6ny8urLWQ3rOkbwXlkrcyPFXnKKUnfmlIMfSeg4cpmBcI0LB1GKvMqJTpamsFZQZh9LKAqYnJgNpQnziemC5MzGVCEKffdKEJSQkctYhrEzWqlUKrOKSZqpTbsy8lF8jYWbpZbCipQaaQENNBRKg2lIKibk8iTkCT2mGjjhWchuSPb1nugccKzlwHR09Zi1pqZmpmXkpJh+anZp9mWlpaWZcemH5l9xDTDDDDSVOPPvOqS2002lTjjikpSkrUEnKbbJIAF1HQAa2v8Ab+od8fAv1u7zEvL5LPosCoXLj3pk3DTdaWt2SlsB8MpqYlkutKrNYTTrtxLqcq46M5afpVHZsajS03LBanZK6a\\/IF9hBfamJnkYKcm3otsaHGhPgDgI9Jolbnt6y5WuYjlGzW6\\/idejrl236h2ZQpZnGaXcVYnqFTJlS1EUSl0xlGzZZZZRnXHVOFaUKNQpCSUnK8Gg\\/NXFj5zMflXUq59kVBkH9FtI4RYNNlvNZNloiyyO0cuLHtHLKIP8AaiyNP0eZJJBBBEhjOggggggggggggggggggggggggggggggggggggjzzuX50Uxo56eN0XxQqaqTsHSXpxxhoTjbDiZJi8pmZVTsUaS3MKSlD06u62\\/uymWmvNk5O96YwckhMaRkOlO5W8dPOO\\/3+6PSH5Xbk557lF9Hu37NsiuWtaeMeGl3i78Obju8VRugvy1Qpj9Iuuz6xPUeSq1QplMuJk0ipKqEpRavMNVa16K35MiUdm3EwHtKPQl0odDO5hbOkRhJcdjJmpp2Xod1hlFYsG6ShO01rZvejrnLcqrxly3MP0tufRWae04lNWpshMZsJ5f2hYVnaXWp6oMSjxpM66JpEw22VsS70xYvsOqQLM2f7QtBeUKbUhKLlKrV\\/WJByVmnnEtqEs4vtELCTkSV2KmyQLIKVlQSkkXSBbkMYgQd6Tn1gwsFg8dx9kcYlakHMH0cx7RDpDiV9R6D8Dz+\\/qitikHfGnh6CRvEXkocSUOJSpKgUqSoAoWkjIhQOYyIzCgdx7YahRHWPHCFQQeHjthhSLG59ShoefXrtCSkHuPOOLkqNM29W5W6rFuCu2Ddcg5tpCv2nUp2jTsq7nnrNOyExKvM6+WSxKPy2sdzhWjzVZ\\/4Q8qDpG4ViWpWMNuUzHK1JcIbNfp+pbl+SsulCW0Lem5GTdpdVTLoRtVifoKJ6aeDqpm5EhYWjBcKI6x44QqCDw8dsaDE2GMM4ylRJYuw\\/TsQMIQW2XpxsoqMog2uJGryymanJAnUoZmktqVqpCxoZFQcX4kwu+HqNVZqUBUFLaS4VyzxFrdtLOhbD1gLAPNLAH1QIkm4Faf2jDj05KU+2cQGbVu2YLYbsrEFLNpXEqZcWhtqUkHpmZeoNanFOkpTK2\\/XKpNbtdbKU6uW0CxtIrFGyNjLsVw3BSmtVPzVcmvVGUsoB+jYni43VJUIScmm2p1Ms35ubLmqECClV7UoNc1lT8g0X1A\\/ruXylpsE85ebA2pGfmh9DyAc9VMd3YT6S+lZo\\/GUZw1xUnLqtSQCEN4fYhFVxUHyRrzkU+STPTKZulS2YJJtyr20veU62qpRPLmMfJKps6HpnAWJDJrN1poeLRnZvvKJWvSLPoDehlE5TUHUF6e0K4vvD+3+WmkNymMKM24nRJnqelNwTYZ1ycwvJf85brM0zaxLcvcgD0ALK0vbEruylLukZ6z55XmGYJNXoaljIDOblmUz8vtVEnUfpqmZdGW1nFDNUdtXlh9glpEWn8z35aWHeLtoPB7YMV+mUS7JCTdfSgOPyLz7U07SaikNNKTNSLsnUJZ1plSHGX5dCkw2MIOWEw\\/qD0nQdIPD2v4WVk7Npy5KA1M3RaDzmvk9OPU\\/Zt3JS5UJU2G2ZFi69bzlKnEJCArbNg7pB2Zfcsi68EsVqNX22m2XH5uy7kbNQkUuKVspesyErMN1GmKc1F69OrMpLuuBK0rlshmeV8V7K9oezmZTNVihVeidg6FStZllLfpinMwDa5WuU5b8mlxWhSlM0l9IIC0JVdItinzGC8YMFNDq8nMF9F102Ysp0pFipK5Gb7OZKAQcywh5k2ulSknMfusfuQQ0cr7VPVjAe9bswNrbu0daoE8XcRLBKwyS1LS8pWahJ3hTRMzCc5ibcu6sMyrTpMrR1pYRKL0j49ckRpv4EeVT6MNk4w2xLKWoXJgxMTd4vBlIC0rmLRVI06+mSGiVzLkvbc1TpZxp8CoOtpbeekvWbpe37Q0sy100+nXhKICUqfVlRawEpCUBPlkow5T3ghOX7LSzMOLGbs39YnKuz9J7Ci6dizNVd+1ag6Egylxs+Ry+0ITrBFWZVMUsNax8xc5NSTjiR+wp85IkOG\\/KK2rYULbM66ziunNlKS3WiqbmQgaKKKkwGamXFC1lzjs22i1w0dQYHiHYnQ50uOtSLlNeJJExSFDsCeGaRWFtJQN5DTMve9s9gLeeXP06fpM9N0yqyM5TKlIPuSs9TqjKvyU9JTLJ1XZeblJltqZl32lApdZdbbcQoZKTmIahZHHf749EvFvRv0ddJGkobxawqw\\/xNlX5QsSFcqVJk5iuS0orMEUO8aX5NcdJQcj9JRqxKKOWRVlmRp6xy5AfBC6ROVTALE67MKqm7tHmbYuxhGIFnBQH0UjJTbkxSLtpbKlZh2cqFXuqZbyJTKrPmx0JhTytcB1jspfE9OqeFJpVgt8pNZpSFaDWYk2m6igqVuBpRQlOqnrAmKYrOxrEUiVrpcxK1hpN7N38xndN92Zhapc2HKczEg2RewMTwKB5\\/QfHui8KKTmCR45xwPpjZ1jbyPmnJg0ubm5LDaWxgt6WKlCuYO1E3W+4jIKQhNoTcrSL7cmFIzDiZG156XadQttM08Cwt7WpXKDXrXqk3Q7ko1Wt+tU90sz9HrlNnKTU5F4bizN0+fYl5uWdG8Ft1ltQ6I6IoGKcMYqY85w3iCk1pkJC1\\/R09LzLrINrCYYbcL8svUXRMNtLFwCnURWNRo9VpDnZVOnzkiu5CRNMONBdt5bWtIQ6nkptS0mxsdIbJfPBQz6xuPblwPshZK0q4KGfRwOfUD8M448LHPu93f74vzB4HON8QRvEa2ORBI4HKLg4ecenx9kceHFp4KJ6jv9\\/D0Qql8fhDLrG\\/2bsuniYSQDvA+32wQ+Cknny7d32RcCRwPj4w1StKuCgergfUd8XgkcDlCC2Du98EOgs8+\\/3+PRFwWOfMePHNDULPPv8Af7N0XBY58x7fHqhstb9PWPsH3QkoSeFvDq0OgQeBHx9UXZkcFH0EjuhqCDwI+Pqi4EjgT46obLff6iOvhCSjkfC\\/zHyh2HVjnB7R+iFA\\/wBKfUe+GWurqPjqyiu0HOPj3Qgtdw9Wnygssbj7\\/nD4PI58x6Iv2iPxh644\\/XT1jtHdnF2sOkeuEFvuI+\\/2\\/rgzLG8cuB6+\\/wBkchmDwIPpi7M9J9ccdFdZQ4KI9JhOTkq3q+\\/nBn5j3xyOsoc\\/x98Gurp9g7oYbRf4xiodWOfPtGceZDzHv7uvUPUZk\\/o+4dc+tz\\/XPQPb3wa56B7e+GO2X1eqK7dfQn1HvgyK7urd3WvPUujl7vDv6156vdc9A9vfBrnoHt74Z7c\\/ij1mDbn8Uesx5kV3e3roHuuXRy93h16jz1ea56B7e+DXPQPb3wz25\\/FHrMU26+hPqPfHuRXd1br1HuuXRy93h16jz1e656B7e+Ka6un2Duhltl9Xqg2y+kD0D45wZFcx16oMyP0fcPnD3WUef4e6KZnpPrhjtF\\/jGLdZR4qJ9Jj3IefWnXqHqM44J+Hd3c\\/gPU+zA4kD0xbtEfjD1wyzJ4nOKaw6R649DfeT4D9cGcncPietYeF5A6T2DvIiwv8AQn1nuhrrp7fR35RbtBzD4d8KDX8U+v1eHV4LrPC3u5c+jrDkvLPOB2CEypR4kntJMI66uoeOvOLSSeJPjqhwN+A8PVfrugyKO8+8mFiQOJA6vG+LSsc2Z9nj1QiSBxI+Pqi0rHNmfZ49ULDXcTu7uXXgfXHoQONz111rCxWebd7\\/AB6IsJJ4n1+N0JFZ5t3t8eqLSSeJzhwN25DTxPr\\/AFwoADcBCpUkc+fZv+yLC4eYenx9sJKWlPFQHVxPqG+EVPj8EZ9Z3ezfn08RDgQB39co9hySTxMWKWlP1iAejifUM4aFxauKiOobvdx9MWQrwghdT5P1Rl1nefVw98IlRUcySfHMOA9EJlY5t\\/s8eqLConq7IUEE93XKCFCoDn9A8e+LCsnhu98JkgcTl7\\/VCZcPMMuvd498OBAHf4\\/KCFCQOMWFfMB6T6eA7\\/VCZPOT6SYRU8kfV84+yFgE7h6+EegE7h6+ULE85PrPjKEVPJG5PnHp5u+G6lqVxO7oG4RYpQTuPHo5+OUOJb3cTy4deOndDgQBv1+H39aRepSlHMnuhNSgndxPQPieAhMrJ3cB44nx0QmpaU8T6OeHwjn7B18PbC4vKirj6hwhJbiU5jiegfE80IreKtw80c+R3nd083PCBIHE+jnhwDgB6oIvUtSzmT6BuA7BCRWBw3n2fbC0rKztTm5eQp8pMz07OOty0pJycu5Mzc2+4oJbYl5eXQ48884o6rbTLZWpW4DMxsUwN5JrTrx4XJTNJwVq2HlvTgbUbrxheOHVNYl39RTM2KLVWV3tUJN5pW3bmqJadUZcZAWhZ2jId1FcxFh3DEt57iOuUmiSpCsrtTn5aSS6UgEpZD7qFvua2S2ylbiiQEpJNo2EhSqhUnQzISU1Ou3ALcqw6+pNzoV9mhQQm1yVKKUgAkqABI1wkk7zFqErdcbaZQt151aG2220la3HFnUQ22hAK3HFrICEAEnPzdYxK0wH+Tv2JSlSdV0kcba3d00kNuzFnYU09q16Gh1tWa5Wau64peq1ysyLwOSzI27aU4gE7OZQcnI3Q4E6EuifoxpTOYN4JWRZ9Vl2wpd3TUq9cV4pQhoIe1r1uyarFyy8u4lJdel2KqxIa+s4ZdGUc6Ys8rnZxQu1Yw7LVTGE4i4QqWZXSKSVpsClc\\/UGfOyEkmy5alTTS7EocKSCbLo+yPEc\\/kXUFytHYNrh5Ym5sJOoKZeXUW72tdD00ytJIBTe4ELbR\\/5KvTg0i1yc3beDdXsa15wNOIvXF0TGHdvGWf1CzPSkrVZVd1VyRcQouom7btutMFptRCz5qVbytHv5PJhJbfzfWdJTFm4cTakgMTE3ZOHrCrHsxDzbub9PqFyTK6hd1fpzzSdXyulosKfTtTqBGprq3lXTjrhtapcaerqKzOtEpVIW8lNUdzSM1IVNtrRTGVgjUW29PodQrPNGaFAY33XpVXLPF2XtOjSNCYJUlM\\/UCmrVIp\\/BcQwpLVOl1EHz2nmainMea6RnHNGKfKm2pYnDjFMMphKnLukIo4Ini2Rp2lVm0uzSXEm5DtPRIfmjKLHNceH9ilIl8jr8rMVR0WPbVJQZlAdDmRKN5ErQRple86GqjvAtkDhDo7aOmjBb7sjhBhdh7hPSW5NEpU6rSKbIyFUqUu0ULQblu6oKduGvuJU23lNXBWKi\\/wDRpzeGoIZXbpLYfW6HpejOTN2VBsFKUUtPk9NSscztUmUBCkfiuyMtPoIzz4xrPxVxupNuUp278ZMS6TQKLLKXnWL2uWSo9KZc2anPJ5I1KalpNMwtIUGpKntB+YUQhphbiwiNQ+OfLPaPNgmbpWENCuDGqutJLbVSaD1mWM27qDIrrFakXLhnjLvZBbcjbPkM4htXk1YSgtPqgGG8CbS9qNQceoNBr2KJx9203VnS89KJdOUXn69UltSTTnG03OJcVrlSqxtYE0jCGEJdtNbq0hINtoBbp0sEtOFOmjMjLJcnHUaWC2mUIGYZiDaJA13aRWId0baXk5xFsU5wFIlqIVtTZRlkA9VnFqnSv62apRck25l+xZZZa5se9NzRu0ehUDinipSE3S2HFrsyhvLum+pqZW3tENTFDpapuaprkyFAtztwuUinrKhrzyR50ReMeOU50s8dRN05y+v1M7TmQ639yuFqZq2G3ZZwLbLVSuPyubuypJeYUGZ2WdrjdJmlFSxSpcKDaNfpL0y6pSi6+++6palErdeedcVrKUonWW44tRUpSiCtRJ6DHX2AvIdnHizPbScUJlW7pWqh4Ys\\/NEaKKJmtTzJl5dYtkcblafOIUCS1OpKQTW9a24ycohcrhGioFgUioVNPZouNM6JJhwuO3GqHJiabIsO0l1XKRvT0gOW2xCuIztE0dLHkcPKaVOtMXve7clc94PNBWbM1JW4EO2nQX8vNcYqSrzZKc8ltLOsnTXiNiviPi9cDt0Yn3zc99153aBNQuWrTlTXKtOELVLU9qYcVLUyRBSnZyNPYlJJoJShlhKUIjg5C0arOBK3kCRaORzmAdqQd+aZdOS0qyy3OlrM88fb0+1KVI6rjjZnHk79pM5KRnx82X\\/YwOGWvtFg5+dluPZODdnWzXZkx2OEMN06Rmi32b1SQ357WJkEDMJmsTanpxTajdRlkzCZdtSldlLtpOWKNxDjOvYjcK6zVpmdSFZm5VKw1JNHgW5RkNyyFAWSXA2XVADOtZF464kKRUamQZSWcU3nveX9Gwnfv+kXklRGWSkt66xwyHGPtZGz5ZnJc88ZpYyOybzbYGXEFQ1XXN\\/A5tD8ZKuMfZEgAJSkBIASAAAMhuAy3bgOaLFrCBmfQOmJW\\/U5h70W\\/yKTwQbr9bhAI53SEWiJrmFq0T6A7t\\/8Ajb\\/ZaEm2mJZsIabbZbQMkobSlCd3EAJyzJ4EneSMzCK1lZPMOYd\\/X0xRSis5n0DohFS+IT2E93s3xhgHeo3Ud5Ovv4nmeiwAVG3tMVWrLMD1+Of3dvDcbyEGiUdKrlCcMn65SxUMOsAUnHi+xMstvSMy7ZtQkkWJRphEwFS01864hTtuvzdNdQ8Z+gU2vp2KmGZh1rW5gJo0Y\\/6Ud4t2Do+YSXvixdKlS5m5K0qK\\/OSdFl5uYRKsVG5q64WKDatIL60NOVq5arSaSyT9POIG+PQR5ELkz7u5OzAa+DjGLZex6xruak1u8UWxUDWZC2LQtumKlrNshysGRlWp6q0uoVe66rXJmlvTNFXOVliSp83UJemtVOcnWCMPTFVrEnMOS7qqbKvCYfmFNqDC1S57RpgLNkLU48EJW2kk9nmURbQ7elySpiYauhRZQoLdXlOQ5PSCCrddZsnLe+Uk8CY3cQQQR0hE4gggggggggggggggggggggggggggggggggggggggggggj5W7bNtG\\/wC3apaF+Wrbd62pW5cylYte7qFS7jt6rypUF+T1SjVmVnabPy2uAstTUs62SAdXNOcfVQQlSQoFKgFJIIUlQBCknQpIOhBG8budxpAQCCCAoHQhQuCORG4g7iDwiNjpjfJvdGrF5dXu7RaueoaOF8TSnpwWbPInLxwdqMzqaxl5anzMwq7LJE3MkrcmqPWa3RKYyfJqTZbbCGWERUdLbk0NMvQompyYxtwfrSLIYmTLy2LNlpdvHCyeDky5LSbi7tpTBbt1+pLaUunUi9JS2bhmGsnBRkbhHp+Qxm5SWn5aakZ6WYm5KbYdlZuUmmkPy01LPoWy\\/LTDDyFsvS7zK1NPNOpU282pSFpUDFeV7Znh6sZ3pRs0ecVc9rJoSZZSuBdkiUtW1\\/qCpcqJusrtaNHN0CTmLqZBlXDrdsXaPi0SABwAbUgdxjyJEPEZBW8dPP6uf3w5BBGsk5jmI8bj1dsehDpecgloNaTZqlx2RbM3oz4mTxffTc2EErKS1mTs84UlLlw4UzWztV2Wbzeedbs5yxKpPTTxdn6vMpa2Ji66XHIQ6dui6KpcdtWfL6ReGlP2r\\/3XYNNTlWuGSkUIW5tq\\/hjMIF5ybjbTUw9OP2\\/KXZQqay2HJ2utF1CTS9c2dYkomdwS30jJpuRM08KeypFtXZYDzlqwN1qDa2k2\\/bTEXm6PPShJU0XmwL9qxdxNt\\/pJAC0WG8qTlB0CjYmNNgX0+vv+yFOyEZhmZkpqZkZ+WfkZ6SfelJuUm2XJeZlZqXcUy\\/LTLDyUPS8ww8hTT7DyUuNuILbnngxQKI4eqICpsgkWKSDax5jeOYI4g34erVw7C+n1\\/Z47IUB5x6IaBYPHd29\\/6IUBI4GGFN91j7uvCEFF92ndw+6FZhmWnGjLz0sxOS6hkpqYabeQrdlvQ4lSSRnkCRmMvNVuj5eWs9VDq0tcdhXHcNiXHIObaQq9u1Sfp83Iv8Q7KzMnMylRknAoJG0lJ9oJOeqlRCRH0wWOfd1+PthQHnB7CO+FNzD7CVtoWQ06lSHWVhLku8hQyqQ6w4FsupUk5VJWhQIJBGsetPvy60racW2pKgpJSoiykkKChbS4IBBGoO4xlJhjyjmmPg8ZWSvBdGx3tWUTsyi4ZfY3Q3LbUOkMXLSG5WrvThG0T5XXqdc4QlRQNZDbITsiwf5W3Rpv8sU7EJq4cFrgWoMOs3LJv1+2TMLVqhuXuegSjkwylJBD0zXaDQpVnLznAk6x0fpeUNyvOHTz90cdU6DQ66koqVOlZpWWrtVo1JlII1ckTLZbfQBln5rgA83oOdVYo2KbKcYFx2fwumgVFy5NWwe6ijO5jclblLLb1EeUtRzOrMg28s3\\/ACqSoqi0cPbZMa0Hs2jUDU5VACfNqoDOJygABKXlLROISlN0pQ3NobSmwyEJFpjmF2NjFQkGrowexPkavSJhQUmq2PdEnWKLMrySotTXzXNzVOmFgpzXLTSXCjZ6qkJUkkZe2npg31SdmzdlKpV1y6cgqaYCaFVFbslqU7KMu0xYA89LTVMl+f6Xhs4AtFtu6LDrCbkwqv8AuqwK83lsp2h1qpUqaCQQsMfOVImZKdTLk5a7LxmkODWS4haMozNw95S\\/TMwoDUrfErbuNVBZDaNvW6Y3K1xplBO+Wr9rppkztD\\/fZu4aNWnSkg62YKo5rxb5G1Re7R\\/CGI6JiNs3KKfWmlYcrYB+qwzMZpinzS0j6zip2QQqxIbB9GLmo+3bC9VCGsR0Z2QeICTNSpTNs3sn0lA+bzbKTuyNedqB3k65Z4dq6U2FdxbNqfqM9ak6sBOwr0osSxcO5QaqUj5bJJaSeDk65JlWWYQI+xvnC\\/BHSAt9EjiDY+HGLdvLbeblFV6i2\\/dsvKF1B2jtKqEyzOuU2aTuW3NU2ZlpxlxKXmX0KQhcREcKuWI0c7uVLyGJFDvLCKqLWhD8xPSRvK2GFK1gUpq9usCuktrTqrXM2hKNIC0rUvVLpb2ZYS6QeH9\\/Ibr2C2Ldv3A6GW3nXbIu6XVVpJtZCkIqUjITbdWpbgUQVStTlpR1Cstownn5gxRsV2g7P5pM3UqJibDDssvMzUuxeVItuj0QZWuU5ZkysaekzOvKF0q3EXsWTfwdilpTVIrdPnu2SM0jMKbcdWk5TlXITQZm0oP\\/AGrKhcFO8G3f2M3IbaHWIapiew7XfWB9ZdCltNWtXHbntZT6yorenKBeqqvUEoKidnLUi5aLKs5FLLCGvMGqjGHkFNKCzlTc5hFe+HeMtKZP6zkX5l\\/Di8Zvn\\/8AkVX3Z+0mAjfrKcvxKs\\/qtnPdudtnSnxWt8IanajI3RKNlKNjXpFKplLe8EIqFOVJTTi937LNuTpJyPVGQtt6Y9rTuozdNt1ihvKKU+UUuYlq1JH8ZxxLvzbNspOZ+jalpxYH4StxGxoe3Pbrg3I2zXF4mkWbAStdDVazgFNkqm5gS9cIy3TlbqAAB1USEqiJVvYvhqoZ1\\/RLcq4rXt6M6ZNQuD9WUsZS+oOkqrUb7GIS2LeidpL4DmaXi3ghiNZVPk3nJd24KjbU\\/NWmtxrPaJlbxpSJ+157IJ2gMjWJhJb+kBLZSqMewsHju7e\\/9EejXbmMOGt16iaJedGemF6oRJzcz81T6lK5kSNWTJzTpTl52yZcTuyzMdLYq6C+h\\/jXt3cRdHrDOrz82pxyZrtHoaLNuebU4clGZu2ynreuOZzJ1mg9VF7Jxbi2tVa1qNyUHy2ktKalscYAnJVzQOzlAnQVk6X7OkVZMuU2+t6VYVobWH1jVFW2DTDRUaVWgD+bL1aVWyRu+tNSwcJ32uJEAaHUHSABF4cWngo9h3j28PREtDFTkDNG65lPTWFOJuJmFc8844pMnVk0nEa2ZZGebSZWQnEW3cZKTmHFTd4zxWNTINqC1va4sTuQf0tLTMzNYdXXhdixINrWJWUYrE7ZVzzCEJ1m1u025ZRNty20\\/Y9T7sX9VwbyWwXYvjDnlNbGMRhtCcWt0OZXa8riSTmqSW77u0nlodpA1uCU1FVtL2BBiuqlsuxrTSpRo655pN7O011qdzWtfLLoUmbO\\/QKlk3NwLkGNKAfP4SR6N3vz94hQPIPOR2juzHrjJ\\/E3Qb0v8HTOLxA0dcUqVJU9RROVyl21M3bbEuUEJzcuqzjXrbDSifoXk1VTTu\\/ZKXkcsV3W3GXXGHm3GX2VraeaeQtt1p1tZQ4240sJW262vNDjawFIUNU7+F1UusUauS4m6LV6ZWJUgETVLn5WoS5zWKbPSbrzZzA3TZWosRxtCJqSnJFwszspMyboJBammHZZwEGxBbeShQsdDpodDD0EHeCD2b\\/dFwJHAn17vVwjjovDix+EfTv9+cbGMWH+urqPaO7KLtp0j2wx26ucJ9o+Ji8Pp50kdmR+IhOVPL7PhBDzXT1jtHdnF2sk8493vhoHWz+F6we7KLwpJ4KB7CDHmQd8EOcweBziuZ6T6zDaK5kcCR6Y87Pv933wQ511dPsHdBrq6j2juyhtrKHOfTv98V11dPsHdCey7k9er9ceZRyHshzrnoHt74Nc9A9vfDfXPQPb3wa56B7e+POy7h1br1Hnr5lTyHX6vjzMOdp1e37INp1e37Iba56B7e+DXPQPb3x52PcPaev1HuuZE8vefnDnadXt+yKa56B7e+G+uege3vg1z0D298e9l3D2+HXqPrMqeXxhxrnoHt74oVq6h6O\\/OENc9A9vfFNdXT7B3QBruHr9Xj1fnr7lTyHXXVzDjWV0+6KZnpPrMIayjz\\/D3RTMniSfTCg34DwHh4dAeosOQ9nXIQvFNZI5x7\\/dCEUKkjioDtIEe9mOJ+z5x7CxWnrPo78ooXOgevu+2G5dQPws+wE\\/ZFhfTzBXpyHxMKCEjv8AGCHJWrqHo784oSTxJPV43Q1L6uZIHbmfiITLiz+ER2bvdl7Y9AA3AQQ8JA3kgdu73xYXUDnzPQBn7dw9sM4prJHOPf7o9sTuF4IcF88yR6Tn7Bl74TLi1cVHsG4ezj6YR2g5gfd3xYVqPV2QoIUe7xg66+PLfaFosKwOG\\/x0\\/phInnJ9Ji0rSOfPs8ZQoIHE9ddCDrwhUrPNu9sWE85PpMJFZ5t3t8eqLSSeJzhYAG4QQqVpHDMnnyPX2d8JlZPUOrxn6oSU4hPE+gb4QU8o5gDLr5+70wsJJ7hzPX3d8KCSeFhz9m758dbmHJITvJA7YRU+PwRn1nh6uPuhuSTvJJ7YsKwOG\\/s+P2ZwtLfrPu68dO6FhAG\\/X4ff1pCilqVxOfVzQmVBPH1Defs9OUJlZPV2d\\/dlGRuGuh5pUYwiWcw20fMWbpkJtSEMVuWsiuSdsqUs6qUruipykhbjG87y\\/VWkhAcWSENrUnGqFSpVGlzN1ip0+lSid8xUZyXkZdNrXzPTLjTYsN\\/paDW9oypeVmZtwMyku\\/MukaNS7Ljzh4aIbSpVvAd0Y5lZPDcPbvy5z9mUJlQSMyR39Q5\\/VG6XDLkIdNa8y0\\/fT+GGDskSPKGLlu9N1V5I3Z+SyFgStzUOYUPwg\\/c0mCAfPGQMbIMK\\/k9mB1DXLTeMeN+I2Icw2lpxdNsuk0PDmjLmM0l2XmnJ833WJuTSkKaSqUqFDmnVhD+1YBVKxTGI\\/Ka2J4Z7RDuNJSrzKL5ZXDcvM1wu2ANkTsk0qlDQ+iXag2FH6pNlETSnbNcaVLKUUV6UbNszlRW1IhF9xUy+tM0e\\/JLqKdCbAiImSnidyRkOnn9HRzR3JhTo44+Y6TCWMH8HcR8Rkl9Ms\\/ULWtKtVWiyTpWGz8519qUNEpTaHCEuPVKoSjLRIC3EjIxOewm5N7QfwW2DtmaOWHczUpdDJRXL4kJjEqtImWyCZ6Vn8QZq5HKVOvLTrqco3zc23tXGJVpiWPk8ZS1e\\/MPrMl2pKqXJQKQiSZRLs0th9pUxKyzDYZaYYpEgHplphptIaaaalghKUhCRuyigcQ+XNIFTjGCcBVCfWrRmcxBPNyuXcApVKpKZ9bwVfTLVWSkWJuSQmwqVsLnXSg1WstIJ1VL0uVdmVkcQH5gMZSNNfNXAToDuJiC4O8g1pmX+uVmsSp7DvA6kLca8rauC4UXldiJZ3JSn5Gh2N87UF9xCSNeWqV5UZ8E6hSMlFG2XBfkBNE6x1Sc\\/i9d+I2ONUYXrTcg7ON4b2VOBITuNHtaZfu5hW01iVDEBbZa2beyGqpbuy64NK2zaeFt2\\/SazcD6SdVx7ZUeQWOCSHnxNT28\\/grpqO0Ex0bcGk7iJVw41SjTLbl8sgafKCbnSk5+YuaqRm29bL8OXlpVYyGrvJzo\\/EPlG7dMYBbSaunCki7cGWw+03R1JBAAyzxM5XmyBcDJPpGu64BFqUXYth2QyLVTfPXE2s\\/WHy\\/cgg+lKoS3LEaAWXKG269iqMpcKNHPR00cqYtOE2E+G+F0s1LlmbrVFoFLptYmpZSgpRrV1zSF1+qj8HaVerzagkBvWCEoAfXJpB4Y25rtIrpr822VAylvM\\/OIUpOYOrPKXL0tSQoAZtz7iwf73zxqmxRxttu1ZL7o8ZMVaJbtPSXCzVMQLwkaRKlSAFFiRVXJ5hDiyAA3KyQU44ShLTalLSkawMW+WH0T8P0TMnZD92Yx1loBDSLUo71Ft5L41ipM1cN1JpThZABAmqPSK2lTikZFSNotqK4d2WbRdpM8uap1IxTi+bfc\\/ZFSQzOTMv2l7Wna3PKVKt+lcFc1NMk2IuALCZzKMJYVYSirVemUxttIKJBosS67BKSQzJMpcmXU5SD+QYB1Tuum8hW59Ky4JwLYtWhSVGaOaRPVN1dUntUZ6q22ECVkZZYz3IfTPpz3HP8HGXEPGCpu0ubr+Jd\\/tU235IGYnZ2461JUC25BIIVtXtu\\/I0SSTu3urQyMk\\/W4RE\\/xf5Z\\/SSvYTchhhQ7SwbpTy3djPScsm9bvRLrC0JZdrNxSwoAKW8iX5O0ZOYQ79K3MtDVQnWNiNjDili9VfnvFHEG8L9qKFrWw\\/dFfqNXbkQ6c1s0yUm5hcnSpYnMplaexKyqASlLSEjOOrcD+QvjKd7GYxbV6LhKXNlOS0qDiGtixBWhfYusUxor3BxuqTgSr0lMLCEpVBaptqwtTMzeHaNMVN5NwmamP2BLEm1lpW6H55xNwSW1S8tfQBaSSUyrsZuVo0SMKROSFvXNVsYbilto03TsOJATlGEwlJ2PlF41Zym287JLOQdm6FN3A60jzkSjqjqxqPxp5ZvSRv7yum4VUa2MFKG6Xm0Tcky3el5lh1GzU27X7hkkUVg6hUpt+mWpT56WcUFszpUlDkajZGl1KpKCZGRmZgH++IbIZG\\/LznllLSd\\/MVg9Ufa0\\/D2ccAcqc21KoG8ssAPvauXAulSWkKz5xtxuz\\/AAsk9ZYR8mHYpgUtTE7SjiuqNWV51il5FTT2n1lZKKw0xSchXqjzmQmXUABPnCjmUqpK\\/tfxhWM7f0mmjyytPNqOlUq5YWABm87s+TYAKCZhDaiSezAsBxl8YiX7iZXHbkxEvS6r4r7wKFVe665Uq9PpaKitMuzMVKZmXJeUbUohmVZLcswnzGGmkICY4OQodUqZBlJR5TZy+mWNixlv\\/vrpSheXOEFav3Otq5dwSNtUSnBJZlEvvJy\\/XE3k+4SOdKFJDLZ\\/dIaQeyObzAHQBu+wReQqsrKMNylLkWZeXZQlphpLTcuwy2mwQ2zLMBKENpA9FAKQNBltpFXvTy3VrcUVuuOKK1uvKUpa1KNypZJKlKJ1JUq5O\\/WOuqfYSRqrqc2VHcdhKZhI6lPOJzI4ZhDSMt+S9+Y+ylKbT6anUkZRlk5ZFwJ1nlDnBeVrOqz38VEDmEPlKJ3cBCalZbufxxjXuzUzM\\/tzqing2DlbtuF0JsDw+tc8ybmMNbi1\\/WUSOW4ewaRUkAbz3nx6oRJJPuHRFCc95hBbuWYTv4ZnmHV05\\/b0Q0ATu68YRF63AncN6ujo6\\/HwhopRUc1H18B9kbXNEHkXtPfTFVS6za+E03hZhrUFNrOKuNiajYVsPSK0h4T1ApE1Tpm9Lvln2w4mTn7YtmpUR2abMtNViRyddalRaH3ybjQ3wJcpdz6QlTrOlVf0mETC6dcUq5Z+EUhNgBaTL2FSqjOVK4PJ1Fcsv7sLorVEqTYTNuWvIO6rLUxouCa9WMrjUoZWWUR+y53Mw0Um2raCkvPA30LTSkE6KWnfGwlaXOTeVTbRS2SPyrp7NBB1ukkZlix3oSoDjEK3Rg0G9K\\/TNr4oWjhgreGIMszOJkavdrMm3RrAt55WxUtFw37XXKbadJfaYdEymmzFWFXm2Ao0+nzjmTKpWmhd8l9w0tByk3lpwYmOYqVqWcZm3cH8KJyrW1h0HEFtRkblvuYl6ZfVzSjqVLS63bklh86y8lJRVZ+WzS5Kpte07XsagUu07Ltq37PtWiSvkdEtq1qLTrft6kSgcW6JSlUakMSdOp8sHHXHSxKyzbW0ccVqlRJP00W5RdnNFpuV2evVZlNj+WSG5VKgATaWBVn13h9x1JFiEJMSWVocswEqeJmFixsRlaB\\/tQSV2Ol1Gyh+YN0dUYQ4J4R4A2XT8OsFMNrNwtsmmHWlrbsmg06g05Uypttl6oziJBhldUq02hlJnaxU3Juqz7qdtPTT7xKj2vBBE\\/bbQ0hLbaEttoAShCEhKEJAsEpSLAAcAAABwjdJSlKQlICUjQJSAEgcgBYD1QQQQQuPYIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIwY0qeTi0NdMyVm3cc8Eraq92Py62ZfEy3G12fidJLSwiXlHVXnb5kqpWW6ehDfkVKuZVft9vU8+kOtqcbXGl0rPkyOJtsmp3Jod4wU3EqlNLmX5bDHF8Slp3w3Lh1IlZGkX3SpdNl3LUVIWVuu1uk4cSDaGFuJffeWiWE0GCIvWsG4dr4Uqfp7XnCt05LfsabB0spTrYAeItoJhLqRwTfWNfN0uRnMynWQlxX9Va\\/JuX\\/SJAyrP90Ssd1gI8pbHbRf0iNGK4Ra+kBg5fuFNVdeeYkHLqoMzK0StGXceadetq5pcTFt3PJpcYeSmet6q1OScDSlNvlIzjooKI6x0Hx9nVHrZ3fZln4g2\\/UbSv207ave1as15PVrZu6hUu47fqbKgdZmo0asys5TZ5kjMlualXW94IB35aO9J\\/wCTw6DWOJqNZwnaufRjvSb2jzT+H7xuLD5c26pSlPVDDi5JtTbEugHVYptnXJZck1qpybOSgupKzsen2c7lEnmp5sXKZWdtLTNuCUPpBl3Vn9JYlUxHJrDcwi6pV1D6d4bX+Tc4aBR\\/Jq46lTfKx3mAoFA9R6D8OmLwSOBjeJpOfJ9tPXAYVGtYeUC3tJayZQTMy3UcKJxbF7s09lbiWlVHDS4jIV6ZqcwhCVil2PM36UbVATNOlLpb0rXTaV22FX6hal8WvcVm3RR3zL1a2rrolTt2vUuYACjL1Gj1eWk6jIv5FJ2UxLNryVmRFU1Sg1ajuFqp0+akiVZUl9ohlwjX8k+nMy8ORbWsab9CY0D8s\\/LqyTDLjR4BaCArvSojKod6SRe4vcGOHCxz7uvx9sKA84PpENQsHq7e+LgSOEaUt+I8R19sYpQOGncevnD1Lyk7j5w69x9ffnC6XUq58j0H088ceF9I9I7v0ReCDwMNlJG8evr7YQQRvB674a1S26FWQRUqXKTK1ApD5aDc0ARq5JmmiiZRzDJDwGYyHNHwjuF7UjOsVW1a9Vreqcm4JiRmWH3S7Kvoz1XZSclnJWflFgE\\/SofdcQdbV1tbVT2Qlak8Cew7x6oXD4y84ZHpHDq3cR7Yy5eoTsqkoZmFhsgpUyuzrKkkWUlTLgW0QoaKGTUaHSHW5h5ogtuKTYggXuARuIB0G4ai3jH39haZenRg0WWaXiXP4iUKW1U\\/NF7Bi+2XGmglDLPldZS3eUs0ltISlml1mXaSnzVBX0ZjNrDnlqJiUeYp2N+Bz8o6kteWVjDqqLaeQjPVdUxaN3KbVrZBSm0u3kgKP0alDUDka7AoH6pz7Dv9m8Q2m5KTn2ixPSkrOs7yW5yXamU7wQcg6lQCj+CUgFOfqgmINmuy\\/FhcViDAVE85cvmqNCS7h6fKzb8s65S1sNzbv99IcQoAJUlQFon1F2pY0oeRMrW5xbKLAS804J1gJBF0JZnUzCG0nW\\/YFki5KVJVrEiDDPlIdD7E0S7MtixIWXVH16nzTiRKTNmOMKUBq7es1BCrUOsolILFwP6qgdfVSUqXsBsXGCttU6Wq+HWIr03RHgFS0zbdxN1SgTWqEgltEnNTVImkpBAyUh05HgdYxCjqeFto1DWUzLzVJeVv15CZXswrPMHyeZEwylJ+rqMoaGX1dVXnDi6JaWJWHlQNawvxJrts1NtSVtTdBrdZtOqeac0pE7RpwF1SchmXVNIV52aU62rFI4h8kTAtVDhw3jGqUcruU0\\/FFMlqzKKJ\\/qQnJJUgWGbkZXHWppxIBzBZNxa1J8oecAQ3XKJJTiNEqclXHZJdha61NvCeYcXvJSky6FEi2QAgz+aBpbYnUvZt1hmh3IynV2jk5Iqp08tIH4L9KclZRCiB9ZynuZZ5nduHdlA0x7Um9RFyWxXqM4rJJdpsxKVuVSrLepwumkzLbZA4ty0y4CdXM\\/ssQNrM5QjT0wpDbNQuo4gUmWWlQk75tymXW2sBQK1TFwUZNPupbToCUq8puFOp\\/e0sPLVr5e2Dy2061spPFbAqXdWlwJmatYNzuShQkLAWhu2bjkZtRWBmr6S6msyNVSc1ayefsT+Q\\/jpgOP0mmUDEzIUSH8LV5uUdDWhCjJVU0xouAC5aZRMm\\/otqXfWwqftb2d1UJEz55R3VWzF+VWtkKIGiHKaucSUXJAW600NMykoibnQsecJ7g1USV7UqVfVwarKpihEL47Pa1dmSl1k56o2DziVq81krO6LL3wXwJxpl1TGIWFuFmKDL8v5Iio3RaFq3Y6llLezSJSqVGQnZiWWwlQLExKTDT8s4A7LrZcQ2oRa7E5VvQ2vVUu1UryufD2cmMktSt92hU2AhxR\\/Y36naxuqiSgA1iX5qqS8qn6pe1lJQvN3DbSFwuvV5qYwpxosq4J57ZqS3Zl90iZq6MirUS9J0ypGpSzqTmdlMMtOjiExz1XNg+PcFTCpt2n41wo6wSW52cpVRl2xZQJUzVpZMs0UAgErZeWkFIuCL2lzDmEcQN9jIV2kVFLlv2IuYk5pZJNgFyqlJdSTc5Qtm51sDcXzRxD5HTQMv4OOSWGFaw5qDillypYdXtcVMUraZBAbpFfm7ktmWSyQotiUoUuTrFL+1CWUN4PX98n0sSbcmXsLdI276A2CVSdNv6yqLd7jgzGq1M1m3anY6WjxzfaoToJG6WyJ1ctqNj\\/i7Q9REve1SnWk5JLVYRK1rXSPwVTNTl5qa7VofQ6cx9Jlnn2tR9MG+ZUITW6Bb1XQkAFyVVUKTMunn2i\\/KZ9jWJ\\/3uTbA37hluepm0Xyh8LZRR9oVVqbLRAbZqk+3W\\/QuPQ7PE8pPNpTYWCUPegLBCkgXjR1HZJhWfKi7QKWVK1zSIcpq81gM37CVKpKt5OYqCj9bMTeNC998hPpi20HJi0K9hBiRLhL5ZlaTdNVtysqLIzaS9K3Xb9JpDSpoKyaCLgmEJcC0vuMICHncOr45NnTpw\\/ccbrejNiTUtkUjaWPISGJbbgcb2qVtKw7qN0a6S3uOSQ4y7mw+hp8FoS\\/aRpi2nMjVrdrXDS1EJzVTZiRrDKVK3q1jMOUd4Np5loZcWvnb35js2laSWENT1Um6nKc6sn6GrUuqywbAKR58yiTekhxyA8rJ37wdxNg07yv8AbvRMrdcwdQa+2gHtHk0udYm1WKbHzijVEyKE2vc\\/R9txFhcRBKhsBoLhUZZytyKtLJbeYnGUAWv6Lkut49xMzYbra6ef9dNiXvY80ZK9bOuuz5xKw0qUum3avb80lxaVrS2WKvJSjoWUtOKCCgKIQo5eaY+Wj0aZa9bBudhclLXRadblptpbD0kir0meD7Tmo24zMSSph1a0LC0pUy8zk4Fp80giOpLv0P8ARTv5D33W6OWCdZemR9JUXcOLSlq0QWw0C1W5GlStYaCmktpBZnWyQ2wd+yQUzqneXvJoUhnE2zGqSKhbtHaZXG5lSr2zFEnUKXTii19EKnXL8XBpELndgU23fzLETKzqUtztOdlrHSwU41MzJVe2qg0m28JO6PPyBI4EjsOUV11j8JXpOfvibZd3JDaAl2IdU3gq\\/as88dY1G0L8xApa2UkP+axTJm5Z+3UDXfS6CaMXApmXY1\\/J0qYONN1cgpoqVRDy7VxHxytSdcLhYbmq1ZtxUhgFExqJEi9ZNPqjuzfXL5lyvAuMMKl9zz6ZlqyKV5b+xefCRPNYwoaiQFmoUOWmG0brqC6RVKktSAbgEtJWbftYNwIvNbE8ZsX7FVInRa483nnGyeSbTctLAK3aZikfpGIle1c\\/G9g7ortl\\/uT2juIiSdcnyfFlWu7aOlI8jzxsJC5MJUP5tqdH7LVaZiDL6qmmvxaOUvO7s5dJzRj\\/AF3kC9JyUQtduYuYF1nUSlQbqs9ftAedGydUtLQl7Jr7IdLqUNNbZ9ppzaKU8+wG8l2FTfKl2B1MDsdokhLqNgUVGl1+mZSbXBXUKVLMqtxU24tH8a5tEfmNl2PJY+nh6YcG8GXmZCaBt3S804odwKQe6NGW3VzhPtHxMV25\\/FHrMbWq7yK2nlSFOCQsywroShbaUuULEi3ZdDwWwHVOt\\/dK5byg204fJnQ6hp0vnWaadlv1wenK\\/wAlnp+24lw1DRuuaYDTTDy\\/mG5bAuslL7wZbDaLXu2rqecC8lPMshx5hr9cTCG2PpBOJHbJsjqRSmT2nYCdWvLlaViuhsvnNa1pd+eafvrYjs7gkAgEiNG\\/g\\/FkvcvYarqEp3r+ip5Ten\\/aIYU333za2JvGBO3\\/AHH8r7INv+4\\/lf1Yyhqmgvpn0hSxNaK+PrxbfMsr5rwsvGtjagLJKDRqRPh1jJs\\/rloqlidUB7NxvX6wq+AOPVACzXcEcXqKG5oybhq+G1504InBttaUWZuitBMyNg9rMnN0bF3zfo1ESqUxVhWft5jifD87fd5pWabMXva1uxml77nde9tLxq3qVU5cXfp0+yObsnMNjTeCVtpGg38uPd1bt\\/3H8r7Iptz+KPWY5iftO7aUuZbqdrXFTnJJJdnET1FqckuVQlrarXMpmJVssIQ39IVOBA2eSidTfHzm06vb9kbxtbbyQtl1t5JAOZtaFpspIUNUqI1BuOYsdxEYSkqQbKSpJBIsoEG437+UOi+rmCfTmfiIoXl\\/uR6O8mG206vb9kU2h5gPf3Q5kVy94hPXw69vrc7Vzpy9A+IMWlaz+Er15e6ENc9Xj0xTXV0+wd0e5Fd0HXW6FySeJJ7TnFIQ1j0n1xTMnic497M8+ur9biF9ZI5x7\\/dFNdPb6O\\/KENYdI9cc3JW7cVU8mNMt+uVITjjbMmZCk1CcE06tzYoaljLy6w+4479ElDWuoueYnzsoSstNDM64ltPFS1pQm++11EcLnfuBhSUqWbJSVHTQAniBw17o4kuDmB9O7vi0rV1D0d+cdoU7A3HGsh1VIwYxWqqZcoD6qfh5d08GC5rFsPeS0d4NlwpVqa5Traqss8o7Rp2g5poVZYbldFTSCZJdaaBqWEl8UZsrdJCfpKzRZJvUBH0z2tsmAdd1baY0s1ifC0h\\/R2JMPyVhqZys06XFgEk\\/t0ygaBaCeQUOYvms0upzH9D0+eetb9qk5hzU6fmNq4pPfobDQ2xdzJ4kn0xaSBxIHV43xnpQeS40\\/rmcbbkNG28JdTrrrSTX6zZVqt67DJecLjt0XPR22GygFLLrq22ph4eTMLcmCG47hoXIsafNXLIqGH9mWsHTLhaq9iZZ74Y2oJcU79zNQuNShKkakxsQ8SSPJhMJzVEXntseyOm3TO7TsAsrSLlkYsobj4F7aMMzzjx1zD0WzqkjfoNoxg\\/FcwAWcN11xJtZaaTPBGoBt2imEovY3+tpxOovqoKwM8gT49fsi3XV1Dx15xvKt\\/kCtKudSy5cWKGA1vtuhla2ZKs33XZ+XCwovtPs\\/cDS5AvsHZpAYqcww6S4RMgNp2vfdt\\/J6ai4lDl4aU0lKuDIOSVt4Svz6Dm0grKKtU8QKeU6j5ebSDRlbRpCHtZhS1MNwmo+VJsCpYPnG0emPEfm06nV6qknklVNpU0gg6WUVhG85gBG6l9mGOpm3Z4emUXsbzD8lKgAgb\\/OZlo3F9Ra+h0vpEbckniSe2LFOITxPoG+JaNrcgJowyCQ5eOLOOFzzCACEUqfse16etREwHC7Ku2hcE8dy5ZbIaqjOo6w4XlPtTCWWsl7R5G3k\\/7XGtOYQ1e8ppJAam7uxDvyYKSVPFX6xoVwUClO5tvNMkTNOdITKsKQG3\\/KH5ivar5cGxGn5vM\\/wvrpGiPoygNS6Vm4AOas1KlKCN9zkKxY2QdAZDKbFMZTGXt\\/oqSBFyJmeUsp7j5mxN3PAWNr\\/nDfEJEvn8EevuHfzxzVBte6Lunfm+1rdr1z1AqaSJC36RUKzNlTpKWgJSnS8y6VOKQtLQDZ2pCggRP7s3Qn0QbBS19ymjRgjITDKkqZqUzhzbNZrDZCmlAJrdbptSrOqlbLTgbM6U7VsPEa51o7uFdsCy5JumN1W0bWp8ohewpjU5R6PKMJJ11IYkWnJZtClH+9tM67iiPNzIBrapeX9SSpbWG9mNWqCzcNuVOuy8ioAn0VrlZGmVUuX0\\/JpmkbxZ3SJTJbBJ1ZHnmIJZo2GZElT3pok31SFvTEqQLblFs6\\/mRBHsfk6dOPEQy5tvRgxYZbmwwqXmbrt04fSTrcwtKGHkz1+v21JiWcStLomi\\/5OlhXlSnBK5ujMuwuQo027q2K7pewkwwYVkqYaue9363VG05pCkNS1h0W66bMPgHPUerMq1qpX+uNbUSqV5U9ILCmllSV3Y3Ouo1glqmSVSn9pq55hL7MoqSOZI1FLmUIWTxyScuuqrpa2dL5po9v3HVHE7kqm1SVLl19JS4JqoPnj+HKN8wiBVLyy9uFZCkUHBVAoTStUPu02ozU0kHcRMVSos09YSNxMgASBe49GJlT9gdDRZU0\\/Wp5Wl0qcYk2FbvzUy\\/ajjqJgD13I0v2B8niorYlJnFTSYqs8tSEGco2H+H8pSksOhQLyJW5LiuGsmZQU5hp5205TVUQpTKvqxnRh3yJ2gTYy2XaxZF7YnzLLaEtv4h4gVhTYfSoEzLsjYybHpcy6oBSFszlPfkSFFSZRLiErR3dVdLa6n9dNGtqiUxCtYBVQmJ6rPNpOerqLZcpLeuP98XLrQQNzXDLrSrY+4qVcqSu65uRazVqtUmXkqblnlwmZdhM7kN2W0mllOZKQPOiuqrtZ8ovFGYVXaDU6S0u4UzSJqVoBShVgUA4Zk5RSwBoO0fJKbBa13VedU7ZFhWRylug00qFrmfU7USSBvKZtcy1e+pACU31AFhbM7DvRp0bsFGpebw1wUwmw9epqApFeotk21TK0kBYUl2duXyIVqZdC1IAmp6pPvJ1WkJXqIQlP2NaxiwzoBUKhelHWtJKVMU6YXWH0qHFLjNIbnltrz47RCMugc+nHEjHSxbOQufxbxete3SlKnzMX9fVMpj7maVr12TXqo3MPrWkKLbbCVvPK8xtKl5JOC9\\/cqpoWWMHWpfEmo35PtKIVTrBtWt1bIDMJU3VqpLUS2HgopWlIYrri0jVUUobWhR1VH2M7QsezAnG5TG+MJh6wcnZOm1SpA3JJL1UmEzjSUEkkuPrQm+85jcyB1OE8Ot9jPVmj0pCP+qpdkpJQsEizcsFlxZAsCEMFQTbSw0kN1rSwsyT1kUOi12tupz1XJjyakSTg5il5xydnBu4hynJ3b+qOna5pV37P66KNT6JQGiVarmxeqc6joG2m3EyainfnnTd5IBERZcROXLo7XlEthPgTUpzWJ8lrOIl0StMCB5wBmLZtqUqqXSSEkhF2NgAKBXv1k4HYjcrVpm36ZpilXjbmGVOmUFtyRw+tOnMPBrcRsq1dCrpuGVfzCVKmKdVZF3PWCdRpZajoTCfkM7S6n2Tk7QaTh9lWVXnGJ62h5wtm1yZCjiquJXbc1MSsuSqwcLYIUIrPbVdndMzCXVO1l1N02k5NzIVC4spyfVJslGmrjKXdCFJC9RExy7MXLvqEnNz13X1OtUqXbU9POz1VFHosu0NULdmWWVyNLZaTnkpam0ga31s98YAYmcopodYUqmpavY123X6rLAhNHsETt\\/Tbr4yUqV8rtaWqVEkpgDWC01SrU5LS0qbdcQ\\/qNKh5XzitifibOqqGIuIl733OKWF7e7rprdwrbUMwgMCqTs0mXaaB1GWWEttMN\\/RtJS15g+TkaTVqkUiRkJyaCiRrssuqaGRyOu6QGmwMtUFSwCoZAE5x01hjyFcOU9DbuLcZzcw2MpckcN06Uo0uhSQklvz+fVUVOtnVJUmQlFlJ9EoUM0Qaqbe53Kpuh0CRkUahL1QfcmlEEEBYl5YSTbSwLEJU8+kEalY0EiXFDlx7WldvKYNYJ12srOumXruJFckqBLtqTuC1W3bZr8xOMuKBUkG56Y6EgFaULUptOuHFTlTNMvFHymXZxHYw2pEwokUjC2ks2wtgZgJ2NyTDlVvNopGtmW7lQlSlLUtH1dXCiRw3uGZ1Vza5WnIPEPP7Z4Dm1WpbaoJIH1VPpIz87z4+vksNaUzqqnZybnVBIBQjVlGSd2fmpLr2Q4JyfBA54v3DexHYbgstuU7CFKqU61YidrCXcRzJcRbK8g1RczJSzoIBSqTZlgk+kkAkk1dWdp+LqvnTN4hnG2lXHm1OKZBnKb+grzJLKnUa7n3HSdMxNhbq6v3HcN1VR+t3RXq1clZnDnNVev1SerFTmTmogvz9QfmZp4gk5FbpyzVmeELSFs12okeTU2Y2assnn0iXZI46wW\\/qJUMsstQqPDNIXw78kaHR6YAZKnSrCkgAO7MOP7uGb7uu8T1lwk8+Zjkivo9f2eOyLRVXkMtpZkZNtlptIQ0lQShttCQAlKGWQlKEpAsEpXlAsAABEBcqClKUoJKlKJJW4oqUonUlVjcknUkqJMdRyOGr51V1OottD8JiSQXlkHLL6d4NpQoZb8mHBnuCiN5+ykbQoFPIU3IpmHE5EPTijNL1k7woIWAwlQPnAtspOfUlOX0pIGZUfSTDdbxO5O4dPOe7xw4Rq3qlPTNwt9aUHelv8mi2mhCLFXgoqMYqnnnd6yB\\/F9Ee61\\/AkwoVIaAQAAAAAhKQAABkMhwA3dZ35w2WtSzmeHMOYfb1\\/CLScsyT1kmElLJ4bh7Yxko1uNTzPX36x4Ega7zzPX398XKUBu4n3dvdCZOe8\\/oh3TabU6zUJGkUanT9Wq9TmWZGm0umSkxUKjUJ2ZWlqXlJKRlW3pmamX3FJbZYYbccccVqoQte47gtGHkH+UV0lzTKtO4VM4AWPPkr+63H2bmbIm0sJQp1RYw+YkqriY66+gITT3Z20abSZ5yYZyq7EsmYmmNvT6RUKm6GqfJTM4u9lFhpa0ovbVxYGRsa\\/WcUlOv1rQ+0w8+rIy046rTRCSoi5sCbA2HebAcTGmwrz+rw6e6Oy8J8FMYMeLrl7HwVwwvvFW7pnVUi37CtesXRUWmSHFqm5tmkSk0KfIMttPvTNQnjLSMrLsPzEzMMsMOOJnC6LXyZ7Q+woVIV7SJvC89Jm6JYtvu0Rwv4ZYXodSlK0Nqty26pO3fU1MPkjaz99pp1SZQgzFvtocdlzv+wtwdwnwPtaWsjBrDWxsLrRkyhbVu2Fa9HtSkKeS2lryualKNJyiJyfdQgGYqM2H52ceG1mJl51a3DZFI2WVN8odq801IN6KMuxlmprhdJWlQl2j\\/ABkuP96L2tupbD8y5YzDiJdPFI\\/KOHjb0TkTfcDnVY6lNt8JbRS+TIaUOJa6bcGlTiBaujtarv0s1ZtuuyeJmK77aUNLQxMfNE4nD2325tDqkN1BN13RPSTzDqZy2zkjOTxok8kBoE6Gy6bV8NsF6dd+INOQkt4r4wOy+Il+iZafbeZqNMXUZOVte0ak0Wm0CdsW1rWfLOu26te2mC7tAgi0qPg7D9FyqlZFD0wmx86m7TD+YWstBWns2VXG9htvvvEglaVJStilrtHBb8o9ZxQI4gEBCTv1QlJ1te2kEEEESiNjBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBHReNOjdgDpG0P7ncd8HcPMVqYiXflpT7tbXpVZqFHamCnbuW\\/WpmXNbtyaJJUmdoVQp84jIqafSqO9IIbdZafbU082280sZVtuoS42tO8pUhYUlQNtQQRCVoQ4koWlK0nelaQpJ8QQQfWIjTaR\\/yaHRav41Gs6OWJd+YA1t8zb8tbVdzxWw6bUoFySkJRmsz9Kvqlsl3Wln6lPXtczjLCm3mqZMPSy2pzQjpF8g9yiOAK52fouGVPx9tOWcSG7gwLqrl1VFbbqFOspcsCpSlExDcmAlKkTQpVs1eny0yjZCpvoclX5j0R4IgVW2Z4VqmZbcoumPq\\/qtOWGW77xeVWlyVCb7w000SNMwsLaeYoNPfuUIVLrOt2VejfvbVmQB3ICPGPJBuS2rlsyt1C2bxt2u2nclJfVLVSgXLSKhQq3TZlByXL1Ck1SXlZ+SmEEZLZmJdtaSN4zzjhQecH0iPVsxi0d8BtISi\\/c\\/jhg\\/hzitSkMPS8q1fNoUW4Zmmtvk7RdFqM9KOVOhzIWouNz1InJCcadUXmX0LBVGkzSC+Tc6EuJip2p4MXHiTo516Zc15eSpFUViRYLBWhzauOWxekyq6lKXMKbeQ1JYi0yRl2g9KsyaG1sGVrGq7HaxLhTlJnpWooGoZeBkpk7vRGZTsuogXupT7YJGiRuGjmMNzjdyw41MJ4AnsXDfuWS3bvLo4G1r2gkBZHX29\\/fnCgWk8dx3dnXw5vVG\\/nHn5ONp34YKnKhhNO4a6RVAZLq5Zu17jYsS9VSzAQtxyetnEBdHoLTi0lRYlKPe1fmXyypCW9uuXZe0zYv6OePmj9VBR8cMGsTcKJ5bhblRflmV625SoZFxIcpFSqcjL02sy6iy6GpulTc7LO7J0NPK2ajFbVTDNco+Y1KkzsogG3bKZUqWJ5JmW88ss\\/2jitNRprGifkpiXP5eXdZF7ZlIIQToNFWKVbxqkkX3m8dQg84PqPxEKJdWDxzHQd\\/t9\\/TDQEjgcouCzz7\\/Z49UaIoPCx9x69cYpQRu193Xth8l9J+sCOviO+FgoK4EHsPv6I44LSefLt8ZRcDzg+o\\/EQggjeCPGEEEbwR4xyQUoc\\/oO\\/7fbHHz9JpFUGrU6XIT2Yy1pmVZdWkZADUcWguII+qChaVD8DpFyXFp58x0Hf74UD\\/wCMn0g\\/A98epJQoKQpSFDcpCihQ8Ckg8OcegkagkHmCQfaI+CqGFFnzusqXYnKWtQzJk5pZRrEg\\/sc4mbbSD+I3qDVz1dU8Pip7BSaQraUivMrIOs2ielnGFIIzKT5RLLmM1awA10y6CAPqnm72DqDz5du6FAeg+o90bNitVWXsETri07sr4S+COV3ApY9ShppD6ZuYRoHCRyVZXvIJ98fC2tilpe4TpaRY+LOJdOp8tubptIvio1GhgISUI1bcn552nryRub1qWspTmBqqCExkTbHKt6a9ilhq6J+2L0aZTsdlfuH8rT1uJGY+kmbPVZky66lOSUvLdccc1UvP7Z1S1K6yC1DgT8fXFSoKSUrQlSVDIhQBBHOCDmDn2RoKrRMF4hKlYkwBhGsurvmmnKRJtT2v1iJ7sFzSFHiW3UXtzsYktNxxiak5RI1mpyqE2s1LT800ycpuApjtFsKSNfRU0U6nTU3zus7lvqw0ltnEDAGmzyl7IPVKzr3mqVs8tz626NW6HWS9rDNbDaq8wG8i0tx3X2jWU1o8sjorV5DLdx0bFOyJoj9cLqVs0qtUxpRdSkFiat6v1KovtpaVrqK6PKqzS4hLS1Bou6S521LWqJKpyg0xxZG91Mo0y6ejN5hLbpyO\\/erp6Y+RnMIrMmgfJ0VCnEghPks8txIJ3jdPom1KSDxAUCR+FredFdVLyftg9XKlDDFZw86s3U7RqzPLQDYAFLVQmKjLt20slmTQi4vluSDO6ftxxtKZUu1FudQkABM9ISboFiD6Tsu3LTCzvF1uLOU2FrC0oC1OUG0M7xUymk6QFlySnlpCRdiazY6UKU4GgHl3nS6CywlLm5Tri0tBv9c6\\/k5LkZT2Ljdalwlr9TXFu3q2pQ2jH3DX7TaipWaHHytr5gqr5IDYedJQPqBSvqhUQrpzA5s5qp1wrSOZuckUrz\\/+7sTDfON+Uudx5tU63y83g1dbGZl3aVPJzzAamnWVkZHcpEzLsoSRkeDqhv8ArRX9T8j3Z1UErRRtoNakEqHoorlMkKolJG7P2SaChdr2NinT6pA3TOT8oeo+iKhRaTMi4ziWenJC4sAQDMefgKOt1WUNd2ms+6nY24s0vVMrflfd2ZSR84voq4OWrlrfO7M8HB5uatpr62XDzlA\\/cU\\/Slxbk9TymfotVyA1vL6LLtlWQQCo\\/Na6bvVlmdQoHnq1R9TVgA0S7NJywMl2tfmLdsFoEpFp37cUpkAHCQG6FWslgpccSW0hSXA4tOqsOOIV21RtPbTksnVLGNt\\/p2RUc7spNGugDzXUKLn3ZUCsBeqHnCNqFZKDS8tdhrZVxVfIKmJrP9EYnwDVyfqLnqXMUtxd7WCnJFmsrRzJSXDvtexiTyu3jDb4T59huaaJPpGTmJGeIBy\\/VLgkSo7\\/ROQbtd9p68jph3c3kaladuTR3Z+QzFTp+sd5Or5RMVLLM6mWWuU5K+sVDV+vk9MmnqyFQsWdlzvzVJ19mbJIAAVqPUmSKdZesCnNeqN+srhEFy3+V30xqMtpdRq2Ht2pbUlSmrgsWVlUPAOIcKHfuUnbZXqrSlTStk42rUWrUWl0NOo7ponLZ42MFv7pMH8LatkWdr8xzV22\\/tEhS9sEeXVi5tmXAUBlSg7sCFqUh4qShutKr5AWOGirsKDhyokHRVKxRNSoOotkRUjTU6gXGZA1Mb2X2vbPJgAvN1SSJNrPyKiU95EnMzKSO4Enutvmyyml1h69umqNd0orWVkUydImmgkJBBUU1pt7WUrWTqpYUMxvXxKfppXSfwlmMg9VatI57MfrqiT68gs+dn5Eic\\/YeLmWeY3tbSIaFG5cSTWhtFwaOE2y4nZB2Zo2KDU0l3NZDzjcjPWJKKY1GykttqqExtV5pW62nzh2pReWywGe2YuDCfF6mZ7TafMqbOrgQeDIbE7ctvBYcHnOFQb2ZzShL2etFd1DyG9pUqFFWBa+kDQGnYgoFQuBqChLM\\/OLNwbgFIIvYpzGw2rO0LZtMkBvECWlGxs9K1KXCSbaFb8ihvQ8cxA1NyBeJfctpBYQTQSWb2lE6y9X9c06uSfnZbyozVMZCU8PPUEo4+dwjmpfGTC6YSC3f1tJzVqDyiqMyiicgcymZUyoJ3\\/shyQD+FvMRMabyxeiPPJR5VK4s0cqYbeIqVl0t1SXFBJMso0i6KonboJUF6ilS6tRWzmF+brdg0zlWtCOfIE3idWaIFS4e1qlhzf7oS4SgGUV8zW7V1F4BaySlJlsml5TSvow7DJ3yPdokrm\\/+TNo4sdeyor1RN9P3hT1XvuFhc8NxjZtYowE+oJaxXSkk2A7eelmBrbeXg0m99503A7olTNYi2BM64l76s58oA1tlc9Fd1db6usUTqtXMjtgnaxYVelEs1GqWjWpEuB5DE7O0apSanWtdAeQ3MOOsqdbBdQHUgKRmpPOc4xcnylehFPNNOs480lCH1FKBO2piFT3B9IWyXWp60ZV6XQVJzKn20BSMnEqDagpX1ctp86G82+2wzpCYepddOSVTU7OyLIUE5naTU7Iy8qzkBxeeSCfNHnqCYjjvkvY+lFBZw9tDk1NkqzO4NrTa28ls5BMuyUlN9TcZePOMkVTCDwyIxVh9wKsnL9K0twHNYJBHnRvfhvvyMSMJuyMIK1KJl6haOG9VknNR5LE3QLYnpRxSRmh5Lb8o60rU3hC9XdwB3xxrODGA8wpSJfCjCN9aU6yks2JZzqkp4ayg3SlEDPpyiP6nTX0RnFIbGkbhCFKUlKSq9KO0jNRGRU67MpbaQSclOLKUJT5ylJTH0X9lhor\\/AJSuj\\/8Anlw8\\/pFGMrYTtGlEhtM1juVSslSEKw9XWkn6oJyiabCiBlBItw3aCPQxhR8lSarQXikAFQdprtgdRch\\/TcbDQb7XuY30\\/qGYJf4HcLPzfWl\\/8Ig\\/UMwS\\/wADuFn5vrS\\/+ERoX\\/sstFj8pbAD882Hv9Ior\\/ZZ6LP5S2j+f\\/PJh38LhENHYntJH\\/8AlcbfyFXhy\\/8Ar\\/D1AR75hhf9\\/UH2U\\/u\\/7bw90b33sFsCpfVExhLhKwV56oesOzmtbLjq7SlJ1sics4fU+wsHaKy61TLKwzpMutZefRT7cteQZU4lOqXXUy0ky2VpQlILqxraoG\\/LhoT\\/ALLPRX\\/KWwA\\/PHh3\\/SOOCmNNjRIl33WHdI3B5TjSy2pTF9UGbYUpJ37KZlZx6XebJ3h1l1xsj6ilCFp2F7R5pJaM1juZGilITh+uuptcWUpHnblrXFiQY8LGFGLLXVKAySbBRcpzfiAS8N\\/EA6++JEchP4f2+y+KVPWbRZZxQemRT5miU1hxxPmpdfTLLZbWpKTqhbgOWZJzz3KPYh2FLpSX74tCXSs6qS7ctFbSpX4oK51IUd2\\/Lee2I3s5p76G8i+WH9IfDpbgSlZVKVJ+oy\\/n8AJmnys1LFX4yEuFaPw0pyj5ed5SbQikfKdvj3QXPJdfamTtu+6jrlGet5N83WnM+V55Zo8l221\\/vWvnD7XkxY\\/nFdp+D20OcUvKorawdWnFLCgkJVm83eK7mwSddLAawn6TwewMqsVYfaCbpyGq0xsJtYFIBmhlI1PDXfcxJUmcXcMpbX2l+WwrZ5BXk9WlZviQPo\\/JlvbUZneW9cZc0cLM4+4SSusXb0kl7LV1vJpCszp84jV1fI6c\\/tMgrz9TX1D9bLVMRk6hyrGg9JONplsV6rVQsFSnKfhxiO0hrI5BC01W1qa4VKGSk7JDqCn67iVHVjr+ocsbogySUGVRitVioOFSKdZUi2psthJSlRq1yU1BL2Z2ZQpaElKw8ttAQpchkvJA2jTVicFbSNf69Qpim79dfPpBNvqnfzSTvRnx3cT4CYNnMV0lVv6xPysxuy7ix2ydb\\/G1yFESjZnSZwnYJ2VaqU7qqyzlqHU0BW766fLWJM6vMAdVef4OXH5ya0tMPWQRLUm75teSSFGSpTDRzPnArXWS6FAcMmFJO7zuOUU2s8tvo\\/sj\\/cDCjGGqENIUn55ZsqhpU\\/tCHGleQ3ZcRQ0loJUl8JUtbilN7BCUB1fWVY5cyjNh5Nv6N9TnCS4lh6s4oytNCRqfRPPSslYtV2mq7kXJZM03rIT5k0hROrM6d5Du06aylGBMROAm16hX6BT9BluVB+ekSnQ6+iCNbC+ka93aBs1lyUuYhS4U6\\/k5SozAO63pSsgtBueRsQRciJbE3pf01skyNkVCZG7VM3XJaSJ88kghmmz+XmEKOWv5\\/mZ8XI+TndLq5nARTbUoUocsx5dM1CfAVqkZqDDlNzBVqkjWTkjzNY\\/WiHjXeW+xlmNr9zODGGNIBCgyK7UrquLUXsAEKd+b6ha+2CZnWdIQllRZVsNZCkmaV0xcPLDaYta2hps3hnaQUVEC3rGM0GwstlKWzdVYuY6rYQsNhZWrJ9wL11JbU3YVK8gHHr5QX8P4epyja6qril+ZSi9rBSacupoJ11yNqHInhqX9ruzqXBLSKpOEG1mJFQKtd487flkW8cpO4iJpM9pQYpTh\\/W8xQaZmScpGkJdySTmEp+c5ioHJPDNWtv3x8VUMbcVqnn5Te1Xa1h53kHklJ\\/i\\/NUtJav8AxMucxB4uTlHNNe69c1HHy55FC0qQlFs0u1bSDaFhxOq25a9ApDwWhLqtR5TpmApLbm12jbak9BXRpA473sXBd+NWK9zNuhYWxXsQ7sqksG1mY1mWpWcqr0szL\\/rqaQiXaaQyhEw8202hta0xaNG\\/9n3Vm8hqVdwPTiLZlU6lT9ZcRe1wlc7K0lSzr+mnNbfoI0kztzw61m+j8NTz9rZDNuSUmSLDVRa8\\/KeBASXPdE5+9sZKPQkbTEjFWmUZt1KXC5e18StOQtKy4lKyuvVRkLS4pxxKTnktSlZ\\/W3Yp3XygGhrZu1+d9IjDucDIGt9yk\\/N32CAjX+jFjSVwl46o3pZ1zr+Z9fNMQuUMT1QdcW0xNzrzjiluKQ27MurdcOupSylK1rccUoqKlZqUTnu5ualbOuibALNCqOqeCn5dUqDuBCkma2IUkhXmqB1Vf8VUWpS\\/IdwdIJQmu49q0wlNs6KVTaVQU6WPoedvVsJuLWJSrXUg7ojs5t\\/qtiJCgUqTFxlE5NTM5lHG\\/YfRwJPAjKAOB3xKOu7lldEW3xMN0FjFC\\/XWypEu7QLQlaXJPq2YKVLeu+tW5OMMFZ1VKNPdfSQtSZRSdUrxUvHlznClxiwNHttC882aneN9qdSRv3OUOiW8web6yLiOX4pjR5LYW3Y\\/kXWJKTzOWUzOtqKRmRmfJBNDLIA7tY6p+rrDVH0Mtg\\/NHUM7XJZrhtESsq5M55cUoW67LZbs0pWps5HztQ\\/VixaV5MOwGjZVTdPn8QON2KV1SvVF26kgC6maKabLLBO9C2FNEn6mkQ6f2141mgoIqspIJVcFMhISxNlcEuTDc28m3BSHEqHFRjPC9eWK0wboUsW9O4eYctecGza1lMVOZShSQlG1evmdu+Xccb1dcOIk2G1rICmSnVbTh3e2mBpQYipW1eGPWKVSk3CpTlMlbtqlEozqlHW1naLQX6ZSVlvPJrWkTsElSWtRClJU1lMJ7eZOtNTNRnFAZFBdZYazzG\\/Jpna59jxGRO7nT9LK2Pakin6OjSThG8qnA5OkkccxNreSN\\/EBIHQAnOLNpGEtlWGChVAwHh6Ueby5JtmhU\\/zu6bWKqhMtrn1WuSCp1ViSQRqTCKjjfEFTzCfrtZnEqvdpyemBLjMAFAMdqllAIAuENAG2ojGBTk1UZha1eVTs28pTri1ByZmXlqO9xas1uLWokKK1Z5nIbhHPSVm3PP5FiizqEqP15pCZFGRJ87OcWzrJyzJ1AVE7k6+YjKFpMrKJKJVhlpOf1WGkMozGeROohIPFRTkD17otU4pXPkOgbvX0xK3MTukBLEm02AAAXFlwWAAtlQGrbtwUQOfCI0qeUfqtgd6lE6+q3xjoqUwtrC987PSMmM8tVvaTb4HFRKUpZZGWe7J46xzPmc\\/1ElhfRWdUzs1OzyhlrISW5ZhfDPzEBb3HhqzG7j50dkkgbzw9\\/ZCZX0es93f6o1ztaqb9wH+zSeDSEt28F2Ln\\/nhhU0+r8\\/KOSQB77ZvfHCyVsW\\/TtVUtSZNCkbkuutCYdB6Q7MbVwK38QoExzWvkAlAyAAAyGQAG4ZAbhlze6EySeMWFYHDf46f0xgKU44czzi3Vc3FqWfaok\\/PlDBUpRupRUeZJJ9pi8niT6YsKwOG8+z7YTKiePDo5vVCS3Eo3cT0Dm7ej39UAF9AI8AJ3QoSSd+\\/4dg\\/RCK3gNyfOPsHf6PXHY+GWDOMWN9dbtjBzCzELFO4FrQn5mw8s64LwnmkrITtZmXoFPn3JaXQFaz0xNBqWl283nnW20qVG4\\/AL5OryiOMCpKoX5b1h6PNuTKWn3JvFC7ZWfuNcoteooyln2C3dlRZqCACv5uueZtZZSPpJholCV7mnUCr1VQFPp05OAm2dphZYSb2Od9QDKACd63EjnGUxKPvmzTLjpG\\/IhSgN31iBYbxvIGo11jRApSlHMkn3DsHNDiRkp6qTkrTaVIzdTqU683KyUhISz05Ozcw8rUaYlpWXbdfmX3FEJaaabW64ojVB3ROg0ffkxGiTYnkdT0g8VMTsf6sy4y47RKIljCCwphtJDkxKTlPok5cN9TAURskzcjiBRVlguK8kamFtqlt5+Amh1otaMEkiSwBwFwxwucDZYmKxbdsSCLrn2lJWkoq95zzc5d1aRqqWlHztWpwoaOzR5h3WHS9lNZmMqqnMytNQbEtpPnkwkaXBQ0pEuN4FxMqA1JFhru5fD825YvKbl08RcOrHglBybubg4Dw8+nRz5EPlH9JJ2nzdOwIqWElqTqpQrvPHqZVhhTpWWnCSxOi2alLTWI1SkyykzHlFDsmqNbEtKKz5RKB\\/f9o2fJc8FraTIVvSpx2u\\/FGqJbS\\/M2RhTIS+HtnMTIdGvJzt0VhFfuy46ephJPlFNk7CnkvOJCSlDBM3KwgixqXs3w3T8q32Xam8m3pzq7sg31yyzQbaKSNMrwetzMblihSTVi4FzCh\\/XFFKL8LIRlvppZZWCbm262LWjzoV6J+ilINSOj1gFhvhg+1KOSTlw0egNzt71CUdyC2KziFXV1a+a80ctyKzcM+AMgCMyIylggicssMSzaWZdlphpAshpltDTaRyShASlI8AI26G0NpCG0IbQNyUJCEjholIAGgA3cIIIIIdhcEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEcPV6NSrgpk5Rq5SadWqRUWDLVCl1eQlqnTJ+XUQpUvOSE809LTTClDNTTzS2yQDlnkTzEEeEA6EAggggi9wd4N+B4jjAQCCCAQRYg6gg79ONxobxqzx05Gfk5se1Ts7XNHG18P7gnQFi5MF35rCmbYe1QhcyKFarkpZM5NPkpXMvVa1ag5MTJXNPlyZWt5enbG35LxbswqfqGjppP1ilHaOKptp4y2fK1ttSVb0NTV92U7RXZdLJIQFow8nFvJzUShSMnpasERepYKwtVsypyiyfaL1U\\/LoVJvlV75lOyimFrVfi4V33KBBIOufpNPmLlcs2lR1ztAtKv+kezKQo96grhe9hHnaY1cg5ykmDnzhNSOEFIxjoNPWUmu4MXfSLnVNI1QpDklaVaNsYhzQWMxqMWe4tCkELCddgu6scQcKcUcJKw7buKeHF+4aV9hamnaLfto1+z6q2tOtrJVT7gp9Pm0lORJBZ3Z7+iPWZj5y5bVti86PN25eNuUG66BUEas7QrlpEhXqPOpAJCZul1RiakpkA55JeYcA5gBuEDqOxqkvZlUyqTsko3siZbanWQdLJBT5q6AddVLdPsAOofwwyq5YmXEHU5XkJdSf4oKezKRusbKItc5jHkma6uo9o7sovDg5wfHqj0lMYeRx5N7Gwz0xcGi\\/ZNp1mdDikVrCZ+sYTzEnMuJyVOtUqw6lQ7Xm5g\\/WWmrW\\/UpZx1wvuy7rwDkat8WvkwGj\\/XXH5rBPSOxWw5cc13G6diDbdsYpUxteaimXlnqM5hhU5aUUS00lc3NVaZaGu8t2a3IEFn9kGJpa6pNVPqSN6QzMGXeItfVE0lpkE2AsJhQud43xqXsNz6L9mll8E6dm6EG1wNQ6GwCBrYEjkSd0LUKSefv9Ryi4EjgSOw5RIQxV+TW6ddmbWaw5uzBHGGQBcDEpS7rq9l3K7qHcX6beVAp1uMJcCk7It3jNHX2qXUtJS267rVxU5MPlBMFhOO39olYzsyVPK0z1WtO2HMSqBJoSSlUxNXDhs9dtCZlMwEibcqHkpWUJD5U63nC57CGJKcT53Rak0hN8zqZVx9kWAJJflw6zYb759QCRuNtU9T5xi5dln0AW9ItKKOH9UAy8Tx3CMHA6sc+fbvi\\/bnnSPQSO+FKpTKvQp+ZpVbplQpFUk3FMzdMqsjM0+flXknJTUzJzbTEyw6k7ih1tCknm54YbTpHtiPKbWklJBCkkhSSLFKhoQQbEEG4IOumoEYmVXCx5EEd3Hr5vg+nnBHti8OIP4Q9O73xx+unrHaO7OLtZPSPXCLHkfZzjyxG8H2RyGYPAg+mLsz0n1mOOzI4HKK6yhwUR6THkeRyOsrp90V11dUcftFj8I+w+8Rdtl9XqjzKOQ9kEWzFMpM4CJylU2bCswRMyMs9nmN4UHWl55jLcd4y5o4GYsWzZkK2luU5OYyPk7apQ5EK+qZVbJSfOPDL8HI+aNX6Lbq50j2j4mKh\\/pT6j3w83MTDVuymH2rbuzedRbwyqELC1ptlWpNt2VShb2GPgX8KLJdz1JCblc8\\/wBgqM0rLPLh5Ut\\/6uRyzz4nPW83V4Z\\/Be2l6xYqNaYJzIDjkk+hOZBASPI2llKd6ci4pZy+scxrdsbcfin1iDbj8U+sRmIq9URbLPzOn6bhc9va57w4mZmBudX61A8v0r9X746TfwQlVZmWuKYaGeeT1Naf3ZHIEtzsv52fPlwzyRzxxbmCU+AdjXpNZy3BySfaBO\\/JOaXnvN3DNW8j8VUZA7dHQr1Dvg26OhXqHfGSjEVYR\\/1vNbdnYlz7w0Cee+HBOzIIPaXtzQj\\/ANIMY3O4L3Gk5s1Giup1SfPenmlEjMagSJB1BzASQorRvV52qMlQxXg\\/dyMsjSnM88widcGW4ZE7SXb457ss+EZP7dHQr1Dvim3H4p9Yh9OJ6onephf9syP\\/ANVJ91oUJ+Y5oPikD4Edd0YsKwnvNJKRJyiwDuUmoSwSdw3gLUlXPlmUjfDU4X3wCoCipUASApNSpOqoA5BSdaeSoBXEAgKyy10pjLHbj8U+sRQv9CfWe6HRiupDe1Jq0tq099j4+XdCvpF\\/ilo7tSF6buS+vhiUvDS928tahOEqzy1J6mOZZZbjs51eXHdnlnzcDCf6nF7f\\/MF\\/\\/OZD\\/rUZcbc\\/ij1mLdsvqHo7yYV+FlQ4sSd+5Dw93bnrXx9+kXv0GvUFjl\\/H8fXr44k\\/qcXt\\/wDMF\\/8AzmQ\\/61CiMM73cz1aE4Mv98nqY0TnnlltJ1Gtw36pOUZYl1Z58uzdFpWo8VH1wHFlQ4MSfrQ+f\\/8AuO\\/refSL36Df+Kru\\/j+OnhrGKgwvvglINFSjMgFSqlSckgnIqITPKUUpGSjkCrVzKUqEOBhXeBISqVk0DnUahLlI47yEKWrq3JJ4boyhzJ4nOKaw6R64ScVVI7mpMeDTx+L5jz6QfO5Df+Kr1fn\\/ADjGdGE11rz1jTGwMstecWdbdzbOWXwI362X1t2tvh41g7caiNtP0ZsFOZ1Xp11aTuIBSZFtPUSHCPxdaMiitPWfR35RTadA9sIOJasrd2CfBn\\/1rVHnnsydwQP+78yet0dCNYMz5y21bk0Zg57OUfdyPNlrOs5g85OWXQY5BnBdof8AhFwuLzAOqzTEtZE71DWXOu6w5gdROXHI55R3SVq6h6O\\/OKZk8ST6YaVX6woW86SgfxWGL+Fy2T7D8THnnU0f6oE+CEX4cct9PH43jqhvB2gJy29Vqzh357JUm12blSj+XXxzP4sco1hdaDf1paemDv3vTzqc8xln9AGTuO\\/m4x2CSBxIHbFNdPb6O\\/KGjVaovfOzHL0FBsf5sJ95jzt3zveX6iE8v0QP1H1x8qxYtoy+WyoUodXht1TE0eOt5xmnnirf05jLzQNXIDl5ehUWUAErSKZL5b82ZGWbUTkBmVJaClKyAzUSVHIZmOQKzzDL2xaVE8TDCn5tz9smX1339o84u\\/f6Sjf1mElazvWs+KlH4nuhQaiAEp1UpG4BIAAHQANwihX0D1+O6EC4lPFQz6BvOfo4enKElP8A4qfSruHfDWQDU3J7\\/j1f1wmHJUTx9XNCZcSnioZ9A3nP0cPTlDQrWrio5dHAekDLOLCQOMLAtoBBDhT5O5Iy6zvPq4D2wkpSlcST2nd6BwEJFY5gT7B3+PWtKys7UJliRkJWYnp2acDUtJybDsxMzDquDLMuylTzziuZDaVKPMOhxLalEDW5IAAFySTawA1vyHHdvghMqSOPqHjdzZZ9ucJlZ5t3v7vfGaWFfJxaeONSZZ\\/DjRLx0rFNnEhUpXapYdXtG2ZoZjPye6rxYt+3HiN2tsqmrVz35Djstwo+TbcoZfamH7\\/cwZwPkyGVTUveN\\/G7a6lDhydTJU\\/DClXpRJmZlxvcbmrop0uvIbKbUTu30jhav1DKZOjVF9KrZXTKutsHke3dS2yAe9zdv0jJakpt+3ZSzywfzg2rLqLi6yAkXGoudeER\\/Secn0mLCsDhv90TQ8IPktGENNckpvHjSkxDvUbMuTlEwqs63sOmETOWaGG7guqaxKenJQKCUvOCg0mamWgpLKZFzVfTtLwZ5EDk0MFzIzUlo30XEityDjTqqzjPWq5iYJ5TIyQJ61q5PLw+cbKs1ust2cw07rkPsrbQ0hqYyGyrE81lMz5jTkGxIfmO2dAI4NyiX0EjcQp1FtdY2bOHqi7bOlpgH+uOAqtpuS0HNTfQEpNwQbaX85izrGvrEetsW1h9Zt133cU2pKJW37Mtyr3PWplS1aqUy9KocnPTz6lK3JDcupRO7LMxs8wT5DzlL8b\\/ACWblNHaqYYUOZW2hyu42VilYZ+Rl3eFTNrViYViEpCUDWdMrZszs8tVX0pQ2r0Y7Jw+sDDOis27hvY1n2BbzASWqFZVsUW1KO3qpIRsqZQpKQkU6usQNRkFIJyO\\/f8AaxNKfsgprRCqlVZubIsS3KNNSbdxY5VKcM0tQ3XKezJ7jrG0Zwy2NZiZWu+9LKEtjhpmX2hOo35UkjSwOsQ6MD\\/ksdYdXLT2krpTU+TbQUCctXA20ZmoLeSSnamWxAv4UsSqhkptoO4ZzSXAoPKLez2Lu5PAjkKOTSwLNPnU4DtYwXDTnAv7ocd63PYiidKcskT9mOCm4XTTaSFFSVWEkrBIdK0pTq7hIInNPwXhimZTLUiVU4nc7NJM45m\\/SSZouhCv7mlAHKNuxSafL2ySyFKFjmdu6bi1jZZKARYEFKUkHUa3j5a07MtGw6HK21Ylq21ZduSAV5DQLVodNt6iSQUlIUJWlUiVlJBkHVAVspdJOqM8yY+pggiTpSlICUgJSAAAAAAALAADQAAAADSNgAAAAAABYACwA5ADQCCCCCPY9ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggjr2+8KcL8UpFNMxNw2sPEWmI3op192fb92yKCNfLVlbgp9QlwfpXN+yyOsrmJjAPEnkbeTSxSXOPVvRRsO3pubMw6mbw2nLowtTJvPqBU7J0zD+vW5Q0hg+dLyrlJep7IyaRKFklpWz6CMCbpdNnxaep8lOAggialGJga2B\\/bW177eO6xFoZdlpZ79ul2XTzcaQs6aDVSTqOB398RxcQ\\/kzehPcSXpjD7FDSAw4nln6KVertnXpbzCMjuTIVSz5CurVnkNZd0qSAMtnnm5GCeIXyW\\/EiSJcwq0trIuQLBUmTxAwyrtklg+fk0alblz3\\/wCVjLZnbilyROuoCXyZzdmTQRGJvZ1g2cuV0VhlRN80o7MygHgiXebb3cCgjja8a9yh0xz\\/AKtkNrXbccRYXvokLyX7yg6abo8\\/u\\/vk6\\/KSWc6+m3LcwixVQzrllyxMVKZTfKilsrCWU4nU\\/DlTa1qyYBfDLYdORd2Gb8YbXzyUPKQYdzExLV7Q7xsqDkqt1Dhsa2xigwVMuLaVsJvDObu2VmkqUgllcq88h5BQ8yXGXG1q9M2CI5M7HcNO3MvN1WVJvZIfl3mxxHouS3aabv20XFxv1jCcwzJquW3phBJ3KLbiQNNAMiVcN6lq4co8nK8sG8YcOFvN4hYU4lWI5LkiYbvSxbotdbBSclB5NcpUipog7iFgZZ9Mdb656B7e+PXVjpK8NHDR3xFcffxBwGwYvl2aWVTTl44XWRc65ha\\/KEuF9dboc8p5SxNzQcK1LzEy+VZB93OPzGxNJN5XEHP0JinX10t+UbnBwAB\\/JcORtGGvCx\\/qc2g3O5bBRYafnJcXc\\/8AdHz8pjadXtg2nV7fsj0xbv5KDk4r3W6us6HWCUkp0vrX9yFsnD5CdulkubFuwpu222QnYIDIYS2mW1nzLhoTEwHMbLs5AfkwbmU8un4I3NZD8xtVLmLSxdxQyDrj4fW8zJ3VdV0U9jIBUs3Ly8k3JNML1WZVpSW3GtI\\/sYr6LmXqFIfAO5bk4wrhw81dTfXcVjTW9zaMReGJ0XyLllgaizjqVEX5FopH+Pv0vxjzztcdB9nfBrjoPs74nY3F8mj0BasXHKPfek3ajyxOKl2aZftgVGRadeSDKh9ivYU1aemJaTUkFLLdUlX30LdQ9OFSmHmehbh+S54JTRdNqaVeKdFSQzsU3BYtoXOpCgoB8vGm1G0Q4l0ZhoJDRlyM1mY4HUu7JcXNmyJeSmBp6TU+0kHQH+rhkjfbUDW9tLGMdWHqkncwlf8AavtA6W351IGuu48eHCGRrjoPs74NcdB9nfEtev8AyWOotpcctbTYk5paphOxkrgwBfkUNyhSsrW5VKdjDUlTD6VagShNHYaWFqzcbLX0nUdY+S86RbCpsUDSZwVqYbP+55q9u31Q1TSAtHnTfkUlcKZJWoVkpYXUciEpCvOKka9zZnjNskGiOKtxbnac4Du1GSbJ15EA67hpZhVDqSN8o5w+otpfK+qFK1HEfC8RhNcdB9nfBrjoPs74kd1H5MVpvNLbFJxo0Vp1soUXVVG6MXKWttQO4NtSuDVYDqCN+up1kgkp2astaPgZ75Nlyh0pOPy0vW9HSptMuajdQkcSbpblJpII+ml01PDmnTyUHmE1Jyz3Psow14Bxc2SFYfqBINjkQh0XsDoWlrBHeCRckXvuQaRPpFzJzB14IKjwO5NyBw1A490aAtcdB9nfFNp1e2N48z8ne5SpiYfYas7CmcbaedZbm5bFigpYmktrUkTMuicYlJpLD4AdZE1Ky0wG1gTEuw6Ftp4ipfJ7+U2kWEPS2GOH1YcU6lpUrTcX7EQ+2haFqEwpVWqdKlyykoDaktzK5jWdRqsqa2i22fwJxUL\\/APy9Vjbf+xHTy5J19XM+pv6NnR\\/1GcP\\/APrvHlyR69O\\/ujSftOr2\\/ZFNc9A9vfG5j\\/uAXKjf4C7Y\\/PPhF\\/TGKHkAuVH5sC7X9OM+ER\\/\\/AOyEAwVir+DtW9ck\\/wB38XrXvg+jpz94zn\\/hZj\\/0Rpn11dPsHdFNZXSfXG6+m\\/J8OU6n23VTOFtgUUtuJQlqpYv2E8t4FOsXG\\/merVZtKU7knbuNOZnJLZ4nlG\\/k7\\/KXrcQhVmYWMpWtIW85izbxbaSSEqcc2LbzxSj6ytk085q7w2onVhQwViveMPVQXtvk3RvtzSLa8+XhChT53S0jN915V4H3ouPXGjuKEgcSB2xv3Y+Ta8oi88wy5VNHiVbeeaaXNTGJdxLl5ZDiglUw8mWw\\/mZlTLKfpXRLyz7+zGbLLq\\/MjsGQ+TEacbj+rVMZtFGTlS2SHpC7MX6k\\/tsxqI8nmcFKS3s1J1ipwTeaClOTa9bzchGBMWuEAUKfBJA9JtLY1tqS4tATv1JNhxMOppdRIuJN8W4FBT7AqxPqERxtZI5\\/j7optBzA+7viTvR\\/ku+kq+Jf5\\/0lcDqZrzKETfzPRL+rmwky4kLflzO0m3vKplLWutMo55I2t1KWjNoSsuo7dofyWGtOpUu5tNmlSCkTDeUtQ8AJurB+UGqXVeWVDGKiGVmCraNJT5BONNjUfUpzzmBmt7N8ZOWtRHRe37ZOU5sDjc55tO7xPIXOkLRR6mv6so5fkpTaPV6a0j374iUlZ5t3t8eqLdZR5z7vdEzehfJbsHJZTRujSyxNq6A8svot\\/Dq1LaWuXLeq2005Uq5daWHkPDXcmFNzKHG\\/o0sNK+ljvS3vky2gdTGmVV\\/EvSfuec1G0zG3vbDikU115DmspctJUvClqelkvJybU07V5xYQFKbdQ4RlsmdlWLVkBUrJMd7s8yoDQH+o9srjwHxuXk0GpqvmYS33LeaN\\/DItfjrb4RBSKkp4kDtMJl5A4ZnsGXvy+MehpanyfXkvrcKTVcGryvkhp5CTdeMWJ0tk4p9DzcwtFmXLaDZdl0JMs2hSDLLYeWZiXfmdm+jJK0eSN5Neyn2ZijaHOD845LupcbTd1KqOIEssomUzQD8vfdVuWWmkF1CULammnWly+vJrQZRxcudqxsexAvV+fpLI00Q5NvK4XuDKNp0vp6ZvY7rRkIw3PqsVOSyAd4K3CoepLRSf8f1x5mhfUeAA9p+A9kfc2jhfidiE4hmxMO78vd11RS23aNoXBcq1qSXdZLbdGp86VFOwe1gkf3l0\\/wB7Xn6mNo6K+jFYCkfcJo4YDWSppOohVo4Q4f20UI1HEFtJo1uyRSgtvuN6gOqUvupGYWqMgI3MvsYVvmq+BoLol6fc30Js67NiwGoH5K50JtaxykYYWdXJxCddyGVLuPEuIt7DxjzC7K5LHlF8QFsooGhpj5J7cpS25eNiVLDuXUSh5wLMziELYlktFMu5qvLcSydZgBWc1K7fNCw\\/k7fKZXhMMMXBYmF2FrTpQHZy\\/MW7YqEtKBa0pUqYGGH6o82oNhRUsSsrNHVQvVCl6qVehJBG\\/ltkOHWrGZnKpNKFtO1lmG7ggn0W5Yua2sB2uiSQNdRlt4alE6uPzC9RoktoSRyUMilEHTcpJiFth78lpxlqLjRxY0sMMrRaCW1ONYeWBdOIjizmsusNvXJVsMNjrJDQbmlS7oSXlqVJK2IS\\/nXhz8mE0OaChl\\/EvGjSAxFqDKmlOs0SdsewLfmyhSi83MU1NrXVXkofyQlJlbsl3WUB36Ra3G1y8l6CJFKbPcIShBRR2nlA\\/WmnpmZvYW1bdeUyf8nbmOMZrdDpjdv2P2hH5zjjir+KcwR7EiNUGGnIkcmPheiTVI6L1t3dUJUKLtVxKuS9cQXJ9ZUVByco9zXHP2unVSW20tSdvyktqoSosGYcede2EYd4H4L4RMrlsJsIcL8L5Ysplyxh5YNp2UwqXQEBtgtW1Saa2WUBKEpbKShOoOPAdrwRJZSlUyQAEjT5KUsAAZaVYYNhuuWkIJNtLkk773ub57UrLM27GXZaItqhpCVaC1yoJBJtxJJPEwQQQRnw\\/BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBER35RfXa3SMc9HhqlVqrUxp3Ce4nHW6dUZuSbecTeDw2jiZZ5sOKyATrLzOQA3RHV+7e8f\\/K25v8A0\\/U\\/+uRIZ+Ug\\/wBvfRz\\/AIJLi\\/1xfiOFHC21iamW9oWJEImJhCEvyWVCHnEJTemSKjZKVAC5udBvN98U\\/iDWsz\\/92H+rb+QjZtyTV03PP8ohowyc7cdenJV+77gS7LTdXqMxLvD7gLtUA8w7MKbdSFBKiFpI1hlE\\/qPPq5I\\/9sY0XP343B\\/qBd0egrF6bAHXXsJ1VTrjjihiF9IU4tS1BIplLNgVEkC5JAGgJPOJhgz9z5r+\\/D\\/qGYIIIIvWJhBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGtvlcpqbkOTp0m5yRmZmTm2LbtBbM1KPOy8wypWJdkpKmn2ShxtRQtxOaFbkqy3gxskjWxyv37W\\/pQ\\/vYtH+c2yI0WJyRhrEKgSCKHViCCQQRIPkEEHQgi4O8HcRGBVf3LqX94Tn+zuRAa+7e8f8Aytub\\/wBP1P8A65B9294\\/+Vtzf+n6n\\/1yPm4I+d3n05++prh\\/1h7u\\/j93VhFK2HIdfqHsj6T7t7x\\/8rbm\\/wDT9T\\/65B9294\\/+Vtzf+n6n\\/wBcj5uCDz6c\\/fU1w\\/6w93fx+7qwgsOQ6\\/UPZH0n3b3j\\/wCVtzf+n6n\\/ANchWXvy+ZR9qalb0uuWmZdxLrMwxcNXafZdSrNLjLrU4lxpxJ+otCwsHhw3\\/LQR6J6cG6bmhu3TDvC38bTdw58hHu7dp19w9kd72xpU6T1kPIfs7SMx0tZaFqWfmDFm\\/KS2vWLRcQ8zJV5hp9p8ssh5l5DjbyG0odbeQBlmdhfyzHKGYYuSzYxxXiFSmFIK6JihbNuXa3NBOruma+afIXrqlILagxdEuVBWtudIcjV1BGzkcUYkpiguQr1XlCCDlYqM22hRHBbYd7NwW\\/NWkg8RvvktTk2wQWJqYaI3dm84jx0SoAg2FwRY7iDErbR6+UY21Un5CjaUGCM1bS3Vpamb7wdnnqzSGluhCA9NWDdE43WKfJS60uOzExI3jcc8WVhMvS3nWcpiQNgbpH4G6SlpovbA7Ey2MRKBkx5YaHO6tXoj74UpmUuS3ZtuVr9tTy0IUoSVfplOmVN5uobUzk5Hmhx2VhDjPingJfNIxKwdvi4MP70ozmcpXLfnVS7jrCnG3H6bU5NwOSFZo87sm01CiVaUnqVUGkliekn0EiLawtt3xDTnWmMRst1yRulLkw22zKVNlFwCtCmktysyUJ3NvNNOOqACppJJJkchi2el1BE4EzjWgKiEtvoAsLpWkBC7DWziSpR07RO+PTmgjR5yZfLA2dpcmkYMY2opGHukWiXSxR3ZUqlLQxcMswtx9+20vlaKFdqGW1TE9aMxMPNz4S5P20++0qaotE3hx1PQa\\/ScS05qq0abbm5R0lJKbpdZdSAVsTLKrLYfbzDM2sAlKkuJKm1oWqwZKelqgwmYlXAttWhG5bawAS24nelabi41BBCklSSlRIIII3MZcEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEERDPlIP9vfRz\\/gkuL\\/XF+I4USPflIP8Ab30c\\/wCCS4v9cX4jhRwdtc\\/6RMS\\/3eR\\/3VIRT+IP3Zn\\/AO7D\\/VojY3yR\\/wC2MaLn78bg\\/wBQLuj0FY8+rkj\\/ANsY0XP343B\\/qBd0egrF8eT3\\/SjVv\\/uOY\\/3ZSomGDP3Pmv78P+oZgggiMDylvLgPWvVK9gVoVVmQmqpILm6ReuPaWJapSUhOtlcvO0bCyXmm35GoTMovXlpu+pxmcp6XA8q1JaZAkrlbtbE+KqNhGmqqVZmOybJLcvLtAOTc4\\/a4ZlWbp7RVtVrUpDTSSFOuISbxIajUpWmMdtNLte4baTYuuqG9LaSRe1xmUSEJuMyhcX3r6RWmbozaKNN8vx1xdtezJ56VVOUy0kzTtbvqtNarwacpNlUNqoXHNSjz7SpYVRVOZo0tNONJnqjKkhY0g4yfKO8PaXMT1OwF0ernu9tBLUndGJ1y0+y5RTiUDWmk2tbspdk7Oyansw01MXFRJtcv9K81KOkyzcUy5rnuS9K\\/VrqvCv1u6bnrs45Ua3cVxVSdrdcrE88Rtp6pVWpPTE9PTTmSNaYmX3XFJTmTrEGOHjl3EG3jFFQdcRQmZWhSlyltZbbn59SebjsyhUqkqFjlblLtk2Dq7BRgM5i6ovqIlQ3JtXOXKlLrxH8ZbiSkabsjaSDeyidY3mXh8oM04q++v7m6DgbYUoCkMtUiyq9WpwJSokmYmrpu+tS7zrpVqKUxTpNvUDZbZS9tXXepHeXJ5Rxbq3EYuWswlxxxxLDWE+GymmUqJUGmi\\/bbruzaBDaNs667qg7R1xXnRqOgiBO7R8dvLK14prAKjchubUwm5NyAhgNoSL7kpSABoLCNKusVVZuajOg\\/xJl1sf4qFJT7o3RW3y+HKAUN6XdqdYwkvFDAa2svcmGsvLMzeo+l1flH3IVa1X07dsGXc8kdlvoXHCzsZnZvt5m4W\\/KRLwl3JaWxr0araq7SwkTdZwuvGqW44xmRrvS9sXZK3SJwqTmEMO3bJZHjMHhEZCCMuS2p4+kXEraxJPPAZbonRLzyFAWukibZeKQq2pQUq5KB1h1qu1dkgon5hVuDyg+D4h4OX+PEax6AmjTysehLpQTcjQrXxPbw+vmohpqWsPF+XlrHr03MvKabakqTUn56cs+v1F193ZMUqgXPUas\\/s3HUSAa+ljZZHlnxua5PzlkMbdFOpULD7F6oVzGfR+S5J05dIq0+ufvrDynJLcuiasOvVF4vTdMpsulJRZFamVUdctLNyVCm7XW47Mu3Lg7b01NPNSGL5RmTLiktoq8iFiVSpRCQZ2UcU440jiuYYddSCbmXbbClpk9NxhmWlqptpQDYedMhQCTuu616Rsd5U2dODVtROWgjq\\/CPFzDjHfDy2cVsJ7rpt5WJd0kJ+i1ymuLCFpClNTMjPSjzbM5S6rTplDsjVKRUZWWqVLn2HpOelmJlpxuO0I6OZeamGm32HG3mXkIdZeaWlxp1pxIW2424klC0LSoKQtJUlSSCCQYnKFpcSlaFJWhaQpC0kKSpKhdKkqFwQQQQQbEaiNaHKLcotSOT3pGFdWq2FdSxRRijUrup7DFPu6WtRVHVaktb804665NW\\/XjOonTXkoSltMqGBK\\/34veZq8++T7N\\/JKub88NK\\/wBnkHyk\\/wD8TdEr982MP+isPIigxzDtN2nYww1jCoUikVBiXkZdiQW20uQkn1BT8kw86S48ytwhTi1EAqNr2GgFq9rtdqsnVZuWlpvsmGixkR2Esu2eWYcV6TjK1m61qOqja9hYAWmMaPvL52rj3jhhPgtKaM1w21M4pX9bVjMXDMYo02qsURy46nL01FRdpzdjSK51uUL+2XLtzkst4JLYfZ1s4kMR5zfJ2f3d2iN\\/lAYY\\/wCtFPj0ZIsbY\\/iyt4uolUna7MtzMxLVUyrKm5diWSlkSks7lKGG20qOdxRzEE2IG4RvMMVGcqLE0uce7ZTTraUK7NpuySgkizSGwdRxBI3DSCCCCLciUQQQQQQRj\\/pPY5S2jTgFifjvPW6\\/dsthnbaridtyVqTdGmKuhM7JSQlGqm9JVJuSJM4HNquRmhm3q7Lzs40G\\/fJ9m\\/klXN+eGlf7PI24cqn+16aVX8Gq\\/wDT9Ejz0Y572wY\\/xPhGtUqToU61LS81TDMvIck5WZKnvO32swXMNOKSMiEpypITpe1zeIRier1GnzrDUnMdi2uVS4pPYsOXWXXU3u60tQ9FCRYEDebXN4lfffJ9m\\/klXN+eGlf7PIkO4J4ks4zYNYR4wS1Jft6VxXwysLElihPzqag9RGL6tSk3Q3SXqg3LSbc85TUVRMmudblJVubXL7YS7IdDQ8ySPSJ0F\\/7iXQ6\\/yWNHz+aW0Ye2O48xLi+pVmXrs41NNScjLvS6W5OVlilxx8trJVLtNqUCkDRRIB1AhzC9WqFQmJpucmO2S2yhSB2TDeVRWATdppsm45kjlHT3KGaeVK0AsN7HxFquGlQxNavW+FWW3Sadc0varlPdFAqtcM+5NzFEraJlsppapcS6Zdles9tw8dmG16lfvk+zfySrm\\/PDSv8AZ5HZ3yjr+5nwG\\/h2c\\/m+uyIecaDajtLxfhjFszSaPPsy8i1KSLyG3JGTmFBb7AW4S48ytw3Vc2KiBewtpGDiCuVSSqb0vKzXZMoQyUoDEsuxW2lSjmcZWrUk6ZrAGwA0iV418pNslTrYe0TLpbaLjYfcaxcpDzjbYVm4tpo2Awl11KRmhtT7KFqzSXWydaJCOBWOeGmkfhdamMGEtwS1x2Xd1Pbm5KYQtoT1Mm9RAqFAr0k088aTcVFmlrkKxSXnFOys224G1PMFl9\\/zMo2ccmVyjF36CmKSZWsrqVzaP991CTl8TLJaededpC3HGJYYh2fJqcEuzdlGk0BE5JEsyt10dlVGnnmJpqiVii63BG3Cr\\/TLcrjGYYfpc5lZE63KMSy6a8VWQ+4JdtAdlVkhMyFJUtoBDzZAQ426zScVTaJoIqb3bSztkFzsmUKl1X0csy2jOjg4CCoD0kbihc\\/iCPjLFvm0sTbPtjECwrgp91WXeNGp9xWzcFLcU5I1aj1NluYlZtkrQ08ypTKtV6VmWWZuUmA9KTjLEyw8039nHVqFocQlxtaVtrSlaFoUFIWhQCkrQpJKVJUkgpUkkEG4MWMlSVJStKgpKgFJUkgpUkgEKBBIIIIII0I1BgggghUex1VjZiSzgzg1i5jBM0l+4ZXCjDK\\/cSX6ExOpp71bYsW1KtdDlJZqDktONyLlSRS1SaJ1yUmm5RcxtjLvBotGPF98n2b+SVc354aV\\/s8jeXp0f3EumL\\/ksaQf80t3R5u0UDtix5ibCFSo0vQp1qVanJGYfmEuScrMlTjcwltJCphpxSAE6FKSAd9r6xDMUVWoU5+VRJzHYocaWpaeyYcuoLABu604RppYED12IlfffJ9m\\/klXN+eGlf7PI3waJmkFK6VWjzhpj\\/I2xM2VK4k02r1Fm2JqqNVyYpPzTctZtwtO1VmQpjc4ZhdGXNBbcixskzAYAUWtsvzYY9Ankgf2t\\/Re\\/exd385t7xj7H8f4oxdXKnJV2damZeVpRmmUNycpLFL3nks1mK5dptShkWsFJJTre1wLM4ZrNSqFQdYnJntm0ybjqU9iw3ZxL0sgKu002o+i4rQm2t7XAtsngggjoaJzBGtjlfv2t\\/Sh\\/exaP85tkRsnjWxyv37W\\/pQ\\/vYtH+c2yI0WKP6WcRf4Cq\\/8Au+YjAqv7l1L+8Jz\\/AGdyPP2gggj5yRS0T8tDfQ30Qrn0Q9FO5rm0VNG64biuLRuwNrlwXBXcDcMKtXK7XKrhha89VavV6rPWvMT9VqtUn5h+dqFQnX5idnZyYemH3XXXXHIyX\\/sF9CX8jvRY\\/wDofMJf6IwaC\\/8AcS6HX+Sxo+fzS2jGU8fRKjUakKpFKUqlU1SlU2QKlGRlSpRMq0SVKLRKiTckkkm+tzrF0ysrLGVliZdgksMkktNkkltBuTl1PfGLH9gvoS\\/kd6LH\\/wBD5hL\\/AERhnNaB+hHNsPSzuh7owIamG1NOKlcCML5CYSFghS2JuRthiblnSkjUdlnmHmzvQ6ncRlnBGyNEopFjSKYQd4MhKWPj+S+7nD\\/mkr+9pf8AyLf\\/AKe4eyNa19ckVyd1\\/wAu+3UNGy1rfmHdZTc\\/Y1Zu2xpmVd1Uth2Xl7YuCm0tSkpGrsJumzUoV5uLli4I1d6Qfyc+x6lLT9W0Yca67bNVS2t2UszGGVl7hoE4+oDVlWL0tiQplZoUoAPNVN2tdswtR+lfG90SbYI0FW2eYLrTa253DtMSpQ\\/oiTl0SE0DwUJmSDDpy6WStSkcFIUk2jCmaHSZpJDkiwkkfXYQJdYPA5mQjMR\\/GzA8QRcHzVtJHRRx80S7zTY+O+H1Vs2ozKXX6JVlFmpWtdEmwpKVz1sXPT1zNHq7LQcaM1KsTQqNMU8yxVpCnTLhlxjxHpkY6YC4U6SeG9fwoxktCnXjZ1eYLbsrONpTP0ioJQtMlXrdqaf15Q7hpqnVu0+rSC2JplSltrW5LPPS78BvlA9B+89BPHSew3rUzM3FYtwy79xYV327LeTouq1TMFlctPBoCVl7nt19bdMuORYKUIeVJVSWZapdaphXy3tK2VTODAKrTHnqhQHXUtKceCPO6c64bNNTXZpQh1l0+izNIQ2O0IYdbQtTKn6\\/rmH3KUQ+ypT0mtWULUB2jKjuS7lASQrclwBIJ9EpSSnNhNSqpUqHUqdWaNPztJrFInpSqUqqU6Zekp+mVKQmG5yRn5Gdl1NzEpOyc000\\/LTDC0PsvttOtubRAidnySnKEf2bOCr1vYgTkqjSAwjl6ZSsQUNJblvu2ob6TL0PEmRk2whhp2qlhchdcnKJ8kkLjl3JyXlqZSq9RKexBBjMbQD0oqpog6VOGGMTMy83bLNWRa2Jcg2tepVsNboel5G6WXWWsjMv0lryW6KTLrybVcFBo7jo2aXI02zHGj+D8RSynXimjVJ1qUq7KlHsktLVlangm+jsktRdUpIKly5fZAu4LY1Dqi6ZOoWVESzyktzKPzSgmwctwU0SVgjUpzI3LMejVGkfTk5Zq3NCnH2q4E1LACs4gzNLty27hVcsjiFIW7LvpuSSVOIlE0t+0KytC5RKS2t4zq9tx2TW6N1UnOS0\\/LSs7JTTE3KTbDMzKTcs82\\/Kzkq+2h5iYl32VrZeYeZWh1l5pa23G1hSSQd8HLl5f2wm8P4NMMP9ALjqTaviWrYWwqmq0SYRLzhqcpLdothmYSWXm5hSx2byFo1LaCFZb2GhsTefYlnpqQp7b8m92TipltsryNOXQpp1RGVxDidSlJBAB037xGyn75Ps38kq5vzw0r\\/Z5B98n2b+SVc354aV\\/s8iKDBHNX469of9lpX+Sqb\\/ADbq57rQT8Jq5+\\/j\\/wCGk\\/5v1c91pX33yfZv5JVzfnhpX+zyD75Ps38kq5vzw0r\\/AGeRFBgg\\/HXtD\\/stK\\/yVTf5t1c91j8Jq5+\\/j\\/wCGk\\/5v1c91pX33yfZv5JVzfnhpX+zyD75Ps38kq5vzw0r\\/AGeRFBgg\\/HXtD\\/stK\\/yVTf5t1c91j8Jq5+\\/j\\/wCGk\\/5v1c91pX33yfZv5JVzfnhpX+zyD75Ps38kq5vzw0r\\/AGeRFBgg\\/HXtD\\/stK\\/yVTf5t1c91j8Jq5+\\/j\\/wCGk\\/5v1c91p+XJycpPRuUL\\/Vk+acJaphd+pF+p75R85XhK3Ya793\\/3cbLYGVt6g+QClmyndoHPKjMioI1dh5MS7k3pkaSclohaN+I2kRULSmb5lMPDZ+1tWSrLdBmar91d92vY7ezqz9NqjUqZFy5UVJRXIP7dEoqXBZLweZ0FfJpf\\/q0\\/\\/wAXL\\/8AXxG0rlqv2srSX\\/8AM7\\/6wGFcdG4dxRWahsoexTNTDa60ih4nnUzIl2UNiYpj9Vbk1mXSgMENplWQpJRlcykrBzKvOZGem3sNrn3Hc02mUqDoeyND8owqZDSuzSgNeiG0aZMqrekDc31t\\/fJ9m\\/klXN+eGlf7PIPvk+zfySrm\\/PDSv9nkRQYI5y\\/HXtD\\/ALLSv8lU3+bdXPdaDfhNXP38f\\/DSf836ue60r775Ps38kq5vzw0r\\/Z5B98n2b+SVc354aV\\/s8iKDBB+OvaH\\/AGWlf5Kpv826ue6x+E1c\\/fx\\/8NJ\\/zfq57rSvvvk+zfySrm\\/PDSv9nkH3yfZv5JVzfnhpX+zyIoMEH469of8AZaV\\/kqm\\/zbq57rH4TVz9\\/H\\/w0n\\/N+rnutK+++T7N\\/JKub88NK\\/2eQffJ9m\\/klXN+eGlf7PIigwQfjr2h\\/wBlpX+Sqb\\/NurnusfhNXP38f\\/DSf836ue60sukfKPrQrFXpdJRooXKwuqVCRp6H1YvUt0MmemmZYOqbGHqNoltT2tqayCoJIzy4SZY8vSyf\\/HK1P3z0H\\/ScnHqFxfGxzGVfxfLV52vTTU0uRfp6JYtSsvLBCZhqaU6CJdtvOVFpFiu9sulrm8uwtU56o+feev8Ab9j5r2f5JlvL2nnGf9pbbvm7NP1r2tpa5voM0ruXPtnRc0g8TcAp7Ryr94zmG9XkKU9csriXTqJL1Zc9QaTXA81S3rLqjsollNUEsELnZgqLJdzG12SegPvk+zfySrm\\/PDSv9nkaXOVw\\/bGNKP8Afjb\\/APqBaMa5IqDEe1\\/HdOxDXqfKVOWblZGs1OTlkGmSCymXlZ59hlKlrlypZS22lJWolSrXUSdYjU5iOstTc003OlLbcy+hCfN5RWVCHVJSm6mCo2SkC5JJ3kkxK+++T7N\\/JKub88NK\\/wBnkH3yfZv5JVzfnhpX+zyIoMEab8de0P8AstK\\/yVTf5t1c91sb8Jq5+\\/j\\/AOGk\\/wCb9XPdaV998n2b+SVc354aV\\/s8g++T7N\\/JKub88NK\\/2eRFBgg\\/HXtD\\/stK\\/wAlU3+bdXPdY\\/Caufv4\\/wDhpP8Am\\/Vz3WlfffJ9m\\/klXN+eGlf7PI+1sv5R3gFUZ1lrEHR7xbtSTcWpDs7atetG+lsJIIbeVKVN+w1Kaz1Q+G3HHW2i4WmppxKWXYhkELb23bQUKClVKTdAIJQulyISq1rgltltdjrfKtJ10I0hScT1sEEzgWB+aqWlQDu3lDKFcOChvPdb0T9GvlEtD\\/SvelqVhFjFRJi8n0BX6nl1tTVm34pzVU47LyFBuJmSNxGWaTrzUzaUxcEjLgpLs4FbhnDHlpS0zMyUzLzklMvyk5KPszUpNyrzjEzKzLDgdZmJZ9pSXWX2XUpdadaUhxtxBW2NaJV3I+8rhdN93TbmidpS3K7cFfraWaPg3i3W31rrtarCAUymH9+1F5SvniqVVrVZtW55woq1TqbYotYmKvV6vTJoXDgLbYxX52Xo2I5Vim1CaWlmUnpVTgp8zMLIS3LutPKcdk3nVEIaUXnmXXSEXZUpAXJ6RisTTrcrPtoZdcUEtPtkhpazYBDiFFRbUogALCikqVYpQADEn+NcnKJ8oLSuT\\/tDDi7athfUcTkYiXJWLeZkqfdcvai6Uuj0xmpLmnX5qg14TaJhL+wS22yxsyC5tlA6sbG4jYfKR\\/7T2jN\\/CXev+rFNizse1aeoWEa3Vqa6lmekpdlyXdU228lClTcu0olt1K21gocULKSbXuLEAjeVyZfk6XNTMuvs3mw1kXlQvKVvtNq9FxKkG6VEapO+4sbEfOffJ9m\\/klXN+eGlf7PIPvk+zfySrm\\/PDSv9nkRQYI5N\\/HXtD\\/stK\\/yVTf5t1c91q6\\/Caufv4\\/8AhpP+b9XPdaV998n2b+SVc354aV\\/s8g++T7N\\/JKub88NK\\/wBnkRQYIPx17Q\\/7LSv8lU3+bdXPdY\\/Caufv4\\/8AhpP+b9XPdaV998n2b+SVc354aV\\/s8g++T7N\\/JKub88NK\\/wBnkRQYIPx17Q\\/7LSv8lU3+bdXPdY\\/Caufv4\\/8AhpP+b9XPdaV998n2b+SVc354aV\\/s8g++T7N\\/JKub88NK\\/wBnkRQYIPx17Q\\/7LSv8lU3+bdXPdY\\/Caufv4\\/8AhpP+b9XPdaV998n2b+SVc354aV\\/s8giKDBB+OvaH\\/ZaV\\/kqm\\/wA26ue6x+E1c\\/fx\\/wDDSf8AN+rnut6mEEEEdwxbcEEEEEEEEEEEERDPlIP9vfRz\\/gkuL\\/XF+I4USPflIP8Ab30c\\/wCCS4v9cX4jhRwdtc\\/6RMS\\/3eR\\/3VIRT+IP3Zn\\/AO7D\\/VojY3yR\\/wC2MaLn78bg\\/wBQLuj0FY8+rkj\\/ANsY0XP343B\\/qBd0T+67W6XbVFq9x1ucap1FoNNqFarFQf1thIUqlSb8\\/Pzr2yC3NlKybDz7uzbWooQchnmYvfyfVBOEKuVEADEUySomwSBTKVck7gANbnSwJJA1iYYNIFOmySABNqJJNgAGGbm500Gp7gTEfbl0uUCqWDNlyWibhJX3abiTifRFVTFKv0mdCJ60cM5\\/yiSYtlh6XO2kK7f62pgTSi4zOSFoyj6TLrbu2mz0rDyjvTSexyr2kppA4s45XEp0zuI15VStyco+sLVSLdbc8gtS3kKBIUzbtsSdIobCyVLcap4cdU66tbsdFxzztCxbMYwxJOVBTqjT2HHJWksZjkZkWllKHAi5CXpqwmHyL3WsNhRQ0gJhVXqK6nPOzBJ7IEty6DuQyknJpwUv66765lEbgACM2NFDk8tKrTLmBM4OYerTZjM0qUqGJ15TKrXw6p7zToZmG01x+XmZuvTUm6UonKbaNMuKrSQOtNSDbQ1oyn5Izk6ZfTXxTqt6YmS06nR8wmnZBd2Mykw5Iv35dUwkTtLsCVnGVImZenKlE\\/OV3ztPW1PSlIckqfKzEhP16SqUnOOty3LetCgUe1bToVItm2rfp0rSKHb9Ap8lSaNRaXIspZkqbSqZIMy8lISUoyhDLEqww0yy2kNtIG\\/Od7NNkJxVKortdffk6M4tQk5aXAbnKh2S8q3u1cStMvKBaVNpWlC3nylZbLKQhxe3oWHFVJAm5pa2ZQqIbSiwdfKSQopUoEIbCgU5sqiohSQE2zRGawu+TeUFqVl5rGvSWq83POJBnKHhdZknTJWUWG1DZy1z3bPVR6fSXShQectGnDUQUbDXd2jWUsr8ni0HJaUflnb10kp951Than5y+8P2puW2jQbSJdElhRJSJSytJeb28lMHarVtS80W2kb44I6Gk9luAJJsNt4ZkHbJylU2ZidWq4sVFU288cx1IIsU39HLE0bw9Rmk5RItrva6nFOOKJFtbqWQL21CQE\\/xYjiXz8nC0f6gy4nDbSHxhtKZLRDTt80SysQWW3yE6rq2KDIYYuOshe8sJmGlqSdXbp3E6hdKHkT9MrRzp1Quq3qNR8erEpzb0zN1jCkVOcuekyLAcUqarVg1GUl6+Qhptb8wu11XZJSUv9NOzzDe1Dc7WCNRWNjGBaowpEvTnKPM2PZzdNmHklKvzc0s+t6VWkKsSA0hZF0pcRe4xprC1JmEkNtKlXDucZcWQDwu24pbZHMJCCQT6QNiPLNIIUoKRkpJIIIyOY3FKswCDnuyPN1bzdEt\\/lqeTEta6bLu7TIwIt1ih4gWoy5X8a7QosilimX1bLWsusYgycjKNBEreNAbJql0PNoRK3JQmajW5xSa\\/TXXK\\/EgjkvGmDqlgqsLpU+UvtrR28jPNpKGZ2VKikOpQSotOoUC2+wpSi04NFuNKbdcrqp01+lzSpZ+ytAtp1OiXWySAsC5KTcFKknVKgRcpyqVuR5HflBqtom4207Cm\\/q6+dHrGSuSVKr8vPTDi5DD69Z1SJChX\\/T23DspCTmJhcnRr32Pk7c3QVy1YnDNTFr01hc5+PLPj0D+Sk0jZvSZ0IcI7urs45P3rZUpNYTX1NOu+UTE5cFgCWkZKpzbxccdmKlXrTfti4ao68lpaqlVZsoa2OxddvjYJi9+aancIzzqnfMmTUKQpxRUpEr2iG5uTBP9Taddafl0alIdmACG0ISmW4PqS1drTXVEhCC\\/LXP1UhQDzQudxKg4lI3HtTuIA1XfKT\\/\\/ABN0Sv3zYw\\/6Kw8iKDEr75Sf\\/wCJuiV++bGH\\/RWHkRQYrDbX\\/wBIdX\\/valf7tloj+Jv3cn\\/GW\\/2KWjMzk7P7u7RG\\/wAoDDH\\/AFop8ejJHnN8nZ\\/d3aI3+UBhj\\/rRT49GSLi8nr+lmt\\/4dP8Au+TiTYK\\/oae\\/u7X+rMEEEEX\\/ABNYIIIIII1+8qn+16aVX8Gq\\/wDT9Ejz0Y9C7lU\\/2vTSq\\/g1X\\/p+iR56MckeUN\\/THQv8CK\\/2+ZitsZ\\/ujLf3kj\\/XvwR6ROgv\\/cS6HX+Sxo+fzS2jHm7R6ROgv\\/cS6HX+Sxo+fzS2jGR5O\\/7s4j\\/wZKf7UqHcF\\/0XO\\/3uj\\/WRqC+Udf3M+A38Ozn8312RDziYZ8o6\\/uZ8Bv4dnP5vrsiHnEU24\\/8ASBO\\/4Ppn+zCNbir92pj+5y\\/+pRBBDyk0ufrdUptGpUsudqtYn5Ol02Ta1Q7OT9QmG5SSlmlOFDYdmJh5plGutKSpY1lb91atSapQKrUqHXKdO0etUWoTtJrFKqcq9JVKlVSmzDsnP06oSUyhqYk56SnGXZeblZltp6XmGnGXWkOoIipOzXk7UIWW83Z9pkVkLgAUWwv6pXlIVlBzZSCQBrEesd\\/Ddfhr4fDfG5zkkOU9n9D+8WcGcX6jO1HRrvmsBan1EzEzhHddUelWVXfTUqJeXaE6Ef8AfnQmN7RIuejMmpy9VptyTcaXVKbWqbTq1RajI1akVaRlKnSqrTJuXn6ZVKZPy7U1I1GnT0q67KzkhOSrrMzKzUs85LzMu4y608ptQMeXLEivkauVQOENRoeifpF3IUYUVidbkMJcQK1NOrThrWZ59tEvZlbmndYMWBWJt3WpdSfcbZs6qPFqbULYn3Zm2+iNj208U9cvhPED9pB1aWaPUHl6STqzZEhMLUdJNxRtLOk2lVkNL\\/Y60ql5lhqv+bKRT51z9jKIEu6s2DCidGlqJFmVH6pJs0reQ2SUTBYIII6tixYxY06P7iXTF\\/yWNIP+aW7o83aPSJ06P7iXTF\\/yWNIP+aW7o83aOUPKI\\/dnDn+DJv8A2pMV5jX+iZH+4O\\/6wQR6BPJA\\/tb+i9+9i7v5zb3jz9o9Ankgf2t\\/Re\\/exd385t7xi+T1\\/TNW\\/wDAR\\/3hJxjYN\\/dV\\/wDwe9\\/tMnGyeCCCOuYsyCNbHK\\/ftb+lD+9i0f5zbIjZPGtjlfv2t\\/Sh\\/exaP85tkRosUf0s4i\\/wFV\\/93zEYFV\\/cupf3hOf7O5Hn7QQQR85IpaPSJ0F\\/7iXQ6\\/yWNHz+aW0YynjFjQX\\/ALiXQ6\\/yWNHz+aW0Yynj6S0X9xqT\\/gyQ\\/wBlai8JT+hJX+92f9WmCCCCNnGRBBBBBBBGp7lktGOQ0i9CnEGrydP8pv7AqUncYrKnG20+WJlLclFuX3RQoIU+\\/KVeyk1Z9NPZIVN16k26+G3nZNlo7YY4ms0im3DSKpQqzKM1CkVqmz1Iq0hMAql56m1KWdkqhJvJQQtTMzLPusO6qkENuHVVujV1qly9bpFSpE0kLYqMnMSqwoXyl1tSUOJ5LZcKXW1DVDiErSQpIMY05LInJWYlXLZX2lt3P5qiPQXx1QsJWk2NikR5csEc7dtCctW67mtd5e0ety4azQXnCQdo7SKlM05xQKTqnWVL55o832mOCj5vONracW0sWW2tTaxpotBKVC4uDZQIuDrvikN2+PQd5KrGJzG\\/QH0drnnZsTVbt2zzhlXtoVLmUz2GFRnLKknZ1xRUX5yqUCjUetPzAcWqYNUDrpRMF1pqLvy8v7YTeH8GmGH+gFxuf+Tt3Q9VdDjEu2pkvLVaukJcipJSstg3Ta7YmH08iVaOuTrt1NqrTLx1Et\\/rtnV1nC7lpg5eX9sJvD+DTDD\\/AEAuOocf1BdU2K4ZnnVFbzy6El5ZvdbzEpNS7yzcnVbrK1HXW99L2id1h4v4VpbqjdRclkKVe5Upph9oqP8AGUUEq4XJsBaNNUZY6F2h\\/fGm5jE7gvh9c1qWnX2bPrd5Gq3kqropHkFCm6TJzEqDRaXVp3yt5yrsrYylSyUtu7R5J1NfE6N4Pyfn+70nf4CsRP8ATVlRQWC6bJ1jFdBpc+2XZKfqLEtMtpWttS2lk5glxtSVoJt9ZKgRERpzDc1Pyku7ctvTDbawk5VZVKANjwNuMdq\\/e5GlR\\/hu0f8A\\/PMR\\/wCgkH3uRpUf4btH\\/wDzzEf+gkTGoI65\\/Eps8\\/sTNfyrUv5z1c91rF\\/BKkfozH+XP\\/piHL97kaVH+G7R\\/wD88xH\\/AKCQfe5GlR\\/hu0f\\/APPMR\\/6CRMagg\\/Eps8\\/sTNfyrUv5z1c91j8EqR+jMf5c\\/wDpiHL97kaVH+G7R\\/8A88xH\\/oJB97kaVH+G7R\\/\\/AM8xH\\/oJExqCD8Smzz+xM1\\/KtS\\/nPVz3WPwSpH6Mx\\/lz\\/wCmNNvJMcnJinyf\\/wCr9+qXfGH95nFr9Ss0T7hXLicFO+4E4jipfOnz\\/Q6J\\/wCF\\/dlIeRCT8pzEtOeUBghkPdictV+1laS\\/\\/md\\/9YDCuNp0aseWq\\/aytJf\\/AMzv\\/rAYVxu6zRKdhzZ3iKjUllTEhJ4YxL2DS3XH1J84k56adu66pbiszzzihmUbAhIsABGbMyjMjQ56VlwoNNSE\\/kC1Zlem2+4q6rC\\/pLVbkLCIDsEEEcCRUEb4MN+QB0lsS8PLDxHpWMmBkhSr\\/sy1r3pcjUpm\\/wAVCUp12UORr8jKT3k1lzEuJyWlqg01Mhh99kPtuhl51sa0fbfe5GlR\\/hu0f\\/8APMR\\/6CRKZ0TP7lbRn\\/yfsGv5ubbjIGO2ZXYvs+dlZZxdKmVLcYZWs\\/SlQF1LbQpRsJgAXJOgsBc2AizJfCtJcYYcUmYzOMtrVZ4gZlISo2GXQXO6Icv3uRpUf4btH\\/8AzzEf+gkH3uRpUf4btH\\/\\/ADzEf+gkTGoIf\\/Eps8\\/sTNfyrUv5z1c91nvwSpH6Mx\\/lz\\/6Yhy\\/e5GlR\\/hu0f\\/8APMR\\/6CQfe5GlR\\/hu0f8A\\/PMR\\/wCgkTGoIPxKbPP7EzX8q1L+c9XPdY\\/BKkfozH+XP\\/piHxQfk7WlHSK9RKq9jXgE83TKxTag801M4hh11qSnGZlxDYVY6U7RSWylJUtKdYg7zuiYPBBEvwxgygYPRON0GVdlkT62VzIcmn5nOqXS4lopL7iyiwdWCEkBVwTqI2dOpMnS+280Dg7fs+07Rwrv2WfJa4Frdoq\\/PTlHn1crh+2MaUf78bf\\/ANQLRjXJGxvlcP2xjSj\\/AH42\\/wD6gWjGuSOE8Y\\/03Yp\\/+465\\/vOaipZ\\/+jp3++5n\\/XLjPTQT5PnE3T6rOI1Ew1vOxLOmMNqZbtVqrt8LuFtifZuWbq0pKIp\\/zDRKysvMLpDypjylDCNm62Wi5k5q7IvvcjSo\\/wAN2j\\/\\/AJ5iP\\/QSO0fk2f8AbA0rf3nYV\\/6bvSJZMdBbNdmGDsSYNpVYq1PfmJ+aXUEvOon51hKhL1KblmrNMvIbTlZZQk5Ui9io+kSYmFDw\\/TqhTWZmYS8XVreSoodKUkIdUlNk5TbQC+uu+Icv3uRpUf4btH\\/\\/ADzEf+gkH3uRpUf4btH\\/APzzEf8AoJExqCJ3+JTZ5\\/Yma\\/lWpfznq57rbf8ABKkfozH+XP8A6Yhy\\/e5GlR\\/hu0f\\/APPMR\\/6CRrm0veTL0rtCqmS10YrWtRK7h7OT7VKbxJw6rD1zWdL1J9QRLSVWM5TaLcNvqnjqJpz1w2\\/SZOovOCTkJqYnEPSzPoZx0zpA2DbOKWB2LuHd5ykvPWzd+Hd30SrtTaCptEvNUObDc81qtvPNTdNmUsVGRmZdtc3KTkpLzUoC+y1GprewzB8xTpkUhucplQQy6qWf89fmWS8EgtpmWppT12SU2X2SmnAFFQUbBMY83hGnGXdMsp9p9KFKbUpwOIKkgkJWlSdUq3EpII36gFJ8zWHVLqdRolSp9ZpE7M0yrUielKpS6nJPOy87IVGQmG5uSnZSYaUHWJqUmWWpiXfbWHGnWkOoO6GsEcbJUpCgpKilSSFJUklKkqSQQpJBBBBAII1B1GtorXduj0jNC\\/HdWkzor4G44zJbXVr9sSmzNzCXZQxKpvWjOTNtXuiTZQEoZk27wolabk2hls5ZDSeoaVPlI\\/8Aae0Zv4S71\\/1YpsZZcg1UpyocntacpNvqcYouJ2J9NpyDwlpFyuIrC2AeGqqo1afmMs9ypg7t+UYm\\/KR\\/7T2jN\\/CXev8AqxTY7XxVUHqtsZeqcwbzE9hujTUwrQ5n3nKet5WgA9J0rUO48N0WbU31zOEy+4SXHJWRU4T+cvt5YKV\\/3lAnjv8AWYj0fWYe2bP4jX9ZGHtLmpSSql93fbNm06dny95DKT9z1qRoknNTpl2n3\\/I5eYnm3pksMPPBhDmyadc80\\/Jx3povf3TGjr\\/DthF\\/ODb0cZ09pD8\\/JMOglt6blmVgEpJQ48hChcWIulRFwQRvBBitW0hTiEncpaUnwKgDG6L73I0qP8N2j\\/8A55iP\\/QSD73I0qP8ADdo\\/\\/wCeYj\\/0EiY1BHan4lNnn9iZr+Val\\/OernutZ\\/4JUj9GY\\/y5\\/wDTEOX73I0qP8N2j\\/8A55iP\\/QSD73I0qP8ADdo\\/\\/wCeYj\\/0EiY1BB+JTZ5\\/Yma\\/lWpfznq57rH4JUj9GY\\/y5\\/8ATEOX73I0qP8ADdo\\/\\/wCeYj\\/0Eg+9yNKj\\/Ddo\\/wD+eYj\\/ANBImNQQfiU2ef2Jmv5VqX856ue6x+CVI\\/RmP8uf\\/TEOX73I0qP8N2j\\/AP55iP8A0EgiY1BB+JTZ5\\/Yma\\/lWpfznq57rH4JUj9GY\\/wAuf\\/TBBBBFsRJoIIIIIIIIIIIIiGfKQf7e+jn\\/AASXF\\/ri\\/EcKJHvykH+3vo5\\/wSXF\\/ri\\/EcKODtrn\\/SJiX+7yP+6pCKfxB+7M\\/wD3Yf6tEbG+SP8A2xjRc\\/fjcH+oF3RMT5Ui\\/pvDXk\\/NKe5ZCY8mmZrDV2y0TGakqbTiZWqPhu5slpKVtzCmbqdSw4lQU08tl0jMCIdnJFMvP8o1ovIYZdfWm7LofUhptTqgzLYdXlMzLxSlJIbYYZcmHl7ktstuuryQiJTvLkzE2zyceLzcs++2zN3RhNLz6GVFKJiUGJdsTSWn8vrMJn5WSeAV5vlDTBPnhJNq7K5hyT2TY8m2jZyXcxA62QSLON4dklINwQdFAEkEG31SDrEhoKy3hytLSSCPOspG8K8zQAf+6SD6ogjwQQRzHEGj0IeSvwUpuBWgfo+UCXlGJar3lZdOxauuYbSUzE9cOJsszdQVPkqJXOUqhT1DtsqSEpTL0OWZG9srOw+On9H3U\\/UFwR2Wps\\/1IcNtjq6upqfcbRMtXV3aurlq5c3VHcEfSajSbNPpNMkZdISxJ0+TlmkgAWbYl2203AAFyEgk8Sb8Yu6SbSzJyrSAAluXZSABbc2nXxJ1J3kkkkkwQQQRsoyoIIIIII4uoSEjVpCepdTk2J+l1OUmZCoSE20iYlJ2SnGVsTcnNyzgU29LzLDrjL7K0KQ404pKsxnHmtaUuEzeBWkjjlg\\/LFaqfh3iletr0Z1wkuv29T69Ot27MO7TftJqhqp0w6M1+e6fPcPnR6XMefVyuH7YxpR\\/vxt\\/\\/UC0Y598oaUZVh6hT5SPOJetKlG12FwzNyMy88m++xckWDbd6MQrGjaTLST1hnQ+tsG2uVxvMR7Wk8DrrprfXJErH5Nvfr8za2lNhfMTCzL0ev4Z37SZU7ZTe2uOnXXb1xTKckeTsrQ3alsNua7qX5kLZLbbqJR4sRToke\\/Jv3XRjjpHsJdcSyvCi133GUrUGXHmLvCWXVtnNKnWkPvobWoFTaH3QgZuril9jsw4xtEoAQdH\\/pGXcH6Ta6XOKt6loQvhqgbxcGL4cWW61IkfnLcQRfeFsOp152uFAcwDwjIH5Sf\\/AOJuiV++bGH\\/AEVh5EUGJX3yk\\/8A8TdEr982MP8AorDyIoMZO2v\\/AKQ6v\\/e1K\\/3bLQrE37uT\\/jLf7FLR3Fo64u\\/qB474R42fc991n6leIFsX19zXzt8xfP33N1RipfNYrXzZWfmvy0sbAz3zVUPJgrb+SPZFoyNvvlr\\/AIFn\\/ON\\/7B4izwRFsPY8xXhSVfk6BVfMJaYf85eb8xps1nf7NDWfPOycw4n8m2hOVK0o0zZcxUThyVWqFOQtEnMdilxQUsdky5dQFgbutrI000IB4xKY++Wv+BZ\\/zjf+weD75a\\/4Fn\\/ON\\/7B4izwRIPxybSP4R\\/6HoP\\/ACuM38J65+\\/v\\/wAaT\\/m8SmPvlr\\/gWf8AON\\/7B4Pvlr\\/gWf8AON\\/7B4izwQfjk2kfwj\\/0PQf+VwfhPXP39\\/8AjSf83iQrpU8vL\\/ZM6PeKuAw0VRZX6ptsKt37qv1cPuk+ZQqekp3yz5jGD1A+cwPI9n5OKxIAlwK2w1dVUeqCCIjiLFVexXMsTdfn\\/P5iWYMsw55rJSuRkuKdyZZKXlkK9NalZlpUrW2awAGtnZ+bqLiXpx3tnEIDaVZG27IClKCbNIQk2KlG5BOtr2AAI9InQX\\/uJdDr\\/JY0fP5pbRjzdo9InQX\\/ALiXQ6\\/yWNHz+aW0Yunyd\\/3ZxH\\/gyU\\/2pUSjBf8ARc7\\/AHuj\\/WRqC+Udf3M+A38Ozn8312RDziYZ8o6\\/uZ8Bv4dnP5vrsiHnEU24\\/wDSBO\\/4Ppn+zCNbir92pj+5y\\/8AqUR2Vgx\\/bjwl\\/hMsT\\/WelxK15ZfkszjJTK1pX6O9tKdxcokl5XivYFElCuYxRoci202q67fkJdBU\\/f1AkkFVVkWmy\\/d1Dl0+R69zU2Wk7milYMf248Jf4TLE\\/wBZ6XHpzRK9jeG6ZivC+MaPVGgth+cpqmnkhPbycymXmwzNyy1A5Hmio20KXEKW04FNOLQrPwzIMVKTqstMJulSpQoWLZ2nAJnK4gncpN7EblJKkqulREeWfBEl\\/loeSyNnzVx6YejnbRNqVCYfq2OOHVBkipNqzzxU9O4l23TZOXCW7YnnQuYveRQT8wVF9y5WB8xTlW+56NBFOYswrU8H1h+kVJFyn8pKzSEkMT0qokNzLBJOirFLjZJUy6lTaiSAoxuoSExTZlctMJspOqFj6jrZJyuIPFKrajelQKFAKSQJXHIv8qd90jFt6HOkZcafuhk2WKLgXiLXJ1tHz7JS7aWZDDC5ajOTGs5XZVtLclYk8vM1mWSzbD3+60tRk1iTxHloy8y\\/KTDE1KvOy01LPNzMtMy7jjMxLzDLgcafYdbKXWXWXQlbTra0ONrTro3iJoXI+cqQ3pOW\\/T9HTHeutjSGtWlKRa1zVKYIexmtmlS7z78w65sG2lX5btPl9eusqeXN3JTmXrmZL0yxcKpPofY\\/tQE+iXwniGZPn6AGqNUH1389bSLIkJl1RuZxtItLOK\\/olADKj5wlvziZ4Zr\\/AGnZ02dX6YARKPKP1wLBLDh\\/T4MqP17dmfTydptF06P7iXTF\\/wAljSD\\/AJpbujzdo9InTo\\/uJdMX\\/JY0g\\/5pbujzdojflEfuzhz\\/AAZN\\/wC1JjExr\\/RMj\\/cHf9YII9Ankgf2t\\/Re\\/exd385t7x5+0egTyQP7W\\/ovfvYu7+c294xfJ6\\/pmrf+Aj\\/vCTjGwb+6r\\/8Ag97\\/AGmTjZPBBBHXMWZBGtjlfv2t\\/Sh\\/exaP85tkRsnjWxyv37W\\/pQ\\/vYtH+c2yI0WKP6WcRf4Cq\\/wDu+YjAqv7l1L+8Jz\\/Z3I8\\/aCCCPnJFLR6ROgv\\/AHEuh1\\/ksaPn80toxlPGLGgv\\/cS6HX+Sxo+fzS2jGU8fSWi\\/uNSf8GSH+ytReEp\\/Qkr\\/AHuz\\/q0wQQQRs4yIIIIIIIIII6R0jcWKfgTgJjFjFUZmXlWsOcObtuqUVMFGpM1al0aadoVNQlxJbdmatWxT6ZJsKSrbTc20yctqdVp99qWYemHlBtmXacfecUQEoaaQXHFKJ3BKElRO4AG8IcWlptbqzZDaFLWeSUJKlH1AEx5v2MMwxN4tYpTUs6iYlpnEa95iXeaKVtPMO3NU3GX21DcppxtSFIVx1D07x19A666+64++644444p5155RcdeddUpTjjjilKUt1a1ay3FZrUo5nfBHzTmXRMTD74TlDz7roTe+XtFleXxGaxtpyAiiybknmSfbEvf5OFLTaNHzSEnnJtS5CZxkpEtLSO8plpyTsqlvTs0Eq+jznGZ6QaJR5\\/6wG1yGyjU7y8v7YTeH8GmGH+gFxvn5A3D+bsvQFkbhmmlNfqq4vYh37JF1BQtyRkUUDDZsgqVmphUzh\\/OLbGQQSsqSDrF1ehjl5f2wm8P4NMMP9ALjpDF8s5K7CsKNOAhSnqTMAG\\/1Jxufm2t\\/\\/ZvI04bgALCJrUmy3hKlpIIJfaXrydRNOg25ELBHMEWtGmqM3eT80zDoK49PY3HDj9VPa2JcVlfcz92H3Eanz\\/PUWb+c\\/no2teGsJUUctGT+agXw\\/tDNM7Itu4RQRzrTajO0iflanTnvN56SeTMSr\\/ZtO9k8jVK+zfbdZXb9FxtaTxSYhzLzku82+yrI60tLja7JVlWk3ScqwpJseCgQeIiUx98tf8Cz\\/nG\\/9g8H3y1\\/wLP+cb\\/2DxFngiwfxybSP4R\\/6HoP\\/K43P4T1z9\\/f\\/jSf83iUx98tf8Cz\\/nG\\/9g8H3y1\\/wLP+cb\\/2DxFngg\\/HJtI\\/hH\\/oeg\\/8rg\\/Ceufv7\\/8AGk\\/5vEqai\\/KRjWK1SaSNDIS\\/zrVJGm+Uf2RG22AnptmW2oZ\\/ULYDpZ2mvqbRBWAUbVG4iUVHl6WT\\/wCOVqfvnoP+k5OPULi\\/djGLsRYsla+5iCo\\/SC5J+nIlVeaSMp2SZhqaU6LSUtLBeYto1cCynL6JSCQZbhapz1S8+89f7bsfNez\\/ACTLeXtPOM\\/7U23mzdmj617W0tc3I1Y8tV+1laS\\/\\/md\\/9YDCuNp0aseWq\\/aytJf\\/AMzv\\/rAYVxY2Nf6T8Wf\\/AGxX\\/wDdczG+qv7l1L+8Jz\\/Z3IgOwQQR87opaJKeE\\/yh84XYWYaYaf2IBrn6neH9m2L89\\/2QHzZ88fclbtNoBqnzcME5\\/wAgFQ+bxO+Q+XzoldrsPLJjZKed7F++Wv8AgWf843\\/sHiLPBFmI2w7Rm0IbRiLKhtKUIH0RQjZKQEpFzTCTYAC5JJ4kmN4jElabQlCJ2yUJShI83lDZKQAkXLBJsABckk8TEpj75a\\/4Fn\\/ON\\/7B4Pvlr\\/gWf843\\/sHiLPBCvxybSP4R\\/wCh6D\\/yuFfhPXP39\\/8AjSf83iUx98tf8Cz\\/AJxv\\/YPG4Lk49Pj\\/ALoFhlfmI36lBwl+4q+02V8zC+vu9+cyq36XXfnP5wFn2YZID50Mp5H5DNjKXL5mvpdk358sTDPk4v8Acz48\\/wAOzf8AN9acWNsr2jYyxJjCVpdarPnsg5Jzzq2Po+lS2ZxlgrbV2spIsPDKrWwcCTuUCNI3WH63VJ6ptS81Ndqypt5SkdhLouUNqUn0m2ULFlAHRQvaxuCYkSQQQR1JFgR59XK4ftjGlH+\\/G3\\/9QLRjXJGxvlcP2xjSj\\/fjb\\/8AqBaMa5I+dWMf6bsU\\/wD3HXP95zUUlP8A9HTv99zP+uXG+zkJtJzATRqvLSMqGOuJ1t4aSV12zh1J26\\/cSp1LdWmqVVbrmKgzKCTlJtWco1PSjjxWGgA+3v3kRJC\\/7qnyen5VWGv8evf\\/AASPPRgieYU2x1rCdCk6DJ0qlzMvJKmVIemTN9sszM09NLzBp9CPRW8pKcqR6IF7m5jb0\\/Es7TpVuUZZlVttlZCnUulZ7RZWQSh5CdCo29Hda97a+hd\\/3VPk9PyqsNf49e\\/+CQf91T5PT8qrDX+PXv8A4JHnowRIv\\/eGxH\\/YOie2f\\/nMZn4Z1L97SP8AiP8A848ehr6Ez3Kqcnqy246vSpw4Uhppx1SWhcMw6pLY1lIaYYoTjrzikjJDbTa3XCdVptShkdUXKMct9gpV8IL6wT0SajWb9urEKg1Kzq3ik9QqrbdqWrb1blXaZcS7fl7lkKZcVbuOZpz89S6fNoo1NpNMVMpr0hWKi\\/KSks9E2gjVVnbtiuqU+YkJeTpdL86aWy7NyiJpc0hpxOVYYU9MrbZWpBKe17JbiAczSm3AlYYmcWVOZYcYCJZgOoKFrZQ4HMqhZQSXHXAm4JFwnODYpUCLwQQRsv5MHQAunTexxpYrFLqElgFh\\/VZCrYu3bsnmpSoS0u43Oy2HlEnAWg\\/ct2BKJV\\/yZ4u27QHp64H0qfbpchVano1Hnq\\/U5OkU1lT85PPJZaQASlOY+m86oA9mwyjM6+6r0W2kLWdBEelpd6bfbl2EFbrqwhCRzJ3qP5qUi6lKOiUgk6CJanJF4ST+DfJ+aP1ErUkJKvXdRKvifVWlMpYd1MRa\\/Ubot1Uw1qIdEwzZ89bUq+JguTCHmFNHZNNtyzGt35SP\\/ae0Zv4S71\\/1YpsSPpKSlKdKSkhISjEjIyDDEnIyUmw1LSclKSzSWJeWlpZhKGJeWlmUNsy8u0222022G2wEgARwflI\\/9p7Rm\\/hLvX\\/Vimx2lj2nNUjZVVKUwSWabRqZItk71IlX5BhKjqTdQRmUSSSonUxZ1bl0yuGnpZJuGGJNoG1irs35dOcjmsgqPeTER6Pt8Lb1\\/U1xNw6xFFN+exYN92jepo5nfm351+5a4KfXBTPnDySf8g8u8g8k8s8gnPJtrt\\/JHw0GXPiII4dZdcYdafaVldZcQ62qyVZXG1BaFWUFJNlJBspJBtYggkRVgJSQoGxSQQeRBuDrpv5xKY++Wv8AgWf843\\/sHg++Wv8AgWf843\\/sHiLPBFlfjk2kfwj\\/AND0H\\/lcb38J65+\\/v\\/xpP+bxKY++Wv8AgWf843\\/sHg++Wv8AgWf843\\/sHiLPBB+OTaR\\/CP8A0PQf+VwfhPXP39\\/+NJ\\/zeJTH3y1\\/wLP+cb\\/2DxIA0Q9IU6VujhhdpBfcf9wYxJptZqP3JfP5ug0QUq563bYZ+f1UW3fnDygUbywufM1P2XlJl9m7si875s8egTyQP7W\\/ovfvYu7+c294t\\/Y3jvFeK65VJOv1Xz+WlqSZllvzGmyuR\\/zyWaz55KTl1q\\/JuLTlWpSNb5bgESHDNZqVQqDrE5Mds0mTcdCOxYbs4l+WQFZmmkKNkuLFs1tbkXAI2TwQQR0XE5gggggggggggggggjqPGzGvDTR5w0ufFzFy55G07ItORcnZ+oTrjflM5MhtSpOjUaTUpL9Xr9XfQmSo1GkkLnKjOOMy8u1mVKQ0++zLMuzEw62www2t1551aW2mmmwVOOOOKIShCEgqUpRAABN9IStaG0KccUlCEJKlrUQlKUpFypROgAGpJ3REU+UN3zKXBpk2HaEm+t42BgXbctVWi+S3KVy5bpu+vuMJlwpTbTi6E9bsyt8Bt2YbmWm3EFqWZcc0LRkBpWaQNwaUukNirj1cbC5KbxDul+oU2lKeS\\/8AMNsSDEvRbQt8OpAbfXQrXplJpTsyhDYnH5V6dLTRmCgY\\/wAfPTGlZbxBiqu1dglUvOVB4yy1CylyjITLyqiLDKVS7LaiCLgqsbkXNLVKZTOT83Mo+o8+4tFxY9nmIbJHAlASSOBuI2vciJR5qpcpPgTOy6fobdpOLtZnjsyoJlX8Hb6t9KlEEBpPltdlAHFnV\\/vQ+ldQDLF5Vmw5zEfk89Ki3ZFC3H5HD2WvkttDNzyfC+6LfxMnTlroBSmUtGZU4cyQ2CA26Ds1R\\/Pk5+FL9f0i8asYJiTLtKw5wqlLPlZlaihuWuTEi45SblHWBmjbPooFjXFLOghxqXaqILrW2dlXRLyuK36Tddv12167Jtz9CuSj1Kg1mQdJDc\\/SKxJP0+oyTobKVBuZk33mHNUpOos8SI6c2P0TznZhPybwyIxG\\/XBmUCoFqYlW6OV5T+aPNFCw0Va\\/50TvDUoXaBNMqOUTy5xKTyS4yiWJvxsptW69iCN4jy7YI7s0lcD7h0bMesVcDbmTMGpYcXjVqBLzswytk1qipeE1bNxMoW0yTK3JbsxTK7JqLaNaWqDStVOYMdJxyHNyr8jNTMnNNqamZR92WmGlCym3mHFNOtqB4oWlST3iK5WhTa1IWkpWhSkLSd6VJJSpJ7wQQY9C7kvsYadjboH6N9yykyw9Urbw8o+F1xMtulyYlLgwtZRY8184I11qZnKrJ0WQuLUWEBcrWJWaabRLvMpGwKIP3I1cotS9ELEmr4Q4v1VUjgDi7U5Oberb5dMnhniClpmmyl2vobCtS3a\\/IMylDvBeopUmiRoFcDzElRamifm10uqU2tU2nVqi1GRq1Iq0jKVOlVWmTcvP0yqUyfl2pqRqNOnpV12VnJCclXWZmVmpZ5yXmZdxl1p5TagY7v2aYslMVYXp7iHkGo0+Wl5GqyxUO2amWGg0Hygkq7GcS327LmqSVONZi4y4lNt0CotT9PYAWDMS7aGH2zYKCkJCQ5a49BxICwoDLmzIGqSBy0EEEWDG7gggggghjOTktIS01Ozs0xKSkow9Mzc3MvNsSsnKsNrefmJh95aGWWGWULdeedWhtttBUogDd5rWlhixL466TWPGL8hmKViDirety0FKgErbtubr04LZae3DWfZoCKa1MOaqNq8h14tNawbiU3y03KVWxhRhvdWiZg3cMnWMYcRaVNW7idVaLOpfbwusepILFZoszNSqlNs3td0ip+jGklZnKFb03P1GdakZyct5x+HPHJ23nFknUZyn4ZkHkTApLrs3U1tqCm0Ty20ssyoUn0S7LMl8zASVBCn0tEpdbcQiuMXVFqYfZkmVhYlStTykkFPbLskN3F7qaSFZ7GwUvKfSQQCJUnybawX2qTpTYovsPCWnqjhnYNGmdmnYKfpUrdVxXIztMitTjbdZtJ3UQUIbQ79Kh4vNeTxW49AnkntG+c0ZdCLCi1K9T102975ancWb9lHUbOYlrhvsS81TqfOS6m0OS1RollydqUCqy7hdW1UqTNJ1tmUNtx\\/YVR3KhjVNSyEy9DkZqZccscgmJxpcjLNEg2zrQ9MOoBuLS6yNUgxiYTllPVZDwHoSjbjqiRcZlpLKE+JLhWn+0J4WOrT5Sf8A+JuiV++bGH\\/RWHkRQYlffKT\\/APxN0Sv3zYw\\/6Kw8iKDGv21\\/9IdX\\/valf7tloxsTfu5P+Mt\\/sUtHamBOE1Sx4xnwvwYo1WkaDVcUb4t2x6bWakzMP0+mTdxVJimy87OsywMw5LMOTAcebl0l1SAdUKOQO+n72+x3\\/KMwk\\/5O3j\\/0EajuTs\\/u7tEb\\/KAwx\\/1op8ejJEw2PYBwti2h1Odrsg5NzEtVTKsrROzksEsiTlncpRLPNJUe0cWrMoFWtr2EbLDVHkamzNLm0LUpp1CEZHFIACkEm4Tv1iIZ97fY7\\/lGYSf8nbx\\/6CD72+x3\\/KMwk\\/5O3j\\/0ES84Itz8Suzv+wz\\/APK1V\\/nkSX8FKN\\/Wnv8ALufOIhn3t9jv+UZhJ\\/ydvH\\/oIPvb7Hf8ozCT\\/k7eP\\/QRLzgg\\/Ers7\\/sM\\/wDytVf55B+ClG\\/rT3+Xc+cQmtJHkLsX9G3A3EnHS4MccN7io+GtvLuCeoVHoVzy1SqbSZyUkxLyb08hEs06XJtK9o6oJCUKO\\/n0aR6F3Kp\\/temlV\\/Bqv\\/T9Ejz0Y562xYUoeEqzSpOhSq5SXmaWZl5C5mZmSt7zt9rMFTLrqkjIhIypITe5tcxDMSU6Vps4yzKpUltcsl1QUsrOcuuovc6gZUJ053PGCPSJ0F\\/7iXQ6\\/wAljR8\\/mltGPN2j0idBf+4l0Ov8ljR8\\/mltGJX5O\\/7s4j\\/wZKf7UqNngv8Aoud\\/vdH+sjUF8o6\\/uZ8Bv4dnP5vrsiHnEwz5R1\\/cz4Dfw7OfzfXZEPOIptx\\/6QJ3\\/B9M\\/wBmEa3FX7tTH9zl\\/wDUojsrBj+3HhL\\/AAmWJ\\/rPS49OaPMZwY\\/tx4S\\/wmWJ\\/rPS49OaLL8nX9zsUf37Tf8AUTUbzBP1Kl\\/bSnwmI46dkpSoyk3IT8oxPSM+w\\/Jz0lOMNTMnOyky0piYlpmWfStiYlpllbjMxLutuNutuFtwFJIMKjle+S9nNFS657HzBSivzOjletZJqtGk2VPrwcumrTLrgo0w2xLJblbAqs06GLPqLqimlTK27WqTzcyqgzVcm0R8leVm2viHa1xWPfFBpt02hdVJnaFcVv1qXbnaXWKTUGly85JTkq4gpcbcbX5qhk40tKX2VNvIaWLaxxgqn42o7lPmghmdZC3aZUMmZySmSlI1sQpcs9lCJlm9loCVAh1ppaZJV6SzVpYtLsh5u6pd62rayNQriW12AcT3BSbKSkjy\\/I5i2rkuCzbiod22nWalbtzW1U5Kt2\\/XaPOPyNUo9Xpkw3N0+o0+clloel5qUmWmnmXmlgocQCN8bK+U85OO6dBbFAVK3kVK4dHnECoza8MrvmAqamqJNIaTOTWH14vttJal7hpLSnVUefcDbF2UOXNVkkpqMjcVLouryOE6vSaphqrTFMqDa5Oo094AlClCyklLjMxLupylTbicjrDyCCUlKhlOgqSYl35N9yXfQpp5lVlJPAjVKknilQspChopJCgbERMYwV5Syg6cHJyaYln35N0yiaSdgaI+Par2oTKJemyd9UhGFV3yzOIFoyAeOsw5lLN3dS5JtLNv1yYaW1LylGrFGREOeOUodw122ZyYqFAq9Ros9M0ev29MzdLm3pKYmKHdVDqFsXLSXnpdaFu06vW9VqnQ6pJr+gnaXPzklMpcYfcbPFxu8V4yn8Xy9CNUTnqFIk35F6cBFp5CnUOMzDiRoiYy3RMWGVxaQ6MpcKEZc\\/U3qi3KCY9J2VbW0XbkqdSVJKVrv+fYEKVc5iMxsSYI9Ankgf2t\\/Re\\/exd385t7x5+0egTyQP7W\\/ovfvYu7+c294s3yev6Zq3\\/gI\\/7wk43WDf3Vf\\/we9\\/tMnGyeCCCOuYsyCNbHK\\/ftb+lD+9i0f5zbIjZPGtjlfv2t\\/Sh\\/exaP85tkRosUf0s4i\\/wFV\\/8Ad8xGBVf3LqX94Tn+zuR5+0EEEfOSKWj0idBf+4l0Ov8AJY0fP5pbRjKeMWNBf+4l0Ov8ljR8\\/mltGMp4+ktF\\/cak\\/wCDJD\\/ZWovCU\\/oSV\\/vdn\\/VpggggjZxkQQQRxVRqdOo0lO1Wrz8lS6XTJV+dqFTqM0xJU+QkpVtT0zNzk7NONS8rKy7CFuTEy+6hlptsOOqSAFR4SBqSAACSToABvJO7220ueEBIAJJsBqSdwHMxysRgPlAWmzTZW3aPoT2BW25qs1Weot6Y5mSf1\\/mqjSBl6zYtiT5QpTJm6vUTIXxUZNwIm5OUpNpzIOwrKge6eUH5cXC\\/Caj3BhZokVemYp4tTDM7SZrFGSDNRwzw8fJflXp2izziHZPEW4pTVD9LFNRN2Sy45Lzk3V62JWbt6Yh+XJclwXhcFauq66zU7kua5KnPVmvV6szz9Rq1Yq1Rfcmp6o1GemluzE3OTcw64++++4tbjiySd2\\/nLa9tQp6adNYUw9NNzk3OpVLVadllhyXlJU6PyTLyCW3pmZF2JgtqcbYZLzSj26rNQbElfZUy5TpFwOqdGWZfQoFtDd\\/SZbUNFqXucKSUpRdHpKUez4iOWty363d1xUG07bp01WLiuetUu3qBSZFpT87VK1Wp1imUunybKPOemZ6emmJaXaSM1uvJA4gniYkEcg3oRTmK+Mb2lfflIcGG+Cc+uVw+TOy58muvFl2WzanpTaJUH5LDqnzTdYeeyRs7on7YclX31U2qMM88YTw7N4qr9OokqlX7KfSZl5IuJWSbIXNzSiQUgNMhRQFWDjpbZF1OJBhchJuT82xKtA5nVgKUBcNtjVxw9yEXV3kBIuSAZWOjVg1T9HvADB\\/BSmlpbOGtgW5bE3Nsk6lSrMlTmjcVYBUlBzrdfdqdXcybQnaTrmqyykhkQ2+Xl\\/bCbw\\/g0ww\\/0AuJzcQZOXl\\/bCbw\\/g0ww\\/0AuOptuLDUrs+lpZhAbYl6rSmGWxuQ0zLTTbaByCUJSkeET\\/FraGqNLtIAShqal20AcEIYfSkeoACNNUZfaEOh5dOnDjS9gtaN30GyaqzZdcvM1m5JSoTtOMrQpyjyj8mGaWFTPlD5rDS23NVTSEsuZlI3xiDG8H5Pz\\/d6Tv8AAViJ\\/pqyo5ewVTZOsYroNLqDRekp6osS8y0lxxkraWSFAONKQ4g8ihSVDnECprDczPycu6CW3phttYBKSUqUAQCNQbcRHfn3t9jv+UZhJ\\/ydvH\\/oIPvb7Hf8ozCT\\/k7eP\\/QRLzgjrv8AErs7\\/sM\\/\\/K1V\\/nkWP+ClG\\/rT3+Xc+cRDPvb7Hf8AKMwk\\/wCTt4\\/9BB97fY7\\/AJRmEn\\/J28f+giXnBB+JXZ3\\/AGGf\\/laq\\/wA8g\\/BSjf1p7\\/LufOIjtC+ToY50it0Wqu6RGE7jVMq1OqLjTdu3elx1EnNszKm2\\/odXXcDeqnWIGZ3nMRLiggiW4Zwbh\\/CCJxugyjkoieWy5Mhc1MzWdTAcS0QZl10oyh1YISQFX9K5AjZU+lSdM7bzRC0dv2faZ3FLv2WfJbMTa3aKvbffuEEaseWq\\/aytJf8A8zv\\/AKwGFcbTo1Y8tV+1laS\\/\\/md\\/9YDCuPca\\/wBJ+LP\\/ALYr\\/wDuuZhdV\\/cupf3hOf7O5EB2CCCPndFLRIBwy+T8Y14nYcYf4kU\\/H7C6mU\\/EKyLTviRps7b92PTchKXXQqfX5aRm3GGlMOzMoxUES77jBLSnWyWyUEGPvPvb7Hf8ozCT\\/k7eP\\/QRJy0TP7lbRn\\/yfsGv5ubbjIGO25XYzs9dlpd1dHfUtxhlxR+laoLqW2lR0E2ANSd0WdL4XpDjDDimnsy2Wlqs+4AVKQkk2vpck6boiGfe32O\\/5RmEn\\/J28f8AoIPvb7Hf8ozCT\\/k7eP8A0ES84IyPxK7O\\/wCwz\\/8AK1V\\/nkPfgpRv609\\/l3PnEQz72+x3\\/KMwk\\/5O3j\\/0EbtuS70Erv0CsKcQ8PLyvm278n7yxDTeUrULYkarISsnKC26PQ\\/IplFVbQ6uYU9TXXittOz2TjXn6xIGz2CNzQNmuD8M1JurUamuy08006yh1c\\/PTCQh9ORwdnMTDjZJToCU3G8WMZUlQKbITCJmXbcS6gKCSp1axZaSlV0k2NwSO6CCCCJ5G6jz6uVw\\/bGNKP8Afjb\\/APqBaMa5I2N8rh+2MaUf78bf\\/wBQLRjXJHzqxj\\/Tdin\\/AO465\\/vOaikp\\/wDo6d\\/vuZ\\/1y47Kw2wVxkxmmKrJ4P4SYm4rTVBZlJiuS2GthXVfMzRpefXMMyD9VYtelVR2mszrstMtyjs4GETC2H0tFwtOgdtf2DOmz+R7pUf\\/AEPeLX9D43h\\/Js\\/7YGlb+87Cv\\/Td6RLJi38C7G6Zi3C9Or0zWZ6TenVTqVS7DEuttHms9MSiSlbhzHOlhKyDuUpQGloktIwyxUpFqbXMvNKWp1JQhCCkdm4pAIJ11Aue8x5uf9gzps\\/ke6VH\\/wBD3i1\\/Q+Ogr1sW98NbkqFm4i2ddVgXdSfJTVLVvW36ta1yUwTsoxPyJn6FXJOQqkn5ZIzUtOSvlMs15RJzDEwzrsvNLPqExpM5Yjk5GdLXC9eMuFdES5pD4T0OYVJS0i1qzmJtiyPlFRnbIdSnfNV6lrdnKtZTnnuvzkxP0HJxFZlX5DPxNsEFNo03PUGqTlSn5RHnAkH5dpBmmWwS8iXLN1GZCPTZRYh0pLQstaSHqhhEy8q4\\/JvuzDrQCyypCQVtj6+TLqVj6wSfrAFIuopvCCiraC4423tGmwtxDanHiQ03rEDaOlIUUtpz11gJUdT1RR1p1h1xh9pxtxtxTLrLyS26y60pSXG3G1JSpDqFp1VtqyWlQyO+COb\\/AKqtRqk6pNxuO48RxB3ERCYkr6IPyfitXg1bGImk5i5brVjVeSptw0qysFKq3ck7dFHn22p6nuzuIr8mm3qbTKhKrYmEO2rJXV850qcbcp9epEwUusyiMJMHcNMB7BoWGGEdn0exbGtyXDNMoVGl1oa2nmJmJ+oTbq3p+r1afWgPVGs1aZnKpUZjOYnJ2YdO0iMjyGXKOqolRpOhLjVXs6PVZpTWj3dFUmEg0qszb7r81hROzb58+Srky8ucsTbOJXK1hc7arDk0mr23T6fK\\/juLZRJYLVh9irYWp6JaZfQJeqLfdM1UmZtsIW9KPzKwFBrMUOtJZQyw80pp7sUrUUptXDbNLMmiZkWsryh2cypxXaTCHEhJU2VkABB9FSA2lCFJyqKAq4BEbD5SP\\/ae0Zv4S71\\/1YpsST4jYfKR\\/wC09ozfwl3r\\/qxTY2m1X\\/o\\/xL\\/ekv8A7fKQ9iX9xJ7wl\\/8AamIiPR9fhzZk3iPiJYmHkjOsU6dvy9LXsySqE2h12UkJq6K3I0SWnZllnN9xiUen0Pvts\\/SKbbyaGvuj5CO9NF7+6Y0df4dsIv5wbejhSntIfn5JhwZm35uWZcTcjMhx9tKhcEEXSSLggi+mtiKnbAU4hKhcKWkEXtoVAHXwvG8n72+x3\\/KMwk\\/5O3j\\/ANBB97fY7\\/lGYSf8nbx\\/6CJecEdr\\/iV2d\\/2Gf\\/laq\\/zyLR\\/BSjf1p7\\/LufOIhn3t9jv+UZhJ\\/wAnbx\\/6CD72+x3\\/ACjMJP8Ak7eP\\/QRLzgg\\/Ers7\\/sM\\/\\/K1V\\/nkH4KUb+tPf5dz5xEM+9vsd\\/wAozCT\\/AJO3j\\/0ESRdCjR\\/rei1ouYSYB3HX6ZdFZw5pVbp0\\/X6LLTUrS59VUu2vXC25KS88lM42hqXq7cu5tkozdZcUMkEZ5XQRIsN4AwvhKbfnaFIOSkxMy5lXlrnZyZC2S629lCZl91KTnbScyQFWuL2MZshRKfTXlPyrbiXFtKZJW6pYyKWhZACjYEqbSb79O8wQQQRM428QKsGOWq5QDB1mQp81inTcXaHIABukYx27K3XMvo1s1icvCnPW\\/iBP7TcNeoXbMqaG5kpBOexyw\\/lJNyMMNy+J+ixRKrMZN7Wq2HiZULfl0aqcnS3b9w2nci3Q45mtsquZoNIzaIfJLpjEQRwJTNp+O6SlCJXEc862i1m5\\/saknKNyAqfamHUotpZDibJCQkjKm1OMVyrSwCWp9\\/KBYJdKX0gWAslL6XAAABYAADhaJfdO+UeaO7sulVV0fsaJKbClZsU+pWLU5fUGezWJp+s0l5SlAnWb8jAb4h5znYVr5SBgWwnO3tHHFmprEu6cqzcln0FCplIOwZK5Fy5FBh05FyY2anGPwJV8kERE4I35237QMthUJEH9IUyTvuHAtlI3H822u6Mw4prRFvOUA23iXYv46tkX9Vu6JJOJ\\/wAo9xdqzE1K4PaOdg2Q4428yxVb\\/u6u4hzKFKzQ1Os02iU\\/DuUln20HaNy0zM1WWQ\\/q7YTbGsy5pH0j9L3SM0s7hauDHnFCv3t5E847RbeWuXpNnW4XUbBaqBaFIZkbfpj62cmJiosSAqtQQhBqM9OOZuRjdBERruPMXYkbLNYrc3NSxIJlEBqUlFFJzJzy0m2wy6Un6qnULUN+a+sa2bqlQnhlmpt11F79ncIaJFrEtNhDZIsCCU6G5FiTci0AlSQlGalEAADM5ncEpyBJOe7Ic3VvCkvLPzcwxKyrLszNTLzctLS0u249MTEw84G2mGGmwp15150pQ002hbji1aiN5iUnySvI71+k163dJ\\/S6tR6jTNCmpWt4T4KXBK7OqCqy5RNSF7Yj0p9JdpnzW8WZm3bNnWm6maoy3Urkl5FmSl6VVGsJYQq+Mao1TqYyrswpKp2fWhRlZCXKgFPPrFgV2v2LCVdq+v0UAJC1o8p1OmalMJYl0E6jtXSD2bKCdXHDuAAvlF7rUMqAVaRtW5JDRKqOiTog2rRrtpSqVijijUHcUcR5OZYDVRo09W5OTlbdtWdKyp5l627ZkqazP09RQ3IXFOXAhtsKddde2iwQR39SKXKUSlyFIkUFEpTpVmVZBtmUlpASXHCAAp11WZ11dhncWpR1MXFKyzcnLMyrQs2w2ltN96rD0lq\\/jLVdaraZlGwA0iOxy6fJ+VLGOzZPS0wjoL1SxGwzoxpeKdvUqTXM1G78NZEuTMrc0qzLgvTlaw\\/Lk0qos+TuzE9aM3MPmZbRaclJz0PaPUtWhDqFIWlK0rSpJCk6ySlW4gg8UnnHBQ6REW3lMuRDnqrVLjx50KqJLOO1B2arV66P0r5PJJTNOkvT1WwjBSxKNtPqK5uYw\\/mXWgw8JlNnTLjTlMtKV5\\/2v7LZqpTL2KsNy6piacSFVimMJBffU2kJE9JtJALrxQAmZYRdx0pDzYW6p0KhuJcPuOuLqMi2VqULzUugXWVCw7dpI1WVD9tQkZs35RIVmWUxZI2GaIHKg6WGhkzKW7YN3S14YYMvrcXhPiMxOXBaMqH3lOTRtp5mcka7aDry3ZmaDVvVeTo8xUX3J+p0iqOKdS5gHWqLWrbq1QoNw0mqUCuUiadkarRq1ITdKqtNnWFFL0nP02eZYnJKZZUCl2WmGWnm+C0xx8c102q1agzonKZOTdMnWVFBcYcWy4MqhnZdTuWjMkBxl5CkKtZaDuiDsPvyrodl3XGHU3AW2ooVbik2Iuk29JJuDuIMS6cK\\/lHGCVVl5VnGfADEux6iEMtvzmHVXtrESkLmAEoem1t19\\/DupSEotWbwlWU1qYlm1eTh6cU15Q7ksxy+egE6yy4ufxflVuNNOLlnsNlF2XUpKVKYdMvXJhgvNE7N0sTLzKlpOyccaJdEICCLRlNuuO5ZoNuuUmeUAB201TsrqrAC6hJPyjVza6rNDebWFrb5vFdYQmynWXSPzlsICvX2YQD7PG8TML8+URaIdCln02HhtjhftVS6RLpm6NadnUJ1CdokLcqs5ddVrDKlkNqbQm1ns2nFl4tOt7B3UVpScu\\/pX45U+oWrhNIUfRus2fbfl5h60KhMXFiXNyj6Q25Ku4h1CTpiKWgZJWxNWjbNr1lpZeQusvsu7KNIkEais7XsdVplcuuqpp0u4CHGqUwmSUsKFinzoFydSm1wUomUhQUoKzCwGPNYiq80ktrmi0hQspLCEMkjUG60DtbEGxGfKRvB1hWbm5uozc1PT01Mz09PTL03Ozs2+5MTc3NzDinpiamph5TjsxMTDri3XnnVqedeUpxxWtxSgjb7yfPJC42aYNRoN+4gydXwi0dnXGp6YvOpSYlLqvynpKFqk8NaJUGFqmmZ1Ci0m8qnJi2ZRBfekfuinZNykuQyiUKsYmqDdNo8m9OzbpzKyA9m0gqSFzE0+qzbDKSbreeUkXISCpakpOrlZWYnHksSzSnXVnRKRoBcAqWo+ihAv6S1EJHEw+5HbQBqOlnjlIYpX3RHzo94M1uUqtxTM4wtNPvy+Kf5NU6Bh3JuuJLU2w267IV29G0bZLFupl6XMplXrpps0idLHVuEWEWHWAuHVr4U4UWvT7QsW0Ke3TqLRqe2SkJJL0zPz8w8VTdTrFTm1uz9Wq0+8\\/P1Kffem5t5191ax2lHcuAMFSuCKGinoWiYn5lSZmqTiUkB+ayBIbazDOJaWTdthKrE3ceUhDj7iYtii0lFJlOyuFvukLmXRuUsCwQi4B7NsEhF7EkqWQkrKRGN+Un\\/APibolfvmxh\\/0Vh5EUGJX3yk\\/wD8TdEr982MP+isPIigxyvtr\\/6Q6v8A3tSv92y0V5ib93J\\/xlv9ilozM5Oz+7u0Rv8AKAwx\\/wBaKfHoyR5zfJ2f3d2iN\\/lAYY\\/60U+PRki4vJ6\\/pZrf+HT\\/ALvk4k2Cv6Gnv7u1\\/qzBBBBF\\/wATWCCCCCCNfvKp\\/temlV\\/Bqv8A0\\/RI89GPQu5VP9r00qv4NV\\/6fokeejHJHlDf0x0L\\/Aiv9vmYrbGf7oy395I\\/178EekToL\\/3Euh1\\/ksaPn80tox5u0ekToL\\/3Euh1\\/ksaPn80toxkeTv+7OI\\/8GSn+1Kh3Bf9Fzv97o\\/1kagvlHX9zPgN\\/Ds5\\/N9dkQ84mGfKOv7mfAb+HZz+b67Ih5xFNuP\\/AEgTv+D6Z\\/swjW4q\\/dqY\\/ucv\\/qUR2Vgx\\/bjwl\\/hMsT\\/Welx6c0eYzgx\\/bjwl\\/hMsT\\/Welx6c0WX5Ov7nYo\\/v2m\\/6iajeYJ+pUv7aU+ExBBBBHR8TqOn8ccEsOdIvC+7sHsWLfZuSyLypy5CpSSwGpySfQrbU+t0WdKFrptdos8hmp0ipNJU7JT0u05quIC2XIAmnfoQYkaDGNE9h1d6Xa1ZtaM7V8LMRGpYy9Pve1W5lTKVuIQtxmnXPSNdqTuigLdLtOnXGZyWVN0WpUepz\\/otxirpfaJeGGmdgvX8HcTpQttzJVVbRuyUYQ\\/WrDvKWlplmkXRRCtyXDrkoZl6WqNNcmGZWt0l+dpU2623N+UM1htK2eSuNab2sulpivyLZNPmyMiX0A5jT5pQveXdVcsrVmMq+rtEjs1vocj9eojdVY7RsJROspPYr0AdSNewcO7KTcoUf2tZJuEqWD5vMEd\\/6UGjNifolYyXRgtitSvI69QnhM0qqywK6Ld1sTbrwot2W\\/NaxD9Jq7DSlpbUryymzjU5SKkzLVOQnZRnoCOH5yTmafNTElOsOS03KvOMTEu6kpcZeaVlWhQ5gg6glJFlJJBEVU42tpa23EqQ42pSFoUCFJUkkKSoHUEEEEQR6BPJA\\/tb+i9+9i7v5zb3jz9o9Ankgf2t\\/Re\\/exd385t7xe3k9f0zVv\\/AR\\/wB4ScSnBv7qv\\/4Pe\\/2mTjZPBBBHXMWZBGtjlfv2t\\/Sh\\/exaP85tkRsnjWxyv37W\\/pQ\\/vYtH+c2yI0WKP6WcRf4Cq\\/8Au+YjAqv7l1L+8Jz\\/AGdyPP2gggj5yRS0b8cHOX3xnwbwiwqwhpWAmF9ZpmFWG9j4b06rVCvXYzP1WQse16Xa8nUp5iWdEu1NzzFLbmppqXSGUvOqS0EtBIHZn3yDjv8Ak54Sf8orx\\/6eI4UEWEztW2gS7LUuziJ5tlhtDLSBJUw5G2kJbbTdUkVEJQkAEkqNtSTG3TXquhKUJnnUpSkJSAG7BKQAAPQ4AARI9++Qcd\\/yc8JP+UV4\\/wDTwgv5R\\/j1s3A1o64RJWUqLanbgvNxKXMs0qW0maZLqAfrIDyCv\\/fU7yY5MEO\\/jb2ifwlf\\/wDA0r+Yx79P1n9\\/vf8Ak\\/8ARG8q\\/PlBmnJdEu5KWrRMD8NEqSrYVC3LHrdbrSCtpga63b4u656I6ph5DrssE28ylDbxamG5sMpcTrJxz0ydKXSVW4nHDHG\\/r9prk0qdFtztXNKs2Xm1KURNSlkW+1SbPkn0khLLspRGFNNgMtBDSQmMa4Ij9VxpiutoU1VMQVSbYXm7SWVNuNSq8xBIVKsluWUNBYKaITqAADaMSYqM\\/NgpmJuYdQbXQp1fZ6CwPZghF9L3y3vrBBH01l2Le2I9xU+0MPrRuW+bqqjgbp1t2jQ6ncVcnlqUhGUtSqTLTk695zqAtTbJSgq+k4xIR0K+QFxKvaco996YtUVhlZ2s1OIwktipSVSxHrrQycZYuKvSK56gWTITKSy48xITFeuZTKpinzUpa1SQJlow3g\\/EOK5lMvRac9MIzBLs4tJakJa5FzMTawGkEAlQaSVPLAIaacUCkElTpyoOBuUYW5qApdrNN34uOGyE2GticxH1UqOkay+T85PbFTTtxMlqTRJaetrB+26jJfqpYpOy6BI0KnrCn1US3hM\\/Q1q86rLsrZplNl25lmmF5mq14S9LSBMz3cIsJrDwLw2s7CXDGhS9t2LY1Hl6LQaYx56kNM6635ydmSA9O1WpTbr9SqtRmFLmahU5qanJha3phZLrDDCzDvBexqBhthTZ9DsOxbZlBJUS3LfkxKSMo2pZW\\/MOr1nJmfqc8+tybqtZqL83VKxPvPT9TnJudmX5h7saOzNnuz2n4GkFhK0ztZnEI+kajkygpT6SJSUSr0mpRs6m\\/wCUmHB2rpTlaaZs+i0RmktFRIdm3UgPPW9EAWPZNXFw2FWJJ9JxQClAAIQgiDJy8v7YTeH8GmGH+gFxObiDJy8v7YTeH8GmGH+gFxG9vP8ASKn\\/AA3T\\/wDUzkYGMf3Ka\\/v1n\\/UzEaaozN0D9MaqaDWOL2NlHsOn4hzj1kV+y\\/ueqdembelgzXZyjTi54z8rTaq8XZZVHS2iX8lKHNvrF1stDWwygjj2m1GcpE9K1Knvebzsm6l+WfCGnS06g3Svs3kONKseC0KHdFbMvOMOtvMqKHWlhbawASlSTcGygQbHgQR3RJn++TMQPyUrO\\/OpW\\/6FwffJmIH5KVnfnUrf9C4jMQRPfxv7Rv4SOfybRv8Al0bb8Iq1+\\/3P8mx\\/wu748zEmf75MxA\\/JSs786lb\\/AKFwffJmIH5KVnfnUrf9C4jMQQfjf2jfwkc\\/k2jf8ug\\/CKtfv9z\\/ACbH\\/C7vjzMSZ\\/vkzED8lKzvzqVv+hcH3yZiB+SlZ351K3\\/QuIzEEH439o38JHP5No3\\/AC6D8Iq1+\\/3P8mx\\/wu748zE8bkvOUkr\\/AChf6uPz7hRRsMf1IU4ZiW+abqnrlNb+7\\/8AVA24e8rotH8hFMNlM7PZ+U+U+XvBWzLA2nOctV+1laS\\/\\/md\\/9YDCuNWvyaX\\/AOrT\\/wDxcv8A9fEbSuWq\\/aytJf8A8zv\\/AKwGFcdGUisVGv7GKjVqtMmbqE3hjGPnEwWmWS52C6xLNfk5dtplORhlpv0G03y5lXWVKM4lpl+bws\\/MTDhdeckKnnWQkFWQzSE3CQlOiEpGgF7XNzcxAdgggjimKtiRThb8oTvnDDDLDrDWW0Y7UrDGHlh2hYzFVmMTaxKO1Ri07ep9BaqDsoiz30Szs8mQTMOS7bzyGVOloOuFO1j7775MxA\\/JSs786lb\\/AKFxGYgiyEbXNobaENoxG4lCEJQhP0dRzZKEhIFzTydABvJPMk6xuU4grCEpQmdWEoSEpAbYsEpACR+1X0AtqT8byZ\\/vkzED8lKzvzqVv+hcH3yZiB+SlZ351K3\\/AELiMxBCvxv7Rv4SOfybRv8Al0e\\/hFWv3+5\\/k2P+F3fHmYkz\\/fJmIH5KVnfnUrf9C4PvkzED8lKzvzqVv+hcRmIIPxv7Rv4SOfybRv8Al0H4RVr9\\/uf5Nj\\/hd3x5mJO9D+UdX7V63SKSvRWtFlNUqlPpxeTinWlqaTOzbMqXQ2bLAUWg7r6pUnPVyzIGUSuY8vSyf\\/HK1P3z0H\\/ScnHqFxf+xbFmIcVS2IHK\\/UVVBck\\/TkSylS8pL9kl9qbU6AJSXYCs5bQSVhRGX0bAkRMMK1KdqHn\\/AJ4+p7sfNezzJbTl7TzjPbs0IvmyJ33tbTjfz6uVw\\/bGNKP9+Nv\\/AOoFoxrkjY3yuH7YxpR\\/vxt\\/\\/UC0Y1yRyzjH+m7FP\\/3HXP8Aec1EAn\\/6Onf77mf9cuJM\\/wAmz\\/tgaVv7zsK\\/9N3pEsmIm3ybP+2BpW\\/vOwr\\/ANN3pEsmOw9jH\\/RzQf7pVv8AfM\\/Fl4V\\/cWX\\/ALpMf65cEEEEWlEiiIny43Jw\\/qf1+oaZWCluluxbqqDZxxtqkymTFoXdUphLUviHKy0snZytvXfOPMy1yZoQim3c+1UQ8+3dSmqXG7j1Drmtqg3nbdftC6aPT6\\/bF0UepW\\/cFCqjDc5S6xRKzKO0+qUqoSrms3MSU\\/JTD8vMMqyQ406pB4+bAU5TbQEuDQWxzmKXSmahVMD8QHahXMILqmQ4+43T2nm1VKxa7N6qUquez1TLEs5MBSvnuizFIryUy8xPz9NpfJW2nZ39FTLmLaOxamzro+lpZpHoSM66rSbQlIsiVnFk9rfRqcWLEpmUIbrfFFF81dNQlkWlnlfl0JGjLyj9Ycm3if7VDl0iwWhI1vy0zMyUzLzklMvyk5KPszUpNyrzjEzKzLDgdZmJZ9pSXWX2XUpdadaUhxtxBW2NaJ0nJFcojLaZeEX3AYjVVn+yJwnpkpK3aH1obmMQLYbDMnTMRpJnNJdnHHSxTbwZYRqSddUxUdWXk7gkZRiCxHbuAWOmIejbi5ZONOF1XVSLwsirt1CULm2MhVZFYMvV7drcs06yqdoVw0x2ZpNXlEuNLdkZp1Uu\\/LzSGZlqvNnWOJnBFcTNHtHaROltirSaCLrYCiUTLKSQkzUoSpbd7dqhTsuVID2dOlo1UcpU2HRdTDlkTLQP1276KSDp2jZJUg7\\/AKyLhK1R6acRsPlI\\/wDae0Zv4S71\\/wBWKbG6vRC0q8OtMnA21sa8OnwyzU0fNl22y9MJeqtjXtT5eVXcFp1VSUtlT0i5NMTNOndgwmsUOdpVbYZal6k0hOlT5SP\\/AGntGb+Eu9f9WKbHV20mclqhs1r07JvNzMpNU6TmJaYaVmbeZdnJNbbiFDQhSTu3g6EA3EWDiB1t\\/D808ytLjTrcstC07lJVMsEEXsR3ggEG4IBERHo+0w0vR3DbEjD\\/ABFYkGqs9YV8WpejFLemDKM1N21q9IV1qQcm0NPKlm51cj5Ot9DDy2Uu7XZuEbOPi4I4VZdcYdbeaVldZcQ62qwOVbagtCrKBBspINiCDaxBFxFUglJCgbFJBB5EG4PqMSZ\\/vkzED8lKzvzqVv8AoXB98mYgfkpWd+dSt\\/0LiMxBFjfjf2jfwkc\\/k2jf8ujc\\/hFWv3+5\\/k2P+F3fHmYkz\\/fJmIH5KVnfnUrf9C4PvkzED8lKzvzqVv8AoXEZiCD8b+0b+Ejn8m0b\\/l0H4RVr9\\/uf5Nj\\/AIXd8eZiTP8AfJmIH5KVnfnUrf8AQuD75MxA\\/JSs786lb\\/oXEZiCD8b+0b+Ejn8m0b\\/l0H4RVr9\\/uf5Nj\\/hd3x5mJM\\/3yZiB+SlZ351K3\\/QuCIzEEH439o38JHP5No3\\/AC6D8Iq1+\\/3P8mx\\/wu748zEkC\\/fk3+Nkg+9+phpHYWXVL5qMsb8tm7bAfP1iUPC304ltpKCnUDzZVtctqWmsy0NV2M\\/J441YGTs3I3bdGF1Qdk1NNurt2tXZOIUXZqalE6iqnZNIWobWUdKtZKCEFtSc1KUhJBE7x3gfC1Gmi3TaX5sjKTl89qLwuFKH9Xm3TwGm7ujLrdPk5MrEuz2eVagPyjq7ABNh+UWrmYwbqtPfpVSn6XMqaW\\/TZ+cp8wphS1Mrfk31S7qmVLbbWppS0EoUtpC1IUVFDavNhpBBHP7yQl1aUiwStYA32AWoDU6mwAFzrEbP2D3gRl9gVoTYq6QU3SpKzLgw+pjtYYkn5dVz1W45JCG56nTNVZD5pVp1pSVJl5V1LgQh0B5SEJWttanEbrcJ\\/k396zD7ExjlpIWvRpZpTRmaLhPa1WuZ+bASlUyyxc94KtJunavnoYmHLRqu0Oq65Kt72oII6C2aYJwvXJj\\/AOK0tM4EtNuhK5ufbQV5Aq6kMzTaVgnehYUgjQptpEnw7TpOeeQmaZ7UFSgR2jqLgAkfta0cvXxvG8PRV5M\\/RC0Q3pes4YYcprV\\/SrakDFDEWaZvC+0axGa6bOPSUnRLZdKUhtbto0G31PNKcRMbYOLCtgUEEdR06m0+lSrcnTJKVkJVsDJLyjDbDQJABVkbSkFarXUs3Uo6qJJJiymJdiVbDUuy2w2NcjaEoBOgKjYDMo2F1G6jxJggggjOh6CCCCCCMNdJvQN0VNLmXWvGrCii1i5hKiUk8QaJtLZxCkGmw23KoRddGVLT9SlpIIHkdLr\\/AM8UWXBcCaYQ88F6K8Zvk37ipmbntHrSLaTKOOPqkrYxktxYelm8gqXTM3xZTS0za\\/O2bqm8P5QAfSgOHJoEEQTFmCMKV1iYnKpRJN+cQ0pXnbfayk0spKcvbTMm5LvPgcEvLcSLmw1N9HVaTTphl6YdlGi+E5u1TmaWpVwLrU0pBcNtLrzcOQjR\\/pJaCGLui3WKzRL\\/ALjw4rE3RF1Ruacs+r3NUJZZo6spjyddatC33VhZ\\/YNo0zr\\/AN9DcYWwQRxHiSRlZCe7GUa7JvKo5c7i9yiBq4tat3frvOsVTMIS2+6hAslK1BIuTYA6C5JJ9ZjtzCPBS6sZqs3RrXqFAkJpycMklyvzdSlJfaiUenSpSqfSqq4EFphxOsloq2hQNTVKlDeTgt8ncxnvKWpNdxT0gMMLOtypSzFRbRh\\/Rbqv6tuSb7aXWWVt3HI4dSEjMuZqaccS\\/UWpUEPIbnDmzBBFk7MMJ4fxDMyqKxTxOJWFKUkzU6yFFLuUXEtMM6ZQARuI3gxuKDJS07MhuZa7VBWgWzuI0JAIu2tB4843W6MnI4aE+jZMyNwLsecxnvyQUxMM3bjG9I3NLyE6g7RUxRbNlpCnWZJFp8Iep8zPUSq1unqZZLNbLwdfe2stoShKEISlLYGolCRkEpSCEpCR5qQAAAEgAAADdBBHXVJo1JocqmUpFOk6dL2BLcow2yFqAtndUkBbzhG911S3FcVGLSlpSVk0dnKsNMI3kNoCSo81q+ss96yo98KwQQRtIyI1U8p7ydVe5QWjYQUih4pUnDNeF1UvKpTL9WteduVNYTdcpbcq00wiTrNHMouSNBWta3FPh5MyhCUt7JSndRf3tliD+VdZv5qq3\\/TWCCK1xHs\\/wjX6tMVOrUjzuddQwhx\\/z+py+ZLLDbTY7OVnWWRlQlKbpbBNrqJJJMbqFIp01Nuvvy\\/aOr7POvtn03yNIQn0UOpSLJSkaAbrnW5juvRs5A69sBsf8HcaJ3STta5JPC3ES1r6maBK4cVamzNYZt2rS1Tcp7FQduybbk3ptLJZTMOS0w20pWsplxPmxJfggiQYTw3RcMykzKUOS8yl5iZEy635zNzOd4tIaK882\\/MLT6DaE5UqSjS+W5JOfSpGVkm3UyrXZBxaSsZ3F3KU2Bu4tZFhppbvggggiVRtYIIIIIIxu0tMDZ3SX0ccWsCqdcUtaU5iZarlvy9xTlPdq0tSXPL5CeE09TmJqSdm0DyXZ7JE2wo6+e08wAxxvvbLEH8q6zfzVVv+msEEQPFmCsM4mnJaarlN8+flpbzdlfntQlsjJdW4UZZSbl0K9NSjmWlS9bZrAAaGqUySnX0OTLHarSyEJV2jyLJC1qtZtxAOqibkE677Wg+9ssQfyrrN\\/NVW\\/wCmsSacBMNZjBnAzBfB6cq7Nem8KcJ8OMM5quy0ouQl6y\\/Y9oUi13arLyLkxMuSTFRcpK5tuVcmX3JZt8MqedUlTiiCFYTwZhrDEzNzFDpvmL00yhl9fnlQme0bQ5nSnLNzUwlNla3QlJO4kjSF0qnSci46qVZ7JTiAlZ7R1dwFXAs4tYFieFjGGfKY6B1a0\\/MLcP8ADuh4kUvDV+y7\\/XebtTq1tzdysT7X3OVmiGQblpWsUpyXd16kJjyhTrqChktbHNQWnTF97ZYg\\/lXWb+aqt\\/01ggjBxJgDCWIKq7UqvSfO51xplpb\\/AJ9Upe6GmwhtPZys4w0MqRa4bBO8knWGKjSafNzS35iX7R1SUBSu1fRcJSEp9FDiUiwAGg146x9LY\\/ydW+7RvSz7re0o7SnWrXum37gdkmsL6wy5Nt0SrylSclW3V3i6htb6ZVTKHltrCNdKltrAKTKlggjc4SwtQcLtTrVCkfMUTbjK5hPnU5M9oppLiWzecmJgoyhaxZspBvdQJAtl0qQlJFL\\/AJq12XalvP8AlHV5sgXl\\/bFrtbMrda99b2FiCCCJfG3ggggggjADlA9AbDfTzwnatK4Zpq0sR7Vcfn8M8TmqcqpTlrT0wqWVVKZP09qcpxrNtXBLyzcrVKc5NtFiYRKViSynqc0h7Rp97ZYg\\/lXWb+aqt\\/01ggivcUYBwjiGoJqNXozUzOrZS05MImp6UW6hq4b7YSU1LoeWhJCEuupW4G0obz5EISnQVOkU6afD78slby0hKlhx1sqCNElQbcQlSgPRzEFWUJSTlSkA+9ssQfyrrN\\/NVW\\/6axIm0M9Hyd0V9GbCjAGpXPK3lPYc0ys06ZuaSpj1GlKoqr3RXbiS6zTH52oOyyWG6u3KFC5x0rVLqeCkhaW0EEO4UwVhnDM9MTdDpnmMxMSpl3nPPKhM52e2acyZJybmEJ9NCVZkpSrS2axIPtLpkjJTC3ZZjs3FMqbKu0dcuguNrKbOOLSLqQk3Avpa9iQcpIIIInsb6CMW9MzR8ndKjRmxXwBptzytmz2I1Mo1OlrmnaY9WZSlqpF0UK4lOvUxidp7syl9ukOSgQicaKFTCXipQQptZBGJPy7M3IzkrMI7RiZlX5d9vMtGdl9tTTqMzakrTmQpScyFJWm90qB1hmYbQ7LvtODM26y62tNyMyFoUlQukhQukkXBBG8EGI7P3tliD+VdZv5qq3\\/TWD72yxB\\/Kus381Vb\\/prBBFSfil2ffwf\\/ANK1v\\/mURX6ApP70\\/wA\\/M\\/8AGg+9ssQfyrrN\\/NVW\\/wCmsH3tliD+VdZv5qq3\\/TWCCD8Uuz7+D\\/8ApWt\\/8yg+gKT+9P8APzP\\/ABoPvbLEH8q6zfzVVv8AprAPk2V\\/gjX0rrPCMwFFOFNaUpIzAJSk3sgFWXAa6Bnvzggg\\/FLs+\\/g\\/\\/pWt\\/wDMoPoCk\\/vT\\/PzP\\/GjtG3vk2Nnyr2vdeltctblgoLLVu4O0u13tiQnNG3qWIt3o2uZX9LsNXz0\\/RHZna5m4WcgtoE2A\\/Jz10UrE7GGbYDSnGMQb6VI0dybDY1nE0zDyl2MtUpt1bVuRqE7UmwlKGJpycaDofIIlUlsywFTlIXLYYpylIKcpnA\\/UQDmBuRUHppJVcCyiCRuvaNu1h+jMqzIkGlG4P5VTr6dP4r63E25i1jxEbUcKMDcGsDaILdwcwusTDSkKbCZiVs22KRQV1BTISlL9VnJCVanaxN5nNU7VJmcm3T57r61+dHbcEEThllmXaQyw02wy2kJbaZQltptI3JQ2gJSlI4BIAHARt0IQ2kIbQltCdEoQkJSByCUgAeoQQQQQ5CoI0F8oHyNF16a2kbWsdqRjxb1gSVStW1aALdqVi1OvzTK7cp65NyZNQlrlpbTiJs5uttCVQpnckuOfWggiO4ooNJxHTBTqzK+eSfnLUx2PbzMv+VaS4EL7SUeYd9ELV6OfKb3KSQLa2qSkvOSwamW+0bDyFhOdaLKAUkG7akq+qtQte2t7XAthT97ZYg\\/lXWb+aqt\\/01g+9ssQfyrrN\\/NVW\\/6awQRXf4pdn38H\\/wDStb\\/5lGh+gKT+9P8APzP\\/ABoPvbLEH8q6zfzVVv8AprB97ZYg\\/lXWb+aqt\\/01ggg\\/FLs+\\/g\\/\\/AKVrf\\/MoPoCk\\/vT\\/AD8z\\/wAaD72yxB\\/Kus381Vb\\/AKawfe2WIP5V1m\\/mqrf9NYIIPxS7Pv4P\\/wCla3\\/zKD6ApP70\\/wA\\/M\\/8AGg+9ssQfyrrN\\/NVW\\/wCmsH3tliD+VdZv5qq3\\/TWCCD8Uuz7+D\\/8ApWt\\/8yg+gKT+9P8APzP\\/ABo2wcl7ybFwcnsMcTXcVqNiccXzhmZX5ptWdtn5k+4A3+H9v5ZWawZz5zN7MlrZeT+TinuhzbeUoLOWWnHo21DS80W8T9Hel3bKWRPYhGyhL3RUKU9W5SmfcriJaV8OB6mS87TnpkTrVsuU5GrON+TuTTUwQ6hlbLpBE\\/kMPUeSwurDkrJ9lRVydSk1SXnE05eXn1Ta5tvzhx9c2O1VMPHMHwtvPZpSAlATv5eTl26WuTQ3llixMI7PO4fReU52gzlRc9LOrXNcX9EiwtHt+9ssQfyrrN\\/NVW\\/6awfe2WIP5V1m\\/mqrf9NYIIgH4pdn38H\\/APStb\\/5lGg+gKT+9P8\\/M\\/wDGg+9ssQfyrrN\\/NVW\\/6awfe2WIP5V1m\\/mqrf8ATWCCD8Uuz7+D\\/wDpWt\\/8yg+gKT+9P8\\/M\\/wDGg+9ssQfyrrN\\/NVW\\/6awfe2WIP5V1m\\/mqrf8ATWCCD8Uuz7+D\\/wDpWt\\/8yg+gKT+9P8\\/M\\/wDGg+9ssQfyrrN\\/NVW\\/6awfe2WIP5V1m\\/mqrf8ATWCCD8Uuz7+D\\/wDpWt\\/8yg+gKT+9P8\\/M\\/wDGjkaH8nFv2k1uj1ZWlRaD6KZVJCorYThbWmy8mQnGplTSVG9FhtTgZKErIUEk6xSd4iVzBBE2wlhWg4XRPN0KQ8xROKl1zI86nZntFMpeS2bzkxMFGVLixZspBv6QJAtt6TISkj5z5q12XaFrP+UdXmyBzL+2LXa2dW61763sLRytMfkMrx0otJjFXHum6Q9s2fJYlVmm1eWtuew9qtYmqUmQt6iUIsv1Ji6ZBqZU65TFTIcblGQlLwbKFFBWrGr72yxB\\/Kus381Vb\\/prBBETn9mGBp6fnp2aofazM3NzE1MO\\/SVYR2j8w4p15eRuoIbRncWpWVCEoTeyUpSAI1r9Dpbj7zi5W61uuLUe3mBdSllSjYPAC5JNgABwAEbRuTD5MS4uT8uLF2uVvF2jYmN4m0e0aRLy1KtGetpVJVbM\\/XZxx592crtXE2maTV0toQ2hgtbAqUtzaJDe4SCCLBw7SKdQqTLUulS\\/msjLKfLLHbPv5C8+4+5+VmXXnlZnXFq9NxWW+VNkhKRvadLsysm0ywjs2k5yE5lqsVLUpRzLUpWpJOp04WEEEEEbuM6CMXtL7RYw70xcC7twSxEl0sy1ZaFTta5mJduYqtkXnT2nvufuykBwtkv09512XqEml9hFZok5VaJMPtytTfUCCMaclJaelJmSnGG5mVmmHWJhh1IW28y6gocbWk6EKSSOY3gg6w2602+04y8gONOpKFoVuUlQsQeI7iCCDqCCAYjrfe2WIP5V1m\\/mqrf9NYPvbLEH8q6zfzVVv+msEEVF+KXZ9\\/B\\/\\/Stb\\/wCZRE\\/oCk\\/vT\\/PzP\\/GjYNydvJb48aA+K1Suim6TNs3thneVPVSsRcNfuArVHarjkoxNOW5cFKn3LrqMvS7it6feVsJ1ynzaJyjT1Zo7qWlT0vUJDILlOOT6rnKA2VhdalExOpWGb2Hdz1y4ZidqlszdyN1Vus0mWpiJZpmTrFIVKOMKZ263VuPBeeqlKSM4IIl8thOgM4XnMNIknPoR5RC5Fc\\/UXUhK3WnlIafdm1zTDZeQHezZfbR2hWsJzOOFWzbp8ommPyQaPmqlpUWi68QD2jbnorLhcQM6QrKlQTmzG11Kvp3+9ssQfyrrN\\/NVW\\/6awfe2WIP5V1m\\/mqrf9NYIIiH4pdn38H\\/9K1v\\/AJlGs+gKT+9P8\\/M\\/8aD72yxB\\/Kus381Vb\\/prB97ZYg\\/lXWb+aqt\\/01ggg\\/FLs+\\/g\\/wD6Vrf\\/ADKD6ApP70\\/z8z\\/xoPvbLEH8q6zfzVVv+msH3tliD+VdZv5qq3\\/TWCCD8Uuz7+D\\/APpWt\\/8AMoPoCk\\/vT\\/PzP\\/Gg+9ssQfyrrN\\/NVW\\/6awfe2WIP5V1m\\/mqrf9NYIIPxS7Pv4P8A+la3\\/wAyg+gKT+9P8\\/M\\/8aD72yxB\\/Kus381Vb\\/prBBBB+KXZ9\\/B\\/\\/Stb\\/wCZQfQFJ\\/en+fmf+NH\\/2Q==","base64":true}},"images":{"part1.09070206.09020504@gmx.ch":{"name":"part1.09070206.09020504@gmx.ch","type":"image\\/png","content":"iVBORw0KGgoAAAANSUhEUgAAATYAAABkCAYAAAAMjRzhAAAABmJLR0QA\\/wD\\/AP+gvaeTAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH3QwUDCIHSDOifwAAACZpVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVAgb24gYSBNYWOV5F9bAAAgAElEQVR42uy9aZxdVZX\\/\\/d17n3PufOvWnFRVKhMhA0kIMg9qVHCEdkZRVBS06W611W5pbe2\\/sy2KorZDN43d6qPtgIIiIIITKDIEkhAyz6lKpSqVGm\\/d6Ux7\\/1+cW\\/fWJcGgT0Cefmp9PvdFcm\\/tc85ee6\\/9W2v91jriwn9sNszKrMzKrPwvEkuI2UmYlVmZlf9lho1ZyzYrszIrs4htVmZlVmblGY\\/YZidhVmZlVv63IbbZOZiVWZmVWVd0VmZlVmZl1hWdlVmZlVl5uhHbrGWblVmZlVnENiuzMiuz8kxHbM\\/MGzPGIAADCAQ6lOhAgjaEriFR6CBuKdxKmXRGIYRLPB6iwzKKEN8LyedDgs4YoTJoCcqeHg9m+XuzMiuziO1psmY1S4YuGZzQxu+XxHoV9uhcYm6StpzGkXlaspAUAiuXAulTKBTJWJJk2iLhpJDSQVlxAuMwOaUZNwFHSuP05ctMJDWqKboUTFu6WZmVWfnfg9ieIbvaYMAHa0DR4cfpyKZIVEokcoK2eBrVPUHCGSEmPRypsWSAtAShthAyhmhrwZIxhFAoFEJYGGFAGTqTEAiFkG0YJRmZ0hzxYjw6NEG\\/GUE0G8SsdZuVWZlFbCfS5dSTFqlCnG7XYmFOkbVCYtLFabWwYxrHniRmeyRsQVxK4lYcISL3EplAY2NkHCFsQEVGSoDRgtAYQgPaGHQI+NDraLqSHsvbc4y6rWw94rLp8CHK7W7koc66qbMyK\\/8fR2x\\/wT2sJxXxwRxzrGZak+N0tk3RGvdIK0HSTiBSGismcKwEjspiCY0SPrYKkZYGpdBKgogRCgch4ijh4Ac+SkXGLfADjNEEoSYIA8LAEAYGY1ykF9Aqbc7vSHJu50p2DuZ5oDjImDOFsCVCzi6QWZmVWcT25HxOdMVCHoqxkGbaUiXmNhXIJSQZJ0nKiePYEifmoJSPNB5al9CeTygNRoJwbCyZRMoUloyjlY1SDkZIEAGW0ugwwLYsYrZNEARgBGhFYDRu6OK6ksBVaC3wgjKjY0Msam1hUec8do9U+M3Bg\\/g9QXTPswBuVmZlFrE9gT1D+wbZn6az0k5TbIIF7RU64xUyMUHGaSbjuAgFrvQpBy7GVdhGEZopwEWJEG2liFtpUiSQMo42MaamPLLNTSgpQYCjDFJrgtBDodF4gAcCLAJsBzKOg+toihWBloKB4RFWtDTjeIc4Kd3EvBWn8\\/uDfWyLDaASs9BtVv7\\/LeaJujaKZ+a5Ly75RNtT22iyOro5rOk+0sbcuKY97dOaSpBOpsklK+gEiCCDHRwmH\\/jkRY6xcZvdA3nmZPKct8JBVnwcqYjlLKRMIq0MoRMjFs\\/ga4XlxEFopNIIXUaERYQAowMqlRJKCiwl0SZKFNiWwhhBxQ0JjM1k0cfzBGFg8D0XPwwJrCQHJhP8rnCAUrZSpYk8U1fejAVo\\/shCPNaiFDPCiuL41zEAup5VbhhjFt0+I9fFUbp9sno0YHS0now2DetKSBBSIJ6Bun9qKw+MQWtQ2zTzXejpKNCWSDInmSKdyBGmBYUACmMVsokxXAQP9GW4eZONl1xAGChyepBkYpiVbXmmUj1MHT7I6nkOQjko20GgAAslEriuR9+BA8ScCrbKk2tKk5+aJJWM4aRiSAVKGoLAJzAaKSTJlE2pUqEprah4Bi+QVMoh0tMQTNGmSlw6Zxn37t3LvrY8WJEyn3knqsFoCAPDvJZFaB0t2ieSklfkyOQQUoFQAqVEdaHyxAkUYyLkHUDGyZFNNANQdPNMVkYR1ixH8JkEsbSmwWrNVOuT0aOpGrXAM7Sl5nLe8rUk4xkwBi\\/wmCiOsXtoKwfH96IsnlGJN+upPCq0D3Kz5Fkqgd2hcHKGVEsX6\\/cI3HiG0d0HyJTHec6pTcTMGIOmix9un09p\\/hpaQo944jArMxnmtQwzRjefv3mYUxbHWLE4iaMFRlj42uAoGx0GEIa05ZrIZnNgbEId0NKcwxgfKQ2WpdGECCtECTBhicA3JGwHXwgcJXH9KPBYEhKpNI4KmBjbwnM6srSXe7hvZD\\/OXOsZt3kNEPiG5624mPe\\/9r3HB2siTqAtJgoTbNr7CL\\/f\\/Cvu2\\/5LrJhEWiAxx3xGHYJf1nzpnTfSkcsBMDAyzJVfej2OlAhr1qb8pVeC0ZFBCn1DZ1MPb77war5y26fxdBmhnpwekdEYXkVz6flXcsWFr4fKPRCOARJkFmGtYty9jMs+exkiJVHPLMT21OwyoyG9w2ZxvI3mhKbFSSCTHfz44QobBpqxHRtdnsvLlseIJ1xUxcIzNiLZTRgkkfl1XLFakxV7SLRPYVHg\\/7w2Tbq9mVAngThSWBijCXWZUAdgPOIJn8CrIJWPwGDCEKUEge8iERgBU4Uy2XQMWyjcoEKgwQ8k2oAwhpiVQNsWSAHCJ9ecYWx0jIUxh6S\\/lHvG9yFanzmvijAmQmdB2bAwNYTf\\/+InGYhwaLI6ee78M1i7\\/DVsH3oT1\\/7gXzhS7kc4AiEMMxG9MVGcNCVaaC5\\/AH9qPwDeeJKgAnYsggazgO0vuBZ0hMRCV\\/CG5\\/41lz7nZYjCN\\/nsVBmZADlt2P6IHq0YKBkhtRVzTueKC7oIB18OJjjqekEpiV8x2InpA\\/N\\/qWEzpspN2zSPnImTyXhk0yGF7Bx+tE7SFy4ityRNZcojaU5i68A61iw7wkkZRZc2nLuon98PZCipRfzwzrt563kp+vsnaW7P0N0qUYWAIF7CszQySGLFJPnCOGgXSYAldBRrExLbdgh8gRAhUlhgQowxxKWF9jQVHTJVMBwa8xkc0biBpiOr6JnjkE3HkH5IWUh84ZDKtCCmDpOLH+RsZy73jx5EtcpnjCKnT9eV87J\\/wh95GL+f0O+HqVs4OXk2X\\/nbL\\/D+G\\/+Fvont2DEBaob7YiJXd8W85RBuqA1z\\/7Y8OjS1hT1r2P5SayDiahrP4hvv\\/RGdzu8Jh99IoQLlYkAqVvUx9fH0aDBa4FcMLzttFeHY554wrvHInjJUyx+fSRTQE\\/vOA2PQgWL8sR6y9HCoNEV3dytjpe0MDQ9wWms7b1s6QDo1ycFRg7Yy9DYFZEUZU7E4NFHm4MEypYkRMmaCdNxjw8gwBJrsoYDdE2VyrYKOXDNtTZqYKkAlwJIBApAIhJEIYai4JXzXw2iQUhCPRbw07VfQQUjJ00wWAh7b61JJXcCr\\/uY6EAJbGtb\\/+PU0Z\\/K0pCRFJZgyEpFIYIsO3PIEKX+SpZWlbBvZj93u8xfvkGIMOjTI0Ka3dRLCP28YXX6QuPdOPv3mj3Hll67BD6ewlIkCb9X4GsCczHjD6T0wEUdaJYRiluD8l3VCCX3DkrZTaPc+QFjcDcD63UTxtqr1Oa4eBejQEFYEz5o3FJ2aVRnPazYfCJnbKpnfqdh12MeKyUj38plzqp0wxBZlSwRT\\/V1MectAFlnUO4+frd\\/FWYsynHdyio54Hq2SGG1zSusEsdBn\\/8QYgSPJCIsxP8umvYYpdZAXXHAaLzrnZaw+bQ2ZbAtCKCYnjrD90T+wddO9hLu3sqhT0dokSCchYQmkUgR+iOMIbGlhtMQYQ+AF5F0fO2YhhKJUCRga1zy8vcKKtR\\/g5W94P1JGlI4ND9zO5NgAqjNOTIaohI0ykokAgniawT3j6OYmAqlIF5bjtW4Bpf+i+jQmipks6V6GbfbX3YTQ4fJPjhHLSCy7Gj02kYfdlhV05QRnLVGcvbweGDPhGJnKp7jsOW\\/iG7\\/+CkpJhDQgogNCWoLJwjZGpxRag5Sw8WABJ6GQKlrYM+fCHDM9++e5qydqrBN5T0+9bs2Tus\\/pbHjoGk5qT2H8LbXvtg8IlCWQCqQQGMkf1aOQgtAz9LYtJi031w7K8SnBJR8tYRISOy5w4oJEWuIkZZUQL55BiO0EiQ4FfQ8upFDswU3FiXklDh0O8Zw2VvUaLDnBVGhBUCDXZCGEha8lbdlW+keGGCpZ7Ng\\/xnuueCVvveLttDQ3H3WNuV3zWLbiWXDZO9ny6EPc\\/M2Pkxrew+JuaMsJkk6ELELfoKTBUpErpUMIjKJUMAyPltg7WGFML+Y17\\/oSp5x6Xm183\\/e4+6aPcN6iOBIJBNiWxnE8EknJVBlamhdy+7ZJek9ajC5JOounczi9DtRf9qTWgWFpVxPo3bX\\/339YcqAiyGYklpTTwAsMHJwwPHzY8MN1Hmf1elz7tiRW9RlMMMRLVhX47q+zhGEBaVcPYgnKFtyzX3PXZg\\/tg3IgnlE4cYGczqhianE\\/bUwjpUDUx6rTTMQff7pjjFWjJlTHQXKcet8\\/5Z7EHx\\/j8RQK8UTXPvbv68\\/8xN8\\/\\/l553PNGVTGipn+qh5vvGk7ubITsuwajAyn6G4MQx9ZjLC1xEtH9BL5h2fwOCB+pjfPzdT4qK0m1qyhMIUEpgbIA0UAaOe78NejwKeBRnTDENrUtw+h4jmQ8hz6sCdpa2Z2fwpss8t+\\/zaO0ojK5n3e+cTktYoyYCSgqQ6GYZ2isjGut4SNf+y865857Utc75dSzWHbdT\\/nFrd\\/mV7dcx5xMnt4Oh2zSQkkP2wYdFgFBpaIZzfv0D\\/t4zhLWvvw9POeiS1Gq0Rr98mffoDN+kM5cEkeGCAFhELm5tvTI2AE9J0sunrean\\/1mgoVz0wwd8rHoJVze9xc5rWondQCLO7yGXfLgzgKpZkWy2cKKN1CTok2jIZ7VrD8S8rHvVvjEm+O1v415P+Ocpedy7+67okUs6otRWYJYMkK4liOw4gLLjjaOqWblQt8QeoY1C8+hu6UXx4phMJS9EvsP72Ln4GNIJ0ISQhrksTKwuk5hCT3Dqvln0tu2iJgdR5uQqfIkG\\/c9xHhpGOUIpIqSHQ2IsRp7qt2TPz3OQhwrBkJQrOR5bP8jDOUPYjlRgD2ivYgG5BQF5g1hEM2dEKCsyEggzTF\\/H\\/gGHUR6kjL6vbQECA1G1MYzOrqmrCbcdQihZzh32fPpyM3FkhYVr8SDO+9lvDIczZuKkLQJo2fzSppyXnPKvPiM+1A8uHWSRKdF6Msa3+zxepQ2WLbAhILA01TymoWtjetp16CDsPz6YWIi3qcOozlQFqAMUv4RXc6YD6Gq81ddAycypHNCSqr8vMA+3It22imbBJ1dnZjKAIVyiGhZxY4wgVPYzsVnx5iXNaR8RTFU7MoPs7fPY+X5f89lb\\/3gUYbm8RKGYcNvlFK89JVv5QUvvYzf3vUjNj98N3sf+B06mMSyDFob4skcvUvOpW3ByVz+jsuZv3DpsQ1zfoINv7qeFz0rRTalsKQgCMFzK2itkb5HUsfxjGAeB0m0z2frVJnVrZ245TIDow663XvaDZuoJg5CT3PqgqaG7w5NxnESpZrhebyujYk2mRCCe\\/b4bNgVctqS6bTZFKvmlvj1FoNORe5r6BsuWPpirnntJ5k2c1\\/48Ue5Z8dttbF1AH7Z8IqzL+cNz7uKlBpAeztBlyJXRTYhYlcwWUnyP7++kdvX\\/wArLhCWqfMDTbQRwmp275IzLuN1z72CXGwc7W2pjiURag0i9j4e2rWJf7\\/jc4yUB7CcqkGqut1GR8YsIZq4dO2VvPBZl5C2htHeNtCFyLVTKxDxv2Pv4VG+fvtn2T60ATsmImrEjNMgDAxLO07js1feUJvDb979VW5e902s2OMMapX\\/9dI1r+fqi\\/+xupMFH\\/3Oe9nY\\/3ukOvZ47\\/y3N7Hr0FbedOHVvOqCN5JkB9rfC8ZDyCbe8ZJ3cMv9t\\/HNX30JOxFdM3Dhyue\\/j1ecf1mU4Dn8Fkx1KUpnHvf9z++QCHYd2s57brwcIeA5y17MNZd+qqbH6276CL\\/c+DPe96qP8MLTL4nCG5M3oPObavf2iWt+CrINIeDrP\\/kilz7vclqb2gDYfOBRPvCtq3ASxyhFqB6+ftnwdy\\/9EC858xW11fuZmz7IA3t+iZInFrT9v0JsxkSnSuXhDHtKFYopmwW5kIoehlgT2aZOJvw4PiVOahvhxash6+WpeEkOlzWPbg+4+A2f5SUvf\\/NxDdqP\\/+er3H7TV+jqXcq7P\\/gV5nbPr6OLWJwXXXI5L7rkcowxVCpltA6xLBvHiT2pk+COH32eFQtC5rSnSSYFnu8ihcLgowMfSxlCH2SYIQa8YuUY39nSxe27DKd3hsSHcpTahp\\/2wnlddUGSVpa5TUdgRkZ+\\/d4SKhW5iJGr9jijKEDYApMUJHKKe3fEOG1JfYDl3YrAMxHiEYKgbJifGsPvO7fmSoX5BGEIypio7rakueZV\\/8pzT3IJRy\\/FD8eOed8pq5Orn\\/\\/XrFrwWT590\\/uJpas8qKobFniGOakFfOztX6Qz\\/jB68ir84NAxRpKc3vZ8vnjV9VzzXx9ksLgHUTUyWkPgGnqblvHJt3yOrL4dPfa6J7yn3thpXPvm93Hj3Xdy6yPfxUlMoyswRhBUDIuakvh959cP9VGL0I+Q6\\/ScTqNor2xYkj2Af6A+X+5EnNCP3MGgwlHj2eUuvv6uH7Ig8wj6yKvx9cTjlObw6jVXYYJ38617voyyBV5Zs7JlE37fV6ZXRX2P+vsJ+59NiKE8GMMvRSjvKD1OxKlMaVZk78Pv+8xMbF+P2Q68vP7cRyTyyC\\/wJ\\/MAdJnVuAWNZasa6qwj5kif3ZmTuHDx\\/hnPaxgf8tChQDknlmEgawGGP+cDFB\\/QNHkBZy\\/oYZnI85LsDtZ2bCVmduB4W1mTWcc5qYd45TJDuy5T0nH6vIB1+wZ51Vs+\\/6SM2rUfvpzdv\\/8cLz5dcnLTHr5wzVpu\\/PKHmBg\\/eoEKIUgkkqRSGWKx+FFGbXRkhHK53BCUHRzYR9\\/W77N0aRvJ1hZ0IolIZjBOhkpFIqRCSkPoBCBLqOAIXe4eXtXdh9+0iPUTpxNkVjN6IF0PGjxdn6phWzpvKTKsJw7cIMZgIYxcRCWqKOboj6jGzey4YP+o0zBXudghdFB1wUKDVzas7EpWl2tEa1+3PY8JI3pA4BpeuuZ1PHveQwSjn8I8gQGJ4niHCUY\\/zrldv+fV57wVv2Kq7ooh8AztsV6ue+snouze6GcwxzRq0SbWxV+SzP8917zyatyiJgw0OjQErmF+03Kue+sHSE\\/9DeHkjX\\/8ntwNhENXctXa5ayZd37VqNeRn+9qFrf61WePPnsOaUxoZpQiiZor6ZU0y+bYtfkyCNbvHI\\/mU3PUeIY4H3n7J+lVnyEcvx7zeKNWpeiE41\\/jktUeMZ0h9CMk3ZEcmnFfR+0iQLN+b5EwMARlzcruRj0+tHUS7Uta4v0zxjFHzfX0Z\\/sBn90D5dq\\/0\\/YoKkwQVmk\\/jevT4BY1b33Bq6D449rfbNgbsG6frocPTuC++LPfK2owuIcMiWFDc4tPWD5Mt\\/LpCYfJuRKjCpx6RguVMKStLUWz8hFCMRoEbDlY4jkv\\/z+84KWXHfc637nh46ix37JmSZZcNo7vG1qSgu1bvsPHr1nP52+4AyEEYRhSKZdJpdMNRnEqP85A3w42PvwLNm3awMiE4MZv\\/rTB4N36w0\\/xrDUtZNubIWGjjYOuuCgjQOZx7ADP89BArFKgbMro0KEj2ceLWjdwy+Dz+cNwhrg7l1j2B2TavKepcWW0iMLAcFKnDaZS+2Zbv8FyRBT4l38E5c8wbpOVGFCpbY64oyJeVLVWkECxsK1Y2zuuH2dwYpympIXW0eJ9zZkd6MK\\/14afKGhu+UPAkSlDzILnrVKsXlTPWeniHbzm9L\\/hlvscQttDSAjLin958zUkp67BhEfqKCGEP2wJ2Duk6W0XrF1tMx2ZMOERemPf58xFa9kwcA9SQZPVyb+++b2o8fdgdKE2TqliuH2dT\\/+IQQm46DSLFfNVbfOGox\\/lb1\\/4Ya786h9QtkFVWfhBxXBKT6IhfvXwrjyxDificlfXlK5u5qTK0J4arqHosak4Ja9ErprEefx40momXXp\\/7ZlH85rfbwmZKBguWKFY3F0Pw1il7zGveR67xrYglWDPwS1kY4LO5gQx26397uCwxogobrh1MEAqQegpFraVHqfHEk5asu\\/QbhIWpOMWzZm6kRzLQ6GsI8oUsKm\\/zKa9gjULq8tIH6G3bT6HvJ1gZqQ1TISa18w7lzO6H8WUgpq3928\\/97FjElVNTp3IHfPnx9hCqGwImZtyMLpEQm2hc24LoQqYyFucMS9NKhjhzvGlrAhGaO9OUXB9+o+M09L9fF72yrce9xLrH\\/otm351Pc8+LUvC9rBEHCk1LSnBonab0UMj9Qzgvj28\\/dWnsvLkFjo62hDGpVQYIJPRNLdKjKWYmlB89BMPNRi1LY89QOg+QNf8dkzCwklnKBXHUIk0SsZoag+YGt1HzLJxfE0llGgEgSwxpWKcPXc\\/G8cPsTE4mURQZvf2M1lzzn0I++mxa0aD9gxL5zZ+tWFvBSsuozT\\/cQqURXVTHhX01SO1gnqjDYvmnIzNvtrXm\\/b7SDvKuBkNuVgHreKOOs3gQMjVXy8jMhZOQqBD+NEjHufN9\\/nM2xI11yMV3MTJc1awc2wjxhhedvpr6bH+E+PWjdp9WwI+d6vHRChQdoQOb7jL5\\/qr4nS1yiriepTlHefw0O7IF7zyNVcQn\\/pQg1H7xSM+X7jNJ3AkVkygQ8NNj7i88RzF37wsVvtdh\\/w+Zyx6No8O3YtU0e+Sdpa21OGaoRotxHBNkaRdz6jWpi6AFb2nIMI67eKhnUUsJ4rdGQ2ZWPOM8QQmGIjivWXD9T9xuXubxklItDZ89U6PT78hwYWnT1vyEm0p2DkqcBLwDz8KGOvzufuza4lxb7RFjc3LPzpGsl2RzCmclEDZsCB3tB5VXBJLS971A5\\/8YMA\\/veZ8XnHmxtpvPvNDwe\\/3VEhkJVYMZEox6TpANZhnKizsyHLwgKkFf42J5sEtat5x+UWY0rW18e58xKevCE1zZDVj+wzJipb2BeRc0PGAioiTwafVAydpWN6Zx3ECTLyZ\\/r5WCuPDLO8uMVFQ7D2S4WMf\\/uxx416e5\\/HFf30\\/LzillXRiEikUxSLYKg5hCEGAperxoKamJtYsljzv1BKdLcM0N4EdTyKTmjKaDXsCzum+gnm9i2dkakJ+cednOe\\/cHMm5MdLxDnS5hIwJYnYzZS3RqRIJNZfC6CQVfxzfKqN8RaxgKKbyGOPTmhjBFC+gEuwkUGczMbKJ1q7C02DXBEZrAt9wSk+y4buBCQc7Fp3QyOPgx6rha0o3AXX3xwtiDUmBZYvaQNc3xGN9AXZcRhs\\/MMSlBF13GcfD56Jjd9PUpoilJRhI5iQPDYX85AHNK8+tGqRwhPZUE9sOGwgsLj2zBePWDcLvNgf88w88snMsWtKRsQ48w9hIyOduCbj+qroLPb+liF8xLOo8mfMX7MAUx+tx1HU+194RkOmwSaejjKzRkGjSfP\\/hgN72gJedZVVjU7tZ0dnOIwdMZAADWLngFES4uTbeup1F7HhkaKWckTyoJhpO6ohcx9rhO6Kw49FvA9+wvHfpDMMXGYTD45p33uiSV5KW+Q6WE829sgR9k\\/OA+vx6lWGENFhxRTwD8xd0kYvvqfHOBkYU6U6LpjlWNP\\/C4BYMy3paG\\/S4qc\\/HSQpiaYkdB79kOHN5ZsY6kzw6UCDXbZHIRrShypRm73BjiVVnphR1qTZVtFZ1t1+45pXMT96BcaNnrHiG\\/\\/xtQDJnYSdklIU+wQ7On1154O+zSCqN57mk4laVAGgQUmGMAyQQOkPoJxjKtzBemWRv\\/zgXveLjNOVajzv+9276MQ\\/tLoPMcXJrjK6cBSrDmAdToc\\/4kVHcGeQx33OJp+J0NsdZ2G6RzvmYmCCMW0xNhhwczfCO93644Rp\\/+MNPaJ+7nzmLeonrDAmZJB9Mkm3qxvNDrLTG8tNIspTECAlhCHURIw1lCcoFVIG4CogbTSUZR5ssfTvPpbX7bp7yPi5GozU0xVtpTQ7MSBwI1u0tolpVddGI47qzRsOCOc1APU5XqNRrC0PfsKi10hB3GZiwsWIBssoVPDI+BKZONTh\\/VZJvfez7fP32z7FnZBMqJnDSkoyG9QMBr8TB9cENDIdGt6FDOHfJs8lxW+0qfghfvMOjqcuKaCsRQwOrSkHZMqzxQ4Gtor+YnHiM0De84tznQvG7tXvZcTDkc3cEZOdaJJsUyqlywQxISxH6hh\\/8wfCys0TtGXubpwg8QxhGhmpRmz7KUFnxKkdM1DMHxkTztaK7EbZvORiinMj1j8YzDeMZAx\\/8jkvBUWRaJXYiMiKBC1ZccvL81gbDtneogIxVjaoUnLZ0GYTra9\\/fv71APKuIZSNCbRiADjWL29wGPR6acLDjIZYjCIShKZNlbq6eiMqX43hWieZshOqi54Otg2UMKUT1h3OaIjqMmYFajWtzxdqlGPf22vW+e69PUUmy6aobKk98z6M\\/C7G5YxoxHscXU1gKpDRILLSRhFIQSLB0lClLxGz2lDo4MDJKSc3hhRe\\/4fjjuy6\\/ufUrNLV2sKm4lMdKEqs\\/AARlmWRSGRjt5yUrs7VN67ol0k5AKl1GJiR2wiKMQwHYflCz8ox\\/IJutk34rlRIPPPglnvecDLGglZa5GRQlmhM9QCuOmqIUDmEn46DixLIulWITwiox4Rbwk1lkoYylXZqKB1jb+iseGlrKEVIMybM4sHUdC06ZeEqNmzECHWhWzV8G4aN16kolTsEv0+xMJw6O79KGvmHpXNmw4Hf2D0ccraphW70w1wDzHto9hdVpIy2B1FDWmtEpTWtmOn52F4viI1x\\/1T+zezjgtnU\\/5JebbsWKCzaOwEuudwmCKKNoJwVGG85cGGtIFNz5SEBeKHLZKtpR0bWFMMRSEt1quO4XPlNTmrxrOFwCgeKCxSORta3Kjb8KSbQqkk1VYzTD9VGOxklK+vtCDDEEUawyqSaiGGOVU7aipzG5svlgGHVDUfVWVrUsoGtY3lOPJYbGYtvgFE3zImOn\\/aPHu3N9QF9J0NRVdRuViPC76fEAACAASURBVGKbIkqqrJzfNEP3FgfHpmjqsRHCYEJY1FZhZlp8aCoR0X2qiDKsGqQn1KMS4BqW9S5DhjvrIaHdZZykqHZ+ie5JOQIfQ8WPk7Aj7+SkudnImOlq8qSiufSCt5HT36+tqtG85gfrNKk5Vl0PTwEBVNarV5\\/kB0NhvUQYn0rgg4yaNkoSGOngAb4xuNpD6yksNc5YJcYj28dZ+1dXY9vHDz7dddu36ZRbefN5E5w2f5h8toX+9lUM5ZaTT51EKX0yhdRJzF14aj2z2b+LXFpilI8RAaEyeFIxMAF7D\\/fw\\/Ive0XiNu\\/+ThQtdurrnsGP7BL\\/8+X483YxvuRhL4WMhrDRaJhGOg06HFFp9\\/FgaKWIor0TAFH26h13FDAuTe8kKgxNL4qZayLuLq4vyKfpg0CaioCxo9cD4DQsxQhIzGgA+wUfriNxLYHH+io6GOdp2CGTVsDkiQVd2ZIbxTFDUkRsmZJXsmVJ8\\/w+NXD5TWY8\\/eDkL7a\\/y9y88j\\/\\/nvb9g7YqLkZYg3qLIzlWkOyR2QmBCyRkLGxf5Lx7VxLMy4ropalHm6YRHPKt4eEywrSwZCBWuEizpXkpKrKu7xAXFI\\/2aeEainIgoO3MOhIhQlxOzQSYaNr2p1uEGnmF590xDZbN9qII1jThmUFXCwNCS6iRr99VR0ZiNcCKdGGPw3cbxAH70QEAip7ATohZCMICpjpeLHagbrUkLrOh3ET1Gs3JeqjFGva8cIURVrU4JDbaIH1OP0p5ufQWL21VDImrnkMCKCZSqJx6lig6k3Yfq666ruRIRkkND4EFGtvGaM+INB9W\\/3+VjZaIyrOkSvKdif8g\\/KYsKeJMGNaLwq+1+4ok00giUjAM2rtYUAh83DChXxmhtVbgWTJSaOW\\/tK46fkwhDfvuTG+hKSVpK21icmqRUKDMeOBR1HB2ksCoWpjjJBeeeVYflOx9jy0CC0eJckjKFljZjJc36bR4XPPcjOE49MDw+foQd279GU1MrX\\/7uQX6yIc4N\\/1PmN\\/f04xkXEcsTSxriiTZi8bmEpInF20iKTpLZHoa9ZkbLHawbWcZXfruCR721\\/HLXEkaEwRaamJ+gNL6SUt7iBGexZ3xEDWmtfFx8bedhgR2XDbGfJ9InROTeFz7rYtLioYZxHj3gYTvRdZZ0L0Pp+sZav6eMU01OKEugHEEiK7l1i+EXG49ub6Mr6whGPkxm6u2876XP5bNvu5Hu3HwsW0ZIQELaydLs7JgR43PYejjESVZrHWc+i4yMhBMTxDOSZE4Sz0qUJTm5qwXC+ub95aMeTkpGc1INVB\\/NXDL0zulFzNjQk4WJmpvekuwgax+YYagspFOd4xkbHhMZojWLVoAeqv3+ge1TtXgkWtCa6mwYb3TKZt8ExFJRXa+sIm1BlGFdOf9k0IN1N3NbKRrPqiZ3AslJc4IZGeQYByeDKDMuBQKBCWFJ17H1aFVfxKlryL0uu4dpQKZCRmjSigk2HagfZDF5mNZMB6Fv8Euay9e+Ebvynfq6HAj59W5Doik6qGrNTZ+C\\/SH\\/JJAAVPYKrDDE91yUnSBEoYSNUjah1hRdn3wxYHzSw3cF2g3wqdDde0bUAPI4snHd7wkGHyNlF9jm9\\/CDR6ASNCNCD08HlFEEfokkE5x3Zh2x3XX\\/Th48tJCRKYEVMxRdw8EjkoJ3Juec02hQb7v906xY3c6+sUUsXPsFei76NBdc8UW+e+cYA33NhAaE4xOEARqDERB3sqRVE32VZv7jnmZ+vqWXm7aeyUT6YipIdvmrKNlJpDTYJsSLL+DIgU6eKtA20+VZ2tW4EA+MKKxY9dT\\/IweiMQbtG\\/yy5PXn9WBmGIPBccPOUY1yoozg0rlpMMUZpzg1VAgRCrLiknSr4gu\\/1nzkhy79R\\/Qx+GuHCI58kOWpb3Htmz9FWrWiq2U5TYkMQh+uX+OQwopLrOobwx6\\/FqcTH7JaoC9khEAToq\\/BpR4uZrATom7UHjfOdPZu9aIFDUjl0JiLkNHzr1q4FMLDjzNUjWNO+6KBB6t6ZEPnjMF8AruqEx0YVi5oHO\\/ezWVi6ShTK1TjvYU+9DaXGjtxTDrRb2VksHpaFpCQ9YTArkMGFasjasN0uOEJ9KhEjUj7eErLpr7pbK6oH9SWwHIEk+4MDywcp7etC78UkXFfuOxItbojuv5X7vRJNqsqWnvKwFqt08+T\\/rXRwJBNxStjtEYbTRiE2I4DaEq+S6Hkki94VCqCqZKFmy9BWOGkpaufVAXAXbf8J7mMYUB18qODKzhgPwdL5EhVprB0iUCXCMtDvOyCVaSSEVI5MjLK3Xtcwq5lBMLG1zEmyxYbt4W85JJPNVx3\\/4FtDAzfwcO7FXL+G2k+5VTiXXOpdHTTffon+cQnHuFQn0RIgR+WEKKEFXepGJ\\/RuMXmUcWIWsack3KkFzgU7SnsMECKcWR+EulPYBI+I3aSkalT0aF4yiybDqAj20Xa2tuwEDccKFRrJ8UTuqKGaRKp4XUXvI1O51eNbtH9Pk4mQiQ6hKVzGgur9x2xUE49sRBUokJ85UjSbYr1Y5IrvuHxL9932bDn6D5Kunw\\/6eIHeNWZr8EvVw1bMt6wefcOW6hY1aWe6e5Nl5G5hvZ4L24xIg+HXhS8dlSjoS94iWiDq2O45jOY8WtPaW4wiCMFL0qMBLC0UzfErw7lE9jVmNPMGm4dGLSnOH9p0+PQb+QWRrxDWNjaGA\\/rm0jUjK8U9QNpOr63al6mYbxNByqRsZHRNZf39EA4Wvv+kb2VBsNLtU7zWHqcLh\\/ToaEp3kpL4mDd5Z2w0Zas1gKLGhFZVkMBe4dnjhcwNyMoTYa87aJXQenmhsz29nFBIquwHFmNrT11oRoZsX6P\\/wHwRg3euCLvaoxSoCsoGSBjNlrDmOtSKGs8v0wldBnxLLpTZVIyINPadlyjlp+cYOO6n5NP9nDrY4s4OLmY0LLxrDIBMULfQntjeBOHuOLVL6lvwtt\\/jY6fhBfvoe9wiOdqdh0ISeQu5uSTT5+x6Q0\\/ue16Dnm9nPXSa5m\\/8llY0sESFqFIUWxaiF56Bd\\/46j0Yk0E4GYwPXhDihzbJRJLVvW10ZiZ5dJvH6JE0niNRgY3te5yR28eZzgZivoUTJBk1K5gcSdQqIk7kZ5qYe0rvYphBYh0txPBEvSj9qL+b3sxhVLu3pG0Nbzwvh\\/HrXUGmSoY7t2jiaYWU1cB5d2Nh9cYDeZQV0SDeddHH+crbbua\\/\\/\\/ZObrj6VoSEZLOiZZ7NpinJNTcHXP6lCvdtDR6H3oY4r3cQr6ijrq9+vsGwhGa6Y4iou99imiyrWXvyy\\/nK2\\/6Lm695gO+++ze8dPVl1aLyyYbrKLul4YUjM+diuiywu2kRK7sb\\/+7+nW5ECQkNJ3U0svA37i9XUXGVw1Y1kL5reN7qF5OzN8xwCx0OjAe1sqvQM0fFwzbuL0eGsjretI6NNuhAsLSrfv1AO+wbq48XBLCwtdyY6ZyM1d1Hotrb4Bh6fLRvKorDVV3VlfOXQzhQ+82DO0pR0sZmhi4iI2fZgi0Hy5gZTYJyTolTq2Tc6UMqCOGG3wSkmqfpLid+Pzz+86QRmxBQ2S3QOoxiO6FGSYVlxZDSphx4VHyPihdQqWgCbQhCn8AbJ2UZuuZ2HNew\\/epXd7K3nOOW7T3sl8+CRHt0CobVcpvAJyyOs2JunHPPOLVmrH54+\\/2YRA7htLC5zzAwlmTLDsXFr\\/5IYzB1\\/T08uH4z51\\/4CRItq1C2QhuP0C\\/je4KynyVoO5nDphk\\/7OF\\/fngvSgcEQQltxpHGoidZ4HXn97DX76YQdBMrTmJEiIdDEA6zqLWPiihiyRw2OcqlphOPuTE1N3Jxu8fMzpIP76ovxOnY0fRnZucNt6hZ3LyaT13+N5D\\/asM8\\/ddvfEQ6WoTGzCCSzjCeftX18yuaXvtXtLkfIjV5FbnS+8iqdoSEWEaSbrNomWczlbT4l1sCrr\\/FbbhWRq7Hr0TPM1H0GhzNXLq5gWeHqLbnCQzlvOaSUzrx+i8iOPhsrJFX447eEnXFMI3NFDpzcfRRrYbqY7lFzdtf\\/HqE+4e6qzcKgyVTRayGnpZ6kNzXcfonAqRdj9dN17c6YYYrX7CqIWC+b1ih4jJKxBjQgWBJp98QD+ufDKpUkBlGl8i17m5ZQELOaEc1LCMka9cN5eMbIKzbU6y6taLWASTjHK1HT0SkXYQh8A3zmysNiaiBSacay2tE\\/0JGiaVAaCp+fEYZnubdr34RpvTr2v\\/d8oDPqJHEsrKWzHgq0dqflDwwGsy4he9Gr6GTUmKkTSyexgsNU26ZslshCAzG2JRcjdYeujJGu3QjPH8cue03G9nuns9Y9jQqsRYCFEJIdNTuAeNXCPMH+ad3vKbWGPKh9ZvZsL+EiCcphzH6prq5Z7ugd\\/Xb6Oist0AKAp9rv\\/Yl1rzkH4jNW0Y5BgVPU5ywKBcFlYpLwfWY0Dl251dxxfse4ge\\/KLFpex9uIcQv+hRLE1RKeVZ17uCNFw0hGSKuHYqyRCACKmGcYHKcuDlMaOXRAvZtXo32T2xgFCGi2ky\\/MR4SuRbVALWJXMgwiDJdvhchNLegSZl2rlp7DZ99y3tQE9c0LORH94fcsd2QyCmUExm2FfOWIcJ6hm\\/drunAtST0YPjwIxhvR7SZg37OWnQ2fiV6zaEVE8QyklSrItNh8aOHQwp+vYGBMGW0jlpLj0yNN1Qnnr3yFByRRAfV\\/mmm7j5fcvob6ErcV4OfoT\\/BPVsKCAVHJhvJ0S89+1Rk4BD69d5mppoN9oqGS8+7ijO71je4wT992CNWdcUxikwsX6cKBW0gq2itWhcauIagqPjn132CnP5ew\\/Uf2V2sUVW0hp7WhcRnxMN2Dxms6dIi1dheXQeGZd1d1ZeoVOd\\/dykitlpR9ZsJJD3N9e\\/LfoLxiq66odOZ2ifQYyIyWiAIfRoQHcBjB71avLYh6VJtVmnFJLsH6\\/P2vLNOZWHTbTX0OFUyfOeBkGSzqiZPZiLwp+7zpEuqtCdg0sb3CoRGY8vo7evCjlOs+FQ8Hzf0kaFBKokIISiUkLZHc1OA6xaPmw39w+bdkOjBUnPxhY+UIeioUE\\/7IaY0ylmLmnj1y15Q+7trb\\/g+JtlFoDWe53Ak6OXODX1874PvaRj\\/xz+9FdXzV3g9pzPolUkUiviFFoqTFhMTNuNjYxQm8lTGxwms1WweLiNiLfzkt3fxmrVLsEnhmWFKQYAsVlibCbivdYQHJiyEaYFAcXgyzZEwzjxrHzvEXDxsLNlLGNpYwj+RBLao44YnWdTuNtQ9J9Jncf7yOPH0dLBXELcTJGMZOprmcuqCs+huaYLC9wiHr4+O8qocntB88lafVJtNLBmd9NqHBa1hA5H0wJiFHfdrG3vrwQKnzZ\\/2x3ze9vzV7BzaQ39he9TGRkYuFcBfv\\/ZvyaQfxlSBW75YRKooq1pBMzwBndUcU4oHeNcr\\/5Ev3\\/HJaiNIgV\\/WXHLam7jigoWY8R\\/W7unXmwPGPIglJQ\\/srRCEiaitOdBm38sHLv04X7jto3jGQ1ZRmFc0vHXte3n5mhjh2DfrsbW85vbNhkSnFW16Y7BEvubpJRNpOnNdlCvDCKmj7sVtq\\/m7yz5It\\/wapjzQWAWSj2PHSkgJfmBY1tMFYZ2O8sieSkTxsEU99jTj1XeLW4OG4vaByenxBEFg6Mx2YZv+OhIrtqD1eK0nHsIQuPrYeqxWp5jQoH3Bsh6r9pyBdtgzkqd5vlOnyEzzxKpZacsRPHbAZVVv9P\\/NzjqMW88G\\/\\/dvfHRSEUvJKv3o6XnD8pN+r2iQN0hpMGjiiQTSEtiJFBXfIITEC2U0OTogEJLAD8gkY5jAI2MdYWD\\/jj86fsV1GT5SQLTYeFRIBwGBjOOJavTWm0JM7uffv3FdDa3de\\/\\/D3PHgHuyOswjDANcLGJ2C9139YdLpOjQvFqf40a3fwTn9Q4xONaOHEjhOSFC2KEz4jI7mOTw0xOjAPoqDW8hPjDBZlGi\\/wN0DJeZkDjE6XuGs1e1gNMZPoP1DnDa3k\\/uHXWKigDZZimEHw16RxNROmlrmkVfdBHYmyoyeQBLidMfc+R1LiIl9DbTEt7\\/yddTesQYYo0EXMXoUgiNo91OEh7Yd9cahkbzhn37g46ctUlVmfuhHjRKXz23kHm4dCLBiAsuJKgC2DARAnWzqlL\\/Ol6\\/+GtsHSzy48x4qfpm4leTCNZfQlXiEcGzzDINUwklGVAwnbbhjg8tbn2dXgdgYF528iyW93+OXG36GZVlcuOZi5qW2Eox9po5QPPjmfSGJbIQK\\/Irkt1t8Llw9XR7Vx7k99\\/Lff\\/8TbnvoZopuno5cF2tXvZis\\/gnh2L81sP+vuz3ArtZW6gCM0LieS6I6DZYZ5Jv\\/\\/A3u2ngfCM3pS85lXi4kGPs0prxluvVaPQSyv4RqmiY6w6JWt8FQDeYdrFil2l47WivTYYPAg5XzGuk8G\\/aXsHLVeJyB1nQCdD3O2tu1lO985HNICzxd4R+\\/dQWBZ1h2LD1WkaTvQ3tmLilZL8k6cESiYnJG4kU0rEEpI\\/1HNaNuVWd1ozYworl9q6Gpx6qjvqepG+uT7u7h9tu4gU8l8PC9kKZUM1YihUokqJRLhIGF0CAI8IxASIuSq8nFHDKVIQ5uewhjnrhLZhAEKLeEdsfwU3GKKKSO6jKMV0SPH+Dav7+UU5YtqVYaeLzzo19FZLrQKkRXXLxynsXNDm+6rLG64Y5bv4x0NCXXUBgcw5\\/oAinxvBEmRg9xZN8eDu\\/dytIOyamntXLaqrOYO2cOtrQoFd9C\\/77H2Hrvg1z7X7\\/jtS9upT0bEs\\/EaW6WSMpIkyJUeQwORyo2PXHoMfvYq5upOFkCL1YrOzlBgA0dwrKeNghnGjaNP\\/zeP3m87QdDPvGzkFJM1QK8QpgqU92wvMduIKbuGJ4i1+ugbImTNGw8FPLo\\/pBTF0w3qcwTDL6JkxPnsfTs00FmQE+hSx8jHNs6o2TLcPMGTTxrYccFCa342WafV59jyCaqhmDqx\\/TG9nDVcy4C46JLnyYY3dwwF5\\/5qUfBUqSzUS+wZE5x4+9CzjzJ0JQUtSqIVGUTl535KpAdEAyj81cSBoMNc\\/H1u3w2jwsynVH760Aa7IRkc98kZy6uGko9iTN+FX91yl+BkOjKJ\\/EHo3sKNUyW59OSirhiFT\\/OSHmSlnYbiCpFVs9vzHCu31\\/BaoleiDLdSXi686\\/Qit7WQs3YVPw4R8qTtHaoGq8vX+xvMJS69Gt6YlEDg8GJcbxiSFAxrHgCPSIixLayd1EDkly3u4idELXKhaNoNirKjO47cuy3B33tbp9ES4TWatnep0metCsac2JMeOMoS2LZNsqxiadTaCkJjSAIDSoEhEZXyaOWnQAChPLY9egDHDp0kO7uY7f+TqdStHc1s7dSRPsGGabQwsP4k+jJPt504XLefVXdYH3yy\\/\\/N9iMC2ZQh0BVwK+iRPXz0ur9rqG44PHSQ7etvphCcQmHKQ+hBpDOK79tMju5g7MA6LjljGVe\\/72rmdc859sOfdx6XvfGv6e\\/v57rPvJviWB8L5nZwzyaAHBWZiNjdwSgtXQHSa6KtWOYgASVLMra\\/k2zr3hOG1qY3dO\\/jMmF\\/qowXDN++1+eO7YZ0u0WqWrYUxWUExmhaMu1krAO1jXVoTKHiKiJ+WmDHBakWi8\\/dFfDJVwoWtMvaneryfVC+75jXLruGD\\/7Ao+QoUqmoIsARAr+i+NBNHtdd5hCrBseNu5HQ3Xj0YRjCdbd5rB8RpDuiUikhIZZWFL1o\\/M+\\/wSEREzU0EY5\\/7dj348Hnb\\/O4f1CQ6VA4yQjJWEYQTwtuvDfkWQuj921Gxm2CMP\\/txqx+yfCuL5f4+j91ApFh29IfRC87qXYAEUh6chM1O1T240wEeXKOqruh9RJeFnWdhG3qa2d6PFmNxykbhscqTBYtmlIzEJUbdb7dsi9CiS2ZtmPqUTlEJVkGepqnGhJRh4sJnET9JcszbYWg2tLdEmzuL2FINhze6\\/eEPDwkaO6JdCue5neCPOms6OSuMHqYUOMIC8tKEIg4vrHxAp8QH18KPG1jTAypBSbwCHyfWAjNiSLfuuHzT3gjSin+9s2vIZwYxhobRZSGCKf2EhzZxIfespYbrvtwDe3dfc\\/9XPvNu5DpDoSykIFPUBzh2afM4eKLntMw7s3f\\/ijt2QQTrsfoeD+HDo2zf98e9my4g5b8Nn7+xffzqX+88omN2gyZN28e1\\/\\/bj2le8ir+43cB9wzGIxVrgwwMbSkbJZIMjkGTOEAuNYQThnim6YRle4SITj5lQaG48UkrOgyjjbfjYMhN9wd85CaP1\\/2Hx28GJc3znAipJRqDxFIJ3HCEwKvzmh7aVyDRFGW3lJLVsiaJm7K4+jsBX\\/q5x+C4fmLk78OdGwOu\\/rbPwVCRbFE1vpUdEySbFQcDxd9922fTgfAJEeu9WwOu+obH\\/cOSTIdFLFmtglBRwXeyWTGI4upv+\\/x8Q4D\\/BIC57BpufjDgiv\\/0eHhMkp1jEU+ralOHKJMZSyuGteSa73scmTz62UINP98QcMXXXfp8xdTkA3W+2aEKiaxCVrlbyjEUpurttjceKBJvkjWyLTPeSSClYKq0AxPmjxrPcmQtNqnSiv\\/z0+CY875rJKKFuHr0mHq07Op9WVAqb2qY401DxcgoW433VudSRgDm1JP\\/b3tnHqdJVd7771mq3rXX6e7Zh9mYYV9kX1wTEyPEqCjucYvmJjHXG1Ev3iTe3Ot1SyRi1LgE0SSKS4wmIkpUQGQRkJ2BgWFgYPbp6X15l6o657l\\/nOq3e9imBxGReR8+9elp+q16zzl16qln\\/f1ORZuefc793BUZlV7Tap1SSv3KM6H7PCdv+qcl83rlb\\/tKJ83JEVxSp9hRpdzTT\\/fAIrKkTm1iL9THwDVQroEg2MhQMZ6uAhgsDafZNer5xJd\\/xuFHHf+43\\/PPX\\/93vnTJZYhWHHvEGv7sLedy+Pq1s27T\\/Vt4\\/hs\\/wLhdgip2BeieZBI\\/uJFffPvvOO7ow2c3we0388+fehv3jvcxUYgpVU5iy1g\\/tbH7ee9rzuDdbz+3Fa87EPHec9br\\/pxrtyhMpUxqOzA2obM8gZtyHD5Q4NTCDVzTPIxt9jAKE9dyyu\\/d\\/FQF2PBeSOuh5KE+7khqIeb2uJIXVIYHAaJiePijnEYttF7NKYJltr6rOeWpjTuSaY\\/WUOw0FLs0cSublvMKJEJSExqTjvqEZ1WXsH6RppSXODUz2DEm3LlLiCqGYqcO7UOFWXQMycsvsobQmPLUxhx91nPMMkUlr9kab8DND3vqWlPqMhSruhUnmlub5rNQt9WcCmukm8JxS2GgU2F1QA3ZOiLclY+n1KmJZ8bzGNdKG0J93NEYc5yyHBZ2hozx6DTcvFVIrCKuBEDqtBHujzJQ7AjjjIrBCm5OexpjjsZ0oGwsVDXlLkNcmVNSka9plkJz0lEf9yQ1jzbhJVLqmn0JiQtja0x4pkczjuiDRZ0K54U9NcXWusJWNOIC1FBSe\\/R9RIWsbiPfTy4NWdpyt6bYMUfpztmDAVFYmBzMuPDNf8Uh5uMtM\\/OHt2Z85nqhe6kNSQPz9CQM9tnyf3jR\\/BTbyHUVBm8ZD8mAri5K3Qvo6F1A0qxRG98LzXG0byBpA200pWKRSCf0lDTGC6kukU2PkhVW8KHP\\/4RlK1Yd8GA3bLyfs975N+zOFqBLfWAMuIRsfCtvet4qLv7kB\\/cpxj3rlecyOjXMtmQ5v7VyE4et6uHCS2M+8YF38qZXvXS\\/33ff\\/Q\\/yj1\\/5OrXhnZx+8nG84Y1vJo5DkPzm2zbw\\/Nf9b+K+VdQ6urAeVleHoNkEVWZtfB8P6BXs8UeRbb+Os9959VN207yfVSZZGur8kCe6jarVXznDhKSNmu39ewyABRFmGaJyZqGZc03eyzjzTpjpBPAu1NZlSYDlDg3R4QMz8RgTh1YcG81Swu3LQ5pX22cz1\\/FkibSAOrRR2AIBeTXO+w3N449\\/poE9a4bDZ4KX2cp5G8+OSZtHjwcCIq64sN5pfh2XSg55lM8nb1+Sme4DN8tipaNZVBKfSou5ijksV621eIx1cPk6Kj33emH9Z+KtLvVkCWRN36qsmhmXztHJveMx72Pr5ZQGUAXJeUbNDIuYmR3TTKmMz4TGhOP3jngjbznxbqR5R26RC3\\/4+QS\\/IKLSa1ovzadb7HxVqS7FZF6hlUZU4AEID9jswogPm8ZgQBnEa5zXlI2Ayqh0xExObeV\\/vuVM\\/vxvvsKpz3vxvC2kL3\\/ze7z3b\\/+VRmkJttKLVxEKh0+niRuDfPj8j+9zznd\\/8BN+vNkR9xxL0TQZH5lgsKPGhef\\/Da+bh1L71Bf\\/lfM+9iVkwSLKLuH2ay5j48a7+fjffhKlFCccdyTHr+\\/njpGMVDXocjV+79C9NNPt\\/Od9R3ND7VQaVYvLDIYST+UrS+vAeqy1whYPIMymHsnlyOOOSylQJjBHmWiWe0\\/BHMIaNVvvqsPDIDYoHqmGrN4MifhMcWeruVs\\/9veHPkRB5W5WXNZhb8lcLtFcCei5I3js8WuTI3cUg6U7gwjcar7WTzweyBuq7axSDS+SudawyrsFZtLC6tGcpTO\\/x6pVqPvo+6Eedx1an3\\/EvQvKM5RY2RikombXXO+rqFscpo+6j8zupwKP+V0+V2YdUS\\/DU0OkdeGkQ17Em5+7Ahm7pHWZr1+XUS8Yujr0HKX29PNS2nmzKqkYrSOU5GCSBHPXZVngSlWhZkqhSZ1DZRk2tqG4FqGgPOiIaldMeXKED533Bpae8VbO+7M\\/Zt3aVY+ZLW0mCd\\/7r6v4+Be+xd07G+iuVdhCJ17ZUDiepsjUXs7\\/o5ezeOFsZ0Oz2eQvP\\/ZlVGkRmS2SOsXPH4542avexete\\/Yr9TvXCL36VD37qq5yypsJkPMV9tRXE9NgHfgAAIABJREFUySHU9l7HTTddzymnnBGU29FruOWKByjWC5y2aCNr4o1sHOmm6RYwHnegXBPiCK\\/0U8xelT\\/Ov\\/I34YEyN+SfN3MMyEfw6M4v3a\\/mWC7yOIpLzXudjA7X0cyhTjqg8cyOSfKA+ZMbD09uPZ\\/MunOg83v8\\/RTauoSi7+Izb\\/omzQyc91T1fWSD57U+t3fc8+93CNUleTGu5imH\\/J63Ypt3Tk1ZRGtwoZnNOY9zGZnLQlpaKbQJSB9eaUQ0ggo8oCpDi0O0piAZrncJe6f7+OnVW\\/jyj9\\/Niu4iv3368XR3ltFakTrHtl2jXHHDBmoUUdV+ogWLwRRRxoL3uCxFmpMsLjf4i3fuW97xjxf\\/Gw\\/tFeJewac1atPTvOT0F\\/PWP3z7fqd57Y238p4Lv05H5yKKbOTdrzqNf74JttxWxOpJrrv2ck45JdCHrVm5BGo3sTJOeMlqoZqOMjm9mCztpMNOs6g4xM6Gpq5\\/mdzlb6jMPFDqUSHCJ3cdnsLrqGfAeH7V6\\/4UjmumXayoyvidLyXSFSIM2Rw0GBH4u8sy4m5DXDF58bb6ta2L3beJ7vElzQJvZMHY4GML+5w6U33jnEdZRU9XN2ljPCfxsogG4zMio7h7uMg96gii3kXYrMFgJlxy9S6cNBDTCGax6oaudZjIgC4g2qCUyd0JQfkUmd7DX7\\/\\/tVQrsw3FI6NjfOjz36DZsxgVa3Td0m8n+ccPz49n4U\\/++tOo\\/nVkUScb6yUu+tLl\\/PFf\\/D6Xl\\/q44xf3MLB6tnJ7zSHL6GSQF67bQ5Vd2CyiUirQUdxG\\/8A4K+Id6G2aXdEU813ntrTlmSYhpgalOA6F3W70UZ\\/5+nUZGyc0nYtMi3UqBAp\\/XYptnmKMI9KWmIQIAQfOW7yy+MxR1AoxFi+GSpQik1NUKhatDU40ymc0bBc37e3lnuRopLQSrz1KW1QceCkNgujQyaCwSG5fKx16RlEKEYf3HprjHLO0yFte87J9xvmhC7\\/EpO4hMt0hU1jbzgfPO4e+Bb37neNFl\\/wH949oqgu6AMtk1MODcizf+tpVvOuNz+U7chTXXHE98pfBQo2U5\\/cOHeKozgY6HWXSOboY5LcG7ufuoWm2R4tZ3f0Ayzu2tJ+OtvwGa7bwY3x6x6NsQBH4xvUZX7tD6BwIbGS\\/LvdzX1d0nho1TVN0iJyiUWSZw2UOfN4QryJq0kMz8ZTjvfgoQSKLRoOZZMz3c+f2XrZyKFPlZWjjsKSgYtyMf5+nt1TemKaYrcJGQPAgDp01SCd28P8+9BfB1c3l\\/ge28NlvXYnuXY8yFtWYYM1AxNtev3\\/k3nqjyd9d\\/D1U1yHoqIgXBZRp+gU8NLiZ+x\\/azZknL2NBtdqy\\/B54cDNpY4LUFqljqJuUnVKl0bR09a5k+1BGsb6LdWv72SFD7QekLb+xms1EsHe6weevFhYUITYwPAU\\/2+wZFU3ngKVQnUUTFvkNUWy6UsfEPUgzAa3wPsNnWXAL0TgxuLiPhCYwiljBa43OFInuYNNYN1vMEYzFizBWUyRDSwmvJMBZtTCaNErrfZBnnShQgheP8o50eojfPWkVv\\/PCM+a8OYT3f+RzqOoSdFxCeY9vjPG+\\/\\/EqCnG83\\/n9y79dyu56jK1UERPjReO9peY6mIwP4V8vvYtzXnoEfQtXtM5pZJ56WqBnog6qwV7Vz+SI55jFo\\/zn5lEq3etomm6Sxsiv\\/Ua3pS1PPm4XSkPiDs2VO4W04UNJiFFEVUtHSYWCYZvH1Z4Be93O1wfuWJoyWaggyXSO6+5wWYrzKcZDpA3WNCkVG1jt0K6I9jF4YefUQgZZyGRcQHSTYiZYUyZTZZRqYMiYQetTmpxV2wTMLEBLKPlQEso79PROPnb+hfvEzH567U384Mb7MX2HokyEZNMU\\/QSvPnv\\/JSXOOf7pG5djq31oGyHa4MXgrSWRXib9cmR6nJuuv4vXvePc1nkb7tnMtqlOdqcpVWVJVJWGK9GcGqNUOpQ9aZXanjqV5vBBmD1oy7NJsyktOY+GUOzIs2F5ic9sWYl6xuzzeSs2tCedKfnQDklT0rSJcw7vFZEyxH6IzjJoByaJUSZmAsu2RieTuoTPEkq6QNHFSASN0jSRBIstYNaHldLahARC7oo6CQkDcQlS28tbX3YGh69bs49i+ssLLsJ2LkJHAZ\\/MZQ1efOqRdHRU9zu1a2+8lXu2T2IHlgIKUeBRKKvJsgJTqpemLOS2Tffxdyec2frOmzdsZXOyhr\\/fXKRcWM4i30W5qBis72WcpQzpw1nXP46Kxmjh9LSlLb+Zqg20YLR6dAnP3DKaZ4jMu9zDi9BwjrKOcqJeR5okCJBmDh110FXfTRwX8SrGmAwRxfZmN9LZR2Mkw3gLOiZTFqUyrGQYXcBg0DY0AWtj0cogSIv1J2DHOLK0RtWN8r\\/P25dK76vfvpTbHxzDLliN6JxTLqvzvJNPm9fcLvrG91GVBYixKCRA\\/SgfyliMwesy06qXQ098BQMDoad02\\/adbNjZQPWvZUitR2eGUWnQm0ywo9HB3uoA1j5Mb2eBysoexhluPx1t+c33Sef8mI3APfPEyjzLEKKiUBqoIztCdtJiaGQZaEPqhIYU6GxGKF3GlTQ+G0EoMOg6mRhrkqURoi2JychMRkEZ4qwcFJrV2FypiYQeO6NsUC54dAqeFD81yHvf\\/gr652Q4p6drfOjTl6A7B1A2zuN9GZI1OGrd\\/tu2xscn+P7Pbkd1r0fmRD01HpHwM81SXGOS157z+pb7+93v\\/Qcd8RhVO4iugZS6qUnGbl2k0y9jiRpjLJvk1jv3Eq\\/cTLld7tGWtjyNrui8RdA2oUEZT0rJZkwnioYyKBwuqTFpO4l8jYITHAW8L7Nk8XK2bB5HvMeaGk2vUKaEQqNVhtEao0N1uDEejEGboDyVBIIJwZPWxllayfjTt75mn1F96otfZee0wXZ1oIgQb1A+QL92du7fDf3BFddQkyKRKQCGTNkctVehAS8O15hkScXxB7\\/7IgCyzPHz667k9adELO7YhksSrtm7nHpSpqB2s6ZTIf2d\\/OgezdHre6l2FvA02rvt2S4SWgp9FrhagbwPVbfX5mm32GS+90zRf9gIW7d1kXooaIUShziHVeDq4+hqmSxtEMcRCoh9ChO7MNJNKgbvwOq8uNbYkBHVEcw0Z2uD1jPUXAI+xLsyl5BODvLB\\/\\/UmSsVZTPZdewb55Fe+h+lYFRIGM61GIoh39HR17nde37\\/y51DsDDE1D\\/jZYmPEo9ImamoP7\\/nTsykUQnb1qmt+zqW3DFLu7SWKoFIpkzY93R0ToBQbkgi3tcRqm7G0a4Ra2sSY9mZ7tktSE6K6Y7H1rOiGVYs039wI3j59yLFtaSm2+btIptREbA2XKJQ2WOXQLkWTYfBMjQ1Trmqmm46uoqUodRaYCXqK\\/eyZ1iAG45qgwWPwWphB3FN5o1roJw59fV4Jmc\\/IamMctbyDV73sJfuM5\\/9c8AUatgcdlxCl0Urw4kJ8DsXo+PgTzifLMq6\\/9V6wi3OlKAgZWnToUXQpUh9mVbfjHW98Za7ghb+\\/6Nu4jsOZtP14ZRhNNGXVpDZWxxQMWaHCYtnDiw+7l2217ejYt8s9DgaDzQlvO0lx+IBloFvTTIWLbkjp7JwFCG3L0yN6Djvbfo+o6Cn113DaoLSlaDWxAu19nh0VpmsZKQUa3qDxRM1h1i4poHUTj8e6BOM9IhF4i\\/YeLRlz8BBCK31es+aTBo3R7Xz0\\/D\\/ZBzvtrrvv418vvQ5d6gUd5Q28EmpDlCDGkmX+CSc\\/Nj7B9j0joAJpolIBNFK8C1ZlcwI\\/9jCfOP\\/tFAsFAG64+Q5+cvND2Kgbi6aiIfYJTVcgKfQxFfVTSgzHL9hFMnYXDV2bRVVoH8\\/qQ8eKT1zl+fY1gbjnnq0Ob+ZiO7WPp+uwB\\/IiEYGOQyYY2TZA5j1FrWmQ4cQj2oDzaK2pJY7YKrzyRDQoNB8ijsrUJEYjZM7hU4hwWOPQAuIMylpajqAXxGUkU0P87inrOeXE4+aMQ3j\\/R\\/4B27UEHRfx2uSwOIISlRcUFvjp9Tdz2knHPb65ag2i5oD7iQ+WmjgkrePGd\\/CmFx\\/LWS9+PhBKPN77kc9DxxLSqISyGocDBZFOSWnSYWKe23sPa5I7GLVd6BXJ7MZuy7NajA3QP2ccGULXv9jiKVZt+97\\/Oiy2A1GESkH3sgYUHF7AiqegQ82IxlPUQuQa6LSBUYDLsKR0+VG6S5osy\\/IGd9CqiUqGMOkEZA20min4lfzwJPVpsrGd\\/N\\/3\\/bd9YhQ\\/\\/MnPuPauHehSN1g7y1MoAsqHgsG4zNU33cUTudpGG0pWkCznPXUZyqWoZBqZ2MkxCxWf+fD7Wp\\/\\/x4u\\/wW2bBokLEdYmaJWhlKAwiHd0S8y6aCuHlW8hnd7NmGQQS\\/uFfbAcHqTuOGx5sNLu2iHYgmqvy6\\/hsOIPOJJAz5FD+FtKiHIUjMFrhZOUss4ouDqIQaUe7+toHVNgKhTMmQJZ2gDTwGUJ1XiMxX2r2TmeBhgiG0HmQvO7a1Ib28Mbf\\/9MVq5Y1vr2NE356wsuwnYuREfFwBKk1BwFFlADVVTk6tvv58677+XYow5\\/zJl0dFR5\\/VnP4+If3h6KDG0MWRM\\/tYcTV3fx\\/X\\/5e0qlUPB718b7Of9T3ybrWomKSwiC8R6NRokFrVncs4UXHnIXjd17SCqLqC\\/2ATfOH3xvTJ8JadOT1kMLjo11wNgvaLwLMNvNaU+hogMnwByMM\\/EzcNeOpB4AK6OSotSpicohueRnEG0bnqQeGNuLHYHGDwlIt2lDWoQzCkWaCGnNk9Y9tqApVDVZ09OY8kQFTalbP2EG0yWe+oSnORVuaFQKFHg2VsRVjc+EI\\/qhECmm68IDo9BZFmpjjqQWvrPcpbHFfb9jPvN1mSfL55Q1w3yjgmrBn6MCDHmxM\\/A1HPTJgwM\\/RdG1usnIwwXsaIHINxET0DmsT\\/GmgBKDadZBO4yfpKgdncWl2PESmeqmLKN0pns5tLqHhelORuUo9rhKYKaUOpqMZi0hzkZ5\\/7vets+3X3zJd9m8t4ntXoTKG+hDDEshSuVoqxqtS+jKIt7\\/4c9x+SWfetys1IUfPp84+gSf\\/9plYGJWLV3A+973Wt72hnNaDfbDo2Oc+2cfwpcWI4VunLbEzhKpMcROk2Qd9KkJjunZhR7bhLaekZKGBenj4nc9q5WaFzq948TFsLIbjlxhmWzAe76X0bU4Iq17Xr0ezjkx4rLbHV+9x1HusUCA8Z7a6zhlkfAHv2NY0R8s\\/NEp+O4tGVft8JR7DeXUc3yvsKgCx640eOADP\\/GBV7QprLIZZ52oGWnAP28Q+opw4oCwskdx9CGW3ePCed9MeOfzDGcfH7F1WPjADxzVhY+dwUybHjOW8e7TNCetjWgkwr3bPUkG944IP9srJHXhyBXh3FsfdDiB6lTGu07VHLsyYtuQ8LErMpyNckU+z\\/n2GHrEc9JSWFKFNYs0SQYf+k7Cn\\/5WxAmrLUrBz+7xXHxzSqHfYqKDu8REPxk7TxmhctwUdV3AK0NRCyUFBoVojdVC5FNSX2CUhWybWs3OHRWsT4EhllXGee6qYQ6tDhJno3g8SebI0pQ0aZDUJqkPb+e9b3slPd2zxMfjE5N87IvfRFcHwBTyTGYek5MAiRwMN4VTBordXL1hFxd+8WuPuwClYpFPf+yvmNz8U0buuoxN132Hd\\/zhuS2lNjo6zu++4TwenIiQchdFVaMkU2TRGDVjIe2hN9vNmSvuZX11iIJP8X4BY8X0oA8aT9YFLcKiHs2hizWrS4JrBoukrwyxVZyxVtOYDLHNpC40d2f81YsUf\\/XymI3bPa\\/+h4TXfLIBHt79kphT+gJpTMmCzTxnn2hZu1hzx4MBaUZ8sJDOPkxz5uGWAoHNPjJQmxJOXKNZ1KO57e6UP3+u5jWnRVSKisOWaKr4x5yHiFAfdbz\\/tw0vONLy\\/y5p8KpPNqk34IVHWwaHQlN4c9Jx2tqwb264J2NVWfjsGyP6y1CKFUcs15y2TJGlcmDzrQdo9OFhz6nrDGsWG8bGPF94R5HpunDFbRnVouasEyx\\/dHJYz4M+kSMSFvlADgQKCxz1HiHVBWLtKauQOBCtMKpBQXsaqovN9SX8fMdiprICBkGbaVZ07mR5+jAdjWFQMVPTTbzLEJeSJgmN6XGW98Db3vDKfZTQ3376YkaaBZQtIaIAj8r9PKUDU71ugbWbgLjbuYzz\\/+E7fPzTX37CeFuxUHhUX+kdd9\\/Hc8\\/972zYA6rSj7Mx2htiAYVHlGcg2sk5x45wRv8mzMhmXGYZkiLRct96KA62QykYU5rrRzUf+ZFjx1C4R6evUTRrHltQfPYaz9V3ZSRZuF0uEbKhlI+9wnDKOst3b8j4lzuFBYfGFJfG\\/PjOwFByzomG5pRnr9N86xbfInnZsNNjSxqXCYWG45R1wRm59WFPVFIMe82lGz3TeZ10VxFOWm\\/5o0\\/V2bTTc8XdGZMqf88\\/ak5Aw3Pkco0I7JqGBasjLvhJRjMVdk4EQoYo9axaFD7z0FbHBW8ucMGlCW+6sMFITtvXbIbn50DnO6o0P7jX00zCHj5yteW9X0v4wi3wuRuE6+4Onz9xtaY+4Q\\/KfTf30E9WKSJCccU4dbEoZSiovHtAC7H24DIavsC2qRKTlQoUUpRukhGTTWcUGw4jXdSlQiIR4j0uSUibDRrjg\\/z1f3\\/zPnBDD2\\/dzue+cTm61IPSGtWqgRO0eMR7vPcILig7rcAadLGC6T2ED\\/7TD3npm\\/4HDz60bb9m7EPbdvDO932Yk855D5sniqiOPpSN0crg6MFRppxGrIt384Yz93Jo4XpkeBdCTF0vY2ig1gIPPVgPbRVROfB0fv+W8NC94AhLfdwFcumi4oFBz61bHLaomBzKePfzDeuWGLYPeb74c0dHvw3sTQYSFx7orrIibYR\\/H71MUSoGsu7bd4R4WnPK89vrNdaEluHbtvlAhqKgGsHi3gCr85LTC3z4eylDHRHv\\/6HjszdDqds8ppGNCIkT0lwJv+0FEfUJT9RtuO5Bz6gofCYctzSwZo2Me95zboEvXJHy872aww+19PcEhXf3rqAEn8x8l3VDX3dwMT\\/\\/44S9saFzoaXSa9g67FufV07ayQOedGBb0bOqycT4FI0Hq8RuDJ2jyirv8R6UVfQv6GJosol4i8fg6GTPkCVZosiMZlKK1J3CZQ7xiswlnHb0al720t\\/a59s+8NHPkBUXYOMiwelVufJwofYtx2wL6ByCarEaabwtYruW8dN7Rzn8Je\\/kpWccxanHHc6ZJx9LZ0cV7z279gxxzU23c\\/OGzVx1y2Z0ZQDTvx5lS6AtCoURaBbq2CxjSfIwJ5fuZdnkMNn4OJO+xChFdpYNdqm0yGQPdolKmusfzHinwEC3ZlEBagkkk56zT4z4P99NUcZwVJfneXmZxD9dkVDpjwI1nAfXhP6OvKskN8jThufwxeEhf3C3J4t0cAdHHOe+MgJg+5BnUjS9WpE0PCeuCOUYSsFVd2dsTzXVfrNvT7d\\/7L0ed1iu3OA46wTL846yXHNfk5tGFZ+7BXTF0px2HLkiKK8F3Zrr7\\/dctV0RlxXH9wa+0aFxz7Yp6Ch7juqSA5yvcPKycJ2JaeHKB4SelWH+WSIc0h\\/+PToloefZH9z7zv5SFdEClcOmGd\\/TR7euUEjGQ4+WDu1NOqvRVxym7PpJtUaoIhSxHRFNWwY9yVSWkRGBB+8dzjlOOuE4brjlzkCsCGzZvodLr92I6V4ewoKSxxCY6ecMhblaZt+wM21RgoQWLRujq334YgeXbxjj8luvwH\\/xMpTPseBMjLJFiMtE\\/evBFnKFpnOcKUFJipgMskmWVbZxwqIaZjJj2vcx4ZskPb3UFo3ktTFtrZa\\/V9jdgKEJT3+X5ugliqt2Zjx3pWL3mPDQtEIZzytOzWOak54bd0DPISrcPQ\\/1CccZhwVltWlHcC2bU54TTw0P8w2bHHFZUx\\/3vPwoRU9H+P8\\/35RRqGoEIZn2HLM6JzTO4Ks3OEr9EfPtCShWNRdfn3DmYYauiuI9Z8f80cVNUq3RUSAjPm19hFKwZ9Tz+WsyqstiaqOO448L47n+XkehqmlMCq94wYHP9znHhOtceVdGodOgdEjUNCcd65cG7+bOhzxxRR30nQ72l52\\/jiE6cpKpmw1lrdGZR1QRBxR1QinZQUEqpGoBYlKM8WTe08yEMhHNRCHKtiCKxMR86utX8Q9f\\/j6ZS0K3QVxGdywEE+eKK0AKzeQ\\/5uZCZjoYFFkosxAfFJMG8TrgtdkSqtiNFj\\/L7YgGTCg01jqozBav4mzrV5R2U\\/GDVNUkxmumXMKQeHzUwQ41jVhP65S25Gznhps2Oc46SbOmD753c8bbzy3ytz9IKXUbJnZnHLEiPMg\\/ui0j7jCt\\/ZAlwqFdwuIF4T5fdqcjKhmmdrvWOXftCIvdnWWce3qMzwl\\/79omRMUApNCY8JyeK4sr70yZspqq3b9VnTUFlwV+Uum0fPw\\/m3zk9UVKBcU7zrRccH3I6PZoYUk+xi9dmVJYYNE6JBROWBu6Vm7b6olKhvFdGUesKMx7vnHJMLEn47jVQXnd9rAnroTC37Thec5iRV9XsBYvu8u1\\/nZwF+jmBLJP9gCoLG4yvUTR9GVEKxpKEymP18IWtwTRHkuGokBEzN6kl22+nyldZdx1oX2CRkhMsKx8sQs6FhL1rMB0rcCU+9FRNbh3TsD5vKxDtZIZwUAKDL3Ke7ybjbt5L4HkFo1SGq0MSkdoU0DZIhIVIY4hti0IJaMFrTwqvybiibzBi6dTtnLCkoRmNs6QGJx085Cr0Byogfrl1vPZeERFxd07w4th3WLNWYcpHhrybBwLZMAlA+VCeL0MTedFrTlz+fSw41Un5pX8mzLuGA7u5GF9UCoomqlw5zZPbSTjf50dcdVNCVoHVrWbNjt83VGfcCwpCQs6g7L40QZHsSOPp+1n7PVxx18+T9EYzYhKittHNFfcHmKGZxxhyKY9WdNz3PLg4tabwtUPCFE5JDLW9kC1FOKAN25yqKYnSv0BzVcZxapO6KpoMifcul3QkcJlwuSg4w2nh7n8dEPG\\/VM5I\\/1Bvuf0UxKpA\\/qPmWakq8yI7iY2nqIkRFooRBHG1yiZKSLdRCSjFg1wz\\/AS7hxaw9B0OdhcMwF\\/QJQJ7qyJwUSgo1B0+wha7Zkspyev88ip+WZIX0Q8CkFJKJRVIigvQVkp30pAhL\\/nVpkIAQVuThY4n2hiEgoyRq80qPqMrCE0GjFDNGms3xNqk9pl3486TKy4c3vILi7r17zj7AJf+GlGuVujUNQyaOTZvomp1nuExpTniA7P84+2DI57PvHjjEqPJkukFV+7Z4tjfMTzFy+y7Bry7BkLe2PjQ45OLXzhXIvUHM9ZEdzQkUnPhr3MsrE\\/wSEeGpOOwxdp1lZCQXCpS\\/PvN6YtG79ooDntOTbvNrjh3oyoQ6PzuNjRS3VrPL4hfOYcizihkcMazWu+TeGYpWHfb9oe4ol4oTbqOftQOHqVZetez2d+mlHuMbMew8Fd7vHLa0cEtIXq88aY6ilTV2VAYyQhSofoiA2Rb2L8BFo3qYllLF7JpmQdDdWNMVGwuJygRYXUQK7AHB435z9PhlMO8W5WmflHpHtzK00ky38KgssTDfKIQr7cmc2VXrimBx9S5j63+tAaJYaBZCfrK9vwYtnuFrPZwe5FdTDMywI4GA+lFbunhOmG0FHRXH57xl6vMXmVf7HDcO3GEE89fV1w1cZ3Z3TVMj746gI7hj3nXZKQVi0m1rhUODxXGAULH35txNErNB\\/9z5Sj8jKPvcOeT\\/9xic\\/+OGNqGk5eGz5\\/1V2zrt9+x+6hakInwbknW0a2pUwNOxZ3hr15705Pw4T418nrwga48UFPXNEtkuGjc4W3e6\\/nk28v8O83ZWSFA5tvMu05cU24\\/q2bMpK6Z2xnxondjnedVeDBXY73fSuBbouxbWtN5ECY4Ofj1xqhevw4gzcMYL0mNlP4ShM\\/pjFY4kAmgDKamk8wBYsREOdQ2qCVx7cC\\/wrRkveoqlZ91Ey2USGt5ILWBFDKGc0SoiOIaJTyzPBdiQDah\\/YpIc+shvSpVjNZ1hzASELSQZglfbWqyaFsZ1nvAm6ejBnrG6Jj5TTRMw\\/y\\/ZklIqAUo1PC+LTwlRs9HUtta80KVcUXr8\\/orsDzj7VcUA2JhecfFfHjOxwXXZ8R9ViiUrjHxsKO8bDaR6y2yFbH+7+VYnotjTwb+MKTYj77o4Rf7IFiRXHMyqAYfrFNiMt6XvfKe2FFv0ZrOO0IywUF2LTT88rTYjY87PjY5RmlDk1vh6enqnFeuHWnYHrDOLWBel5n99unxPzLz1Iu2wSdi2w+X7X\\/+Xohm3YcszLEB19+ZkxcSjl0ieHIFYZvXZfylZscpT5LVFDtPTgT2335Rwae4rUQJraXGN9aoGRTasowsqsT5ys0007Q3ThlccbjdYaSGPGh1xJtgjKayWlqTQDrUK03rMoj0kqpnKJvLjoHrSyXaynIkJpTeQ5VFEj+u0hOIjPzhKkZb1ZaD6NS4e+iLSob4vlLdjC0M2aH7OaYFz+ItcKjQODbsm8APvGYoZQv\\/0mR9361yW5jict6nz2TJaFjYGlRWNylSZywcbfgi5pip877H8M6e+eZGnY8ZyGMTwubJ1RwwRRkE45jFyo27fFMW0OxU5E1hNqYx2dCqdtQ7NDzAn4UL8RNR7cSHt7tOHaloVqA7WPC5vHwnTYOFltt3KEUlLsNhUrgxXWZx004juqDzYPCpNGUOjXaqHnPN0s9y9OMC99aJE2Ft\\/x9jXVrLLUU7t4pqKqmWNVo20bpfYRi63\\/KlbwIPHz7AnZt7aRSmCCuNHFYRnYdglILwJQCn4FKyYjwOchkUEC6ZWGhzSxn6Q3wAAAGSklEQVQqbstqU7PptjktVfuqVj+L7qZmz0c0XpG7lbmVqWYUW0iPZjJrsQVrUIPSGDwqnaDppugpbeb4F2xpkcO25ZGWTgBdRAV3bnIw46Mvj7j9Ycd37oVKj0Hpx1IkQZl4P9M8onhEWHXf7\\/Az9yggMM+4jzP7JFDC\\/XL7OGTWZy248DIMnJpKz+\\/8xxvPfObbmPCcfYjwjt+JuW+b413fTOlcaPPH4\\/HX52AX+6tCdl1x7DBRqcGW29fiBmt4DKnSmEKCQmG1zbOUKgTz\\/cwu0jlGms4rLGYZ4WctMGao4+couVk3VBBE5xZavqlEgNwtFe\\/32XwzG1fya0mu0Lz3eQLCkziPFs\\/aVbdxyGF7UTOJjrbt\\/ygrpzbqOWUJbBv03Lvdc\\/4fRNQT4Vt3eDoGbCtz\\/OjXbHi4Hwmj\\/lifnVEEj\\/yM0nPo4J6C+zNXeRmj9juuxzr\\/ccezv\\/kKNKYcpx4a3PabH3AUqxoTHfg42ortKZRFa6coVu7ngRuXMzGhcGR4lWCUDtwGgFIeLQqvVLDcZtxJyQJ3AZpZIy1XUCIoFdzKAFu0L3O8Fk9QYXl8TdRsfG6mj3RuLE\\/NxNaESFIyFZN5gxBhJUOlU0TpKOuOvZWFKyZAz8Tz2hvoUZaUg2MGhA++ooAI7B7xjNaE9\\/1bSmWBRWnVfhDn+YJoTnpKdcfhKwLPx8M7PUkNovKjlVtb9hWz\\/oXlv\\/mV+bkKitWUvhWjNIarJHWF8x4RhVYBN82omURArrA0aHFo5VuWWDDO8iC\\/BpX7kUpJrqjmJDDyujZR+9h4LZc2dBAE6wvxocJEcksOyd1iDd5jpYFtjlKxW1l7zO0MLJ9um\\/3zcN8mxzwvOizEvH5yp+Pj\\/xUKVm3cXrz5KzY4bRl89LUFrFF4gees1axfpLjuIcHY9ho9oe75\\/f\\/b97S8P72DXRv7eOjuARqpJsNSKFWwNkJpm8fT8kGJIOLwRAh2TqBXtUJrGo0oHWo1lJ5VXF7lfQJ+HxegpfgQlPK5faZCp4EE286jybRBZ3VKvkYxG6N\\/5f0sP3Ivus0yNW9J657auMdnoRWpUNXo9oN4wIqtMempjztcmscSjaJQDcmF9ktif67o06VBDSw5YohyT42H71jI9FQnjfo4PiqibREbF3BKo7UNNWetpnY\\/k6BsYa2plhcoKAeiHVrpcI6EoIiZyQ4o8jhZ7oZKiJt5CS5s6EjI6+GUw2Y1itToKDzEmtO2UO5Ood3PfmCbqqTpLD0CJba9LAcmGopdmmLXY2co2uu5nz34tK6Qgq7FNY7s28Lww10Mbl7I6ERoPWm4FFsok80UZuhQXa1weYYy9IGKz9t7xeXKyhOIgHILTmzoCxWZVYIz2dQZy0+HmJz3LudKCKxU1idU4kEGVj7E4nUTs\\/Zeexe1pS1txbYf3YaJYGDNOAtWjDP4QB97Huil0azQbGZ4HWOiUgB3y0NvWmlmmtCF0Ceq8t81Hp85lFJoHeGV5BwDs6UhJldOLYw0FfCztBJ01iSWhFJhhN5lgyxeO4SxtJVaW9ryG+2K\\/hofXGOFxev3smjdECMPd7B7ywDT011keTuK1sVgk+vZerRgnIWSDYXgfZNKoUA9aeKcxyvJa3tUQHlQak7fJygcWgSfJEQGSoVBVh65ne7FjVluU9XO3LWlLW3F9kvZb+FH78pJeg+ZoDYa0ax1MvxQN\\/V6L\\/WmBbF4UXgJSQa0DoUcCpQUSbTBKY+SUBPnRBDxASbcB45BI4Jknoga3cVpoi5PYWCYvjUj2BZFXrs3qi1teZa4os+sp7jUnVLqHqZ7yTBpfRu77+9jalc3mbOk3iA+dAI4LEpbtAJpegoCIllog5EoYOH7BpFOiOMmpaKjWE7pXaipLhoji8dRVlo4WG1pS1ueVYrtmTWguUnsqJSw\\/JiduMP2kDUU0zt7AEVjuEhjvIIoE5IM4gMvad5LWijXKJSbdC+LMEbjy4NEVY+oDGVmwMRpA0K2pS3PWlf0N2CQJnaYGAqde5\\/c+Y+hNNs6rS1teTYrtnaUvC1taUvbFW1LW9rSlrZia0tb2tKWp1ex+bZia0tb2tK22NrSlra0pa3Y2tKWtrTl6VVsbb3Wlra05dmn2NrlHm1pS1varmhb2tKWtjyz5f8Do0rRt3XbCQgAAAAASUVORK5CYII="}},"from_email":"sebastien.fauvel@gmx.ch","from_name":"S\\u00e9bastien Fauvel","to":[["info@i-pricing.com",null]],"subject":"T\\u00e4st html","spf":{"result":"pass","detail":"sender SPF authorized"},"spam_report":{"score":2.6,"matched_rules":[{"name":"FREEMAIL_FROM","score":0,"description":"Sender email is commonly abused enduser mail provider"},{"name":null,"score":0,"description":null},{"name":"RCVD_IN_DNSWL_NONE","score":-0,"description":"RBL: Sender listed at http:\\/\\/www.dnswl.org\\/, no"},{"name":"listed","score":0,"description":"in list.dnswl.org]"},{"name":"HTML_IMAGE_RATIO_02","score":0.8,"description":"BODY: HTML has a low ratio of text to image area"},{"name":"HTML_MESSAGE","score":0,"description":"BODY: HTML included in message"},{"name":"HTML_IMAGE_ONLY_08","score":1.8,"description":"BODY: HTML: images with 400-800 bytes of words"}]},"dkim":{"signed":false,"valid":false},"email":"info@i-pricing.com","tags":[],"sender":null,"template":null}}]', ); } } composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/classmap/MissingSpace.php000066400000000000000000000000551267577262200305040ustar00rootroot00000000000000 { } composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/hhvm3.3/HackEnum.php000066400000000000000000000000641267577262200271750ustar00rootroot00000000000000 array ( 'handler' => array ('midgard_admin_asgard_handler_preferences', 'ajax'), 'fixed_args' => array('preferences', 'ajax'), 'variable_args' => 0, ), composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/template/template_1.php000066400000000000000000000001541267577262200301620ustar00rootroot00000000000000/* * class templateClass_1 * interface templateInterface_1 * trait temlpateTrait_1 */ composer-1.0.0-beta2/tests/Composer/Test/Autoload/Fixtures/template/template_3.php000066400000000000000000000001611267577262200301620ustar00rootroot00000000000000 class leading { } class inner { } class trailing { } composer-1.0.0-beta2/tests/Composer/Test/CacheTest.php000066400000000000000000000063311267577262200226010ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test; use Composer\TestCase; use Composer\Util\Filesystem; class CacheTest extends TestCase { private $files, $root, $finder, $cache; public function setUp() { if (getenv('TRAVIS')) { $this->markTestSkipped('Test causes intermittent failures on Travis'); } $this->root = $this->getUniqueTmpDirectory(); $this->files = array(); $zeros = str_repeat('0', 1000); for ($i = 0; $i < 4; $i++) { file_put_contents("{$this->root}/cached.file{$i}.zip", $zeros); $this->files[] = new \SplFileInfo("{$this->root}/cached.file{$i}.zip"); } $this->finder = $this->getMockBuilder('Symfony\Component\Finder\Finder')->disableOriginalConstructor()->getMock(); $io = $this->getMock('Composer\IO\IOInterface'); $this->cache = $this->getMock( 'Composer\Cache', array('getFinder'), array($io, $this->root) ); $this->cache ->expects($this->any()) ->method('getFinder') ->will($this->returnValue($this->finder)); } protected function tearDown() { if (is_dir($this->root)) { $fs = new Filesystem; $fs->removeDirectory($this->root); } } public function testRemoveOutdatedFiles() { $outdated = array_slice($this->files, 1); $this->finder ->expects($this->once()) ->method('getIterator') ->will($this->returnValue(new \ArrayIterator($outdated))); $this->finder ->expects($this->once()) ->method('date') ->will($this->returnValue($this->finder)); $this->cache->gc(600, 1024 * 1024 * 1024); for ($i = 1; $i < 4; $i++) { $this->assertFileNotExists("{$this->root}/cached.file{$i}.zip"); } $this->assertFileExists("{$this->root}/cached.file0.zip"); } public function testRemoveFilesWhenCacheIsTooLarge() { $emptyFinder = $this->getMockBuilder('Symfony\Component\Finder\Finder')->disableOriginalConstructor()->getMock(); $emptyFinder ->expects($this->once()) ->method('getIterator') ->will($this->returnValue(new \EmptyIterator())); $this->finder ->expects($this->once()) ->method('date') ->will($this->returnValue($emptyFinder)); $this->finder ->expects($this->once()) ->method('getIterator') ->will($this->returnValue(new \ArrayIterator($this->files))); $this->finder ->expects($this->once()) ->method('sortByAccessedTime') ->will($this->returnValue($this->finder)); $this->cache->gc(600, 1500); for ($i = 0; $i < 3; $i++) { $this->assertFileNotExists("{$this->root}/cached.file{$i}.zip"); } $this->assertFileExists("{$this->root}/cached.file3.zip"); } } composer-1.0.0-beta2/tests/Composer/Test/Command/000077500000000000000000000000001267577262200216005ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Command/InitCommandTest.php000066400000000000000000000033501267577262200253540ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Command; use Composer\Command\InitCommand; use Composer\TestCase; class InitCommandTest extends TestCase { public function testParseValidAuthorString() { $command = new InitCommand; $author = $command->parseAuthorString('John Smith '); $this->assertEquals('John Smith', $author['name']); $this->assertEquals('john@example.com', $author['email']); } public function testParseValidUtf8AuthorString() { $command = new InitCommand; $author = $command->parseAuthorString('Matti Meikäläinen '); $this->assertEquals('Matti Meikäläinen', $author['name']); $this->assertEquals('matti@example.com', $author['email']); } public function testParseNumericAuthorString() { $command = new InitCommand; $author = $command->parseAuthorString('h4x0r '); $this->assertEquals('h4x0r', $author['name']); $this->assertEquals('h4x@example.com', $author['email']); } public function testParseEmptyAuthorString() { $command = new InitCommand; $this->setExpectedException('InvalidArgumentException'); $command->parseAuthorString(''); } public function testParseAuthorStringWithInvalidEmail() { $command = new InitCommand; $this->setExpectedException('InvalidArgumentException'); $command->parseAuthorString('John Smith '); } } composer-1.0.0-beta2/tests/Composer/Test/ComposerTest.php000066400000000000000000000036611267577262200233700ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test; use Composer\Composer; use Composer\TestCase; class ComposerTest extends TestCase { public function testSetGetPackage() { $composer = new Composer(); $package = $this->getMock('Composer\Package\RootPackageInterface'); $composer->setPackage($package); $this->assertSame($package, $composer->getPackage()); } public function testSetGetLocker() { $composer = new Composer(); $locker = $this->getMockBuilder('Composer\Package\Locker')->disableOriginalConstructor()->getMock(); $composer->setLocker($locker); $this->assertSame($locker, $composer->getLocker()); } public function testSetGetRepositoryManager() { $composer = new Composer(); $manager = $this->getMockBuilder('Composer\Repository\RepositoryManager')->disableOriginalConstructor()->getMock(); $composer->setRepositoryManager($manager); $this->assertSame($manager, $composer->getRepositoryManager()); } public function testSetGetDownloadManager() { $composer = new Composer(); $io = $this->getMock('Composer\IO\IOInterface'); $manager = $this->getMock('Composer\Downloader\DownloadManager', array(), array($io)); $composer->setDownloadManager($manager); $this->assertSame($manager, $composer->getDownloadManager()); } public function testSetGetInstallationManager() { $composer = new Composer(); $manager = $this->getMock('Composer\Installer\InstallationManager'); $composer->setInstallationManager($manager); $this->assertSame($manager, $composer->getInstallationManager()); } } composer-1.0.0-beta2/tests/Composer/Test/Config/000077500000000000000000000000001267577262200214275ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/000077500000000000000000000000001267577262200232405ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/addLink/000077500000000000000000000000001267577262200246065ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/addLink/conflict-from-empty.json000066400000000000000000000001641267577262200314000ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "conflict": { "my-vend/my-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/addLink/conflict-from-oneOfEverything.json000066400000000000000000000007641267577262200333630ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*", "my-vend/my-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/addLink/conflict-from-twoOfEverything.json000066400000000000000000000014411267577262200334040ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*", "my-vend/my-yet-another-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*", "my-vend/my-yet-another-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*", "my-vend/my-yet-another-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*", "my-vend/my-yet-another-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*", "other-vend/yet-another-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*", "my-vend/my-yet-another-old-app": "1.*", "my-vend/my-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/addLink/provide-from-empty.json000066400000000000000000000001711267577262200312450ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "provide": { "my-vend/my-lib-interface": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/addLink/provide-from-oneOfEverything.json000066400000000000000000000007721267577262200332310ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*", "my-vend/my-lib-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/addLink/provide-from-twoOfEverything.json000066400000000000000000000014471267577262200332610ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*", "my-vend/my-yet-another-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*", "my-vend/my-yet-another-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*", "my-vend/my-yet-another-interface": "1.*", "my-vend/my-lib-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*", "my-vend/my-yet-another-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*", "other-vend/yet-another-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*", "my-vend/my-yet-another-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/addLink/replace-from-empty.json000066400000000000000000000001621267577262200312100ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "replace": { "my-vend/other-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/addLink/replace-from-oneOfEverything.json000066400000000000000000000007631267577262200331740ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*", "my-vend/other-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/addLink/replace-from-twoOfEverything.json000066400000000000000000000014401267577262200332150ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*", "my-vend/my-yet-another-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*", "my-vend/my-yet-another-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*", "my-vend/my-yet-another-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*", "my-vend/my-yet-another-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*", "other-vend/yet-another-app": "1.*", "my-vend/other-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*", "my-vend/my-yet-another-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/addLink/require-dev-from-empty.json000066400000000000000000000001711267577262200320250ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require-dev": { "my-vend/my-lib-tests": "1.*" } } require-dev-from-oneOfEverything.json000066400000000000000000000007661267577262200337350ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/addLink{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*", "my-vend/my-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*" } } require-dev-from-twoOfEverything.json000066400000000000000000000014431267577262200337560ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/addLink{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*", "my-vend/my-yet-another-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*", "my-vend/my-yet-another-lib-tests": "1.*", "my-vend/my-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*", "my-vend/my-yet-another-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*", "my-vend/my-yet-another-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*", "other-vend/yet-another-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*", "my-vend/my-yet-another-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/addLink/require-from-empty.json000066400000000000000000000001571267577262200312550ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-lib": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/addLink/require-from-oneOfEverything.json000066400000000000000000000007601267577262200332320ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*", "my-vend/my-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/addLink/require-from-twoOfEverything.json000066400000000000000000000014351267577262200332620ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*", "my-vend/my-yet-another-lib": "1.*", "my-vend/my-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*", "my-vend/my-yet-another-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*", "my-vend/my-yet-another-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*", "my-vend/my-yet-another-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*", "other-vend/yet-another-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*", "my-vend/my-yet-another-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/addLink/suggest-from-empty.json000066400000000000000000000001761267577262200312630ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "suggest": { "my-vend/my-optional-extension": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/addLink/suggest-from-oneOfEverything.json000066400000000000000000000007771267577262200332470ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*", "my-vend/my-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/addLink/suggest-from-twoOfEverything.json000066400000000000000000000014541267577262200332700ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*", "my-vend/my-yet-another-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*", "my-vend/my-yet-another-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*", "my-vend/my-yet-another-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*", "my-vend/my-yet-another-optional-extension": "1.*", "my-vend/my-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*", "other-vend/yet-another-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*", "my-vend/my-yet-another-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/composer-empty.json000066400000000000000000000000671267577262200271210ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT" } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/composer-one-of-everything.json000066400000000000000000000007171267577262200313320ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/composer-repositories.json000066400000000000000000000001241267577262200305040ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "repositories": { } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/composer-two-of-everything.json000066400000000000000000000013741267577262200313620ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*", "my-vend/my-yet-another-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*", "my-vend/my-yet-another-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*", "my-vend/my-yet-another-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*", "my-vend/my-yet-another-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*", "other-vend/yet-another-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*", "my-vend/my-yet-another-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/config/000077500000000000000000000000001267577262200245055ustar00rootroot00000000000000config-with-exampletld-repository-and-options.json000066400000000000000000000005301267577262200363400ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/config{ "name": "my-vend/my-app", "license": "MIT", "repositories": { "example_tld": { "type": "composer", "url": "https://example.tld", "options": { "ssl": { "local_cert": "/home/composer/.ssl/composer.pem" } } } } } config-with-exampletld-repository.json000066400000000000000000000002631267577262200341120ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/config{ "name": "my-vend/my-app", "license": "MIT", "repositories": { "example_tld": { "type": "git", "url": "example.tld" } } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/config/config-with-packagist-false.json000066400000000000000000000001571267577262200326550ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "repositories": { "packagist": false } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/000077500000000000000000000000001267577262200253535ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/conflict-to-empty-after.json000066400000000000000000000001201267577262200327130ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "conflict": { } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/conflict-to-empty.json000066400000000000000000000001641267577262200316240ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "conflict": { "my-vend/my-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/conflict-to-oneOfEverything.json000066400000000000000000000007641267577262200336070ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*", "my-vend/my-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/conflict-to-twoOfEverything.json000066400000000000000000000014411267577262200336300ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*", "my-vend/my-yet-another-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*", "my-vend/my-yet-another-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*", "my-vend/my-yet-another-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*", "my-vend/my-yet-another-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*", "other-vend/yet-another-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*", "my-vend/my-yet-another-old-app": "1.*", "my-vend/my-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/provide-to-empty-after.json000066400000000000000000000001171267577262200325700ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "provide": { } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/provide-to-empty.json000066400000000000000000000001711267577262200314710ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "provide": { "my-vend/my-lib-interface": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/provide-to-oneOfEverything.json000066400000000000000000000007721267577262200334550ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*", "my-vend/my-lib-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/provide-to-twoOfEverything.json000066400000000000000000000014471267577262200335050ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*", "my-vend/my-yet-another-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*", "my-vend/my-yet-another-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*", "my-vend/my-yet-another-interface": "1.*", "my-vend/my-lib-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*", "my-vend/my-yet-another-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*", "other-vend/yet-another-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*", "my-vend/my-yet-another-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/replace-to-empty-after.json000066400000000000000000000001171267577262200325330ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "replace": { } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/replace-to-empty.json000066400000000000000000000001621267577262200314340ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "replace": { "my-vend/other-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/replace-to-oneOfEverything.json000066400000000000000000000007631267577262200334200ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*", "my-vend/other-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/replace-to-twoOfEverything.json000066400000000000000000000014401267577262200334410ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*", "my-vend/my-yet-another-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*", "my-vend/my-yet-another-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*", "my-vend/my-yet-another-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*", "my-vend/my-yet-another-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*", "other-vend/yet-another-app": "1.*", "my-vend/other-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*", "my-vend/my-yet-another-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/require-dev-to-empty-after.json000066400000000000000000000001231267577262200333450ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require-dev": { } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/require-dev-to-empty.json000066400000000000000000000001711267577262200322510ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require-dev": { "my-vend/my-lib-tests": "1.*" } } require-dev-to-oneOfEverything.json000066400000000000000000000007661267577262200341610ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*", "my-vend/my-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*" } } require-dev-to-twoOfEverything.json000066400000000000000000000014431267577262200342020ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*", "my-vend/my-yet-another-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*", "my-vend/my-yet-another-lib-tests": "1.*", "my-vend/my-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*", "my-vend/my-yet-another-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*", "my-vend/my-yet-another-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*", "other-vend/yet-another-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*", "my-vend/my-yet-another-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/require-to-empty-after.json000066400000000000000000000001171267577262200325740ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/require-to-empty.json000066400000000000000000000001571267577262200315010ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-lib": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/require-to-oneOfEverything.json000066400000000000000000000007601267577262200334560ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*", "my-vend/my-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/require-to-twoOfEverything.json000066400000000000000000000014351267577262200335060ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*", "my-vend/my-yet-another-lib": "1.*", "my-vend/my-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*", "my-vend/my-yet-another-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*", "my-vend/my-yet-another-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*", "my-vend/my-yet-another-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*", "other-vend/yet-another-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*", "my-vend/my-yet-another-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/suggest-to-empty-after.json000066400000000000000000000001171267577262200326010ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "suggest": { } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/suggest-to-empty.json000066400000000000000000000001761267577262200315070ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "suggest": { "my-vend/my-optional-extension": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/suggest-to-oneOfEverything.json000066400000000000000000000007771267577262200334730ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*", "my-vend/my-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/Fixtures/removeLink/suggest-to-twoOfEverything.json000066400000000000000000000014541267577262200335140ustar00rootroot00000000000000{ "name": "my-vend/my-app", "license": "MIT", "require": { "my-vend/my-other-lib": "1.*", "my-vend/my-yet-another-lib": "1.*" }, "require-dev": { "my-vend/my-other-lib-tests": "1.*", "my-vend/my-yet-another-lib-tests": "1.*" }, "provide": { "my-vend/my-other-interface": "1.*", "my-vend/my-yet-another-interface": "1.*" }, "suggest": { "my-vend/my-other-optional-extension": "1.*", "my-vend/my-yet-another-optional-extension": "1.*", "my-vend/my-optional-extension": "1.*" }, "replace": { "other-vend/other-app": "1.*", "other-vend/yet-another-app": "1.*" }, "conflict": { "my-vend/my-other-old-app": "1.*", "my-vend/my-yet-another-old-app": "1.*" } } composer-1.0.0-beta2/tests/Composer/Test/Config/JsonConfigSourceTest.php000066400000000000000000000251231267577262200262230ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Json; use Composer\Config\JsonConfigSource; use Composer\Json\JsonFile; use Composer\TestCase; use Composer\Util\Filesystem; class JsonConfigSourceTest extends TestCase { /** @var Filesystem */ private $fs; /** @var string */ private $workingDir; protected function fixturePath($name) { return __DIR__.'/Fixtures/'.$name; } protected function setUp() { $this->fs = new Filesystem; $this->workingDir = $this->getUniqueTmpDirectory(); } protected function tearDown() { if (is_dir($this->workingDir)) { $this->fs->removeDirectory($this->workingDir); } } public function testAddRepository() { $config = $this->workingDir.'/composer.json'; copy($this->fixturePath('composer-repositories.json'), $config); $jsonConfigSource = new JsonConfigSource(new JsonFile($config)); $jsonConfigSource->addRepository('example_tld', array('type' => 'git', 'url' => 'example.tld')); $this->assertFileEquals($this->fixturePath('config/config-with-exampletld-repository.json'), $config); } public function testAddRepositoryWithOptions() { $config = $this->workingDir.'/composer.json'; copy($this->fixturePath('composer-repositories.json'), $config); $jsonConfigSource = new JsonConfigSource(new JsonFile($config)); $jsonConfigSource->addRepository('example_tld', array( 'type' => 'composer', 'url' => 'https://example.tld', 'options' => array( 'ssl' => array( 'local_cert' => '/home/composer/.ssl/composer.pem', ), ), )); $this->assertFileEquals($this->fixturePath('config/config-with-exampletld-repository-and-options.json'), $config); } public function testRemoveRepository() { $config = $this->workingDir.'/composer.json'; copy($this->fixturePath('config/config-with-exampletld-repository.json'), $config); $jsonConfigSource = new JsonConfigSource(new JsonFile($config)); $jsonConfigSource->removeRepository('example_tld'); $this->assertFileEquals($this->fixturePath('composer-repositories.json'), $config); } public function testAddPackagistRepositoryWithFalseValue() { $config = $this->workingDir.'/composer.json'; copy($this->fixturePath('composer-repositories.json'), $config); $jsonConfigSource = new JsonConfigSource(new JsonFile($config)); $jsonConfigSource->addRepository('packagist', false); $this->assertFileEquals($this->fixturePath('config/config-with-packagist-false.json'), $config); } public function testRemovePackagist() { $config = $this->workingDir.'/composer.json'; copy($this->fixturePath('config/config-with-packagist-false.json'), $config); $jsonConfigSource = new JsonConfigSource(new JsonFile($config)); $jsonConfigSource->removeRepository('packagist'); $this->assertFileEquals($this->fixturePath('composer-repositories.json'), $config); } /** * Test addLink() * * @param string $sourceFile Source file * @param string $type Type (require, require-dev, provide, suggest, replace, conflict) * @param string $name Name * @param string $value Value * @param string $compareAgainst File to compare against after making changes * * @dataProvider provideAddLinkData */ public function testAddLink($sourceFile, $type, $name, $value, $compareAgainst) { $composerJson = $this->workingDir.'/composer.json'; copy($sourceFile, $composerJson); $jsonConfigSource = new JsonConfigSource(new JsonFile($composerJson)); $jsonConfigSource->addLink($type, $name, $value); $this->assertFileEquals($compareAgainst, $composerJson); } /** * Test removeLink() * * @param string $sourceFile Source file * @param string $type Type (require, require-dev, provide, suggest, replace, conflict) * @param string $name Name * @param string $compareAgainst File to compare against after making changes * * @dataProvider provideRemoveLinkData */ public function testRemoveLink($sourceFile, $type, $name, $compareAgainst) { $composerJson = $this->workingDir.'/composer.json'; copy($sourceFile, $composerJson); $jsonConfigSource = new JsonConfigSource(new JsonFile($composerJson)); $jsonConfigSource->removeLink($type, $name); $this->assertFileEquals($compareAgainst, $composerJson); } protected function addLinkDataArguments($type, $name, $value, $fixtureBasename, $before) { return array( $before, $type, $name, $value, $this->fixturePath('addLink/'.$fixtureBasename.'.json'), ); } /** * Provide data for testAddLink * * @return array */ public function provideAddLinkData() { $empty = $this->fixturePath('composer-empty.json'); $oneOfEverything = $this->fixturePath('composer-one-of-everything.json'); $twoOfEverything = $this->fixturePath('composer-two-of-everything.json'); return array( $this->addLinkDataArguments('require', 'my-vend/my-lib', '1.*', 'require-from-empty', $empty), $this->addLinkDataArguments('require', 'my-vend/my-lib', '1.*', 'require-from-oneOfEverything', $oneOfEverything), $this->addLinkDataArguments('require', 'my-vend/my-lib', '1.*', 'require-from-twoOfEverything', $twoOfEverything), $this->addLinkDataArguments('require-dev', 'my-vend/my-lib-tests', '1.*', 'require-dev-from-empty', $empty), $this->addLinkDataArguments('require-dev', 'my-vend/my-lib-tests', '1.*', 'require-dev-from-oneOfEverything', $oneOfEverything), $this->addLinkDataArguments('require-dev', 'my-vend/my-lib-tests', '1.*', 'require-dev-from-twoOfEverything', $twoOfEverything), $this->addLinkDataArguments('provide', 'my-vend/my-lib-interface', '1.*', 'provide-from-empty', $empty), $this->addLinkDataArguments('provide', 'my-vend/my-lib-interface', '1.*', 'provide-from-oneOfEverything', $oneOfEverything), $this->addLinkDataArguments('provide', 'my-vend/my-lib-interface', '1.*', 'provide-from-twoOfEverything', $twoOfEverything), $this->addLinkDataArguments('suggest', 'my-vend/my-optional-extension', '1.*', 'suggest-from-empty', $empty), $this->addLinkDataArguments('suggest', 'my-vend/my-optional-extension', '1.*', 'suggest-from-oneOfEverything', $oneOfEverything), $this->addLinkDataArguments('suggest', 'my-vend/my-optional-extension', '1.*', 'suggest-from-twoOfEverything', $twoOfEverything), $this->addLinkDataArguments('replace', 'my-vend/other-app', '1.*', 'replace-from-empty', $empty), $this->addLinkDataArguments('replace', 'my-vend/other-app', '1.*', 'replace-from-oneOfEverything', $oneOfEverything), $this->addLinkDataArguments('replace', 'my-vend/other-app', '1.*', 'replace-from-twoOfEverything', $twoOfEverything), $this->addLinkDataArguments('conflict', 'my-vend/my-old-app', '1.*', 'conflict-from-empty', $empty), $this->addLinkDataArguments('conflict', 'my-vend/my-old-app', '1.*', 'conflict-from-oneOfEverything', $oneOfEverything), $this->addLinkDataArguments('conflict', 'my-vend/my-old-app', '1.*', 'conflict-from-twoOfEverything', $twoOfEverything), ); } protected function removeLinkDataArguments($type, $name, $fixtureBasename, $after = null) { return array( $this->fixturePath('removeLink/'.$fixtureBasename.'.json'), $type, $name, $after ?: $this->fixturePath('removeLink/'.$fixtureBasename.'-after.json'), ); } /** * Provide data for testRemoveLink * * @return array */ public function provideRemoveLinkData() { $oneOfEverything = $this->fixturePath('composer-one-of-everything.json'); $twoOfEverything = $this->fixturePath('composer-two-of-everything.json'); return array( $this->removeLinkDataArguments('require', 'my-vend/my-lib', 'require-to-empty'), $this->removeLinkDataArguments('require', 'my-vend/my-lib', 'require-to-oneOfEverything', $oneOfEverything), $this->removeLinkDataArguments('require', 'my-vend/my-lib', 'require-to-twoOfEverything', $twoOfEverything), $this->removeLinkDataArguments('require-dev', 'my-vend/my-lib-tests', 'require-dev-to-empty'), $this->removeLinkDataArguments('require-dev', 'my-vend/my-lib-tests', 'require-dev-to-oneOfEverything', $oneOfEverything), $this->removeLinkDataArguments('require-dev', 'my-vend/my-lib-tests', 'require-dev-to-twoOfEverything', $twoOfEverything), $this->removeLinkDataArguments('provide', 'my-vend/my-lib-interface', 'provide-to-empty'), $this->removeLinkDataArguments('provide', 'my-vend/my-lib-interface', 'provide-to-oneOfEverything', $oneOfEverything), $this->removeLinkDataArguments('provide', 'my-vend/my-lib-interface', 'provide-to-twoOfEverything', $twoOfEverything), $this->removeLinkDataArguments('suggest', 'my-vend/my-optional-extension', 'suggest-to-empty'), $this->removeLinkDataArguments('suggest', 'my-vend/my-optional-extension', 'suggest-to-oneOfEverything', $oneOfEverything), $this->removeLinkDataArguments('suggest', 'my-vend/my-optional-extension', 'suggest-to-twoOfEverything', $twoOfEverything), $this->removeLinkDataArguments('replace', 'my-vend/other-app', 'replace-to-empty'), $this->removeLinkDataArguments('replace', 'my-vend/other-app', 'replace-to-oneOfEverything', $oneOfEverything), $this->removeLinkDataArguments('replace', 'my-vend/other-app', 'replace-to-twoOfEverything', $twoOfEverything), $this->removeLinkDataArguments('conflict', 'my-vend/my-old-app', 'conflict-to-empty'), $this->removeLinkDataArguments('conflict', 'my-vend/my-old-app', 'conflict-to-oneOfEverything', $oneOfEverything), $this->removeLinkDataArguments('conflict', 'my-vend/my-old-app', 'conflict-to-twoOfEverything', $twoOfEverything), ); } } composer-1.0.0-beta2/tests/Composer/Test/ConfigTest.php000066400000000000000000000207451267577262200230100ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test; use Composer\Config; class ConfigTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider dataAddPackagistRepository */ public function testAddPackagistRepository($expected, $localConfig, $systemConfig = null) { $config = new Config(false); if ($systemConfig) { $config->merge(array('repositories' => $systemConfig)); } $config->merge(array('repositories' => $localConfig)); $this->assertEquals($expected, $config->getRepositories()); } public function dataAddPackagistRepository() { $data = array(); $data['local config inherits system defaults'] = array( array( 'packagist' => array('type' => 'composer', 'url' => 'https?://packagist.org', 'allow_ssl_downgrade' => true), ), array(), ); $data['local config can disable system config by name'] = array( array(), array( array('packagist' => false), ), ); $data['local config adds above defaults'] = array( array( 1 => array('type' => 'vcs', 'url' => 'git://github.com/composer/composer.git'), 0 => array('type' => 'pear', 'url' => 'http://pear.composer.org'), 'packagist' => array('type' => 'composer', 'url' => 'https?://packagist.org', 'allow_ssl_downgrade' => true), ), array( array('type' => 'vcs', 'url' => 'git://github.com/composer/composer.git'), array('type' => 'pear', 'url' => 'http://pear.composer.org'), ), ); $data['system config adds above core defaults'] = array( array( 'example.com' => array('type' => 'composer', 'url' => 'http://example.com'), 'packagist' => array('type' => 'composer', 'url' => 'https?://packagist.org', 'allow_ssl_downgrade' => true), ), array(), array( 'example.com' => array('type' => 'composer', 'url' => 'http://example.com'), ), ); $data['local config can disable repos by name and re-add them anonymously to bring them above system config'] = array( array( 0 => array('type' => 'composer', 'url' => 'http://packagist.org'), 'example.com' => array('type' => 'composer', 'url' => 'http://example.com'), ), array( array('packagist' => false), array('type' => 'composer', 'url' => 'http://packagist.org'), ), array( 'example.com' => array('type' => 'composer', 'url' => 'http://example.com'), ), ); $data['local config can override by name to bring a repo above system config'] = array( array( 'packagist' => array('type' => 'composer', 'url' => 'http://packagistnew.org'), 'example.com' => array('type' => 'composer', 'url' => 'http://example.com'), ), array( 'packagist' => array('type' => 'composer', 'url' => 'http://packagistnew.org'), ), array( 'example.com' => array('type' => 'composer', 'url' => 'http://example.com'), ), ); $data['incorrect local config does not cause ErrorException'] = array( array( 'packagist' => array('type' => 'composer', 'url' => 'https?://packagist.org', 'allow_ssl_downgrade' => true), 'type' => 'vcs', 'url' => 'http://example.com', ), array( 'type' => 'vcs', 'url' => 'http://example.com', ), ); return $data; } public function testPreferredInstallAsString() { $config = new Config(false); $config->merge(array('config' => array('preferred-install' => 'source'))); $config->merge(array('config' => array('preferred-install' => 'dist'))); $this->assertEquals('dist', $config->get('preferred-install')); } public function testMergePreferredInstall() { $config = new Config(false); $config->merge(array('config' => array('preferred-install' => 'dist'))); $config->merge(array('config' => array('preferred-install' => array('foo/*' => 'source')))); // This assertion needs to make sure full wildcard preferences are placed last // Handled by composer because we convert string preferences for BC, all other // care for ordering and collision prevention is up to the user $this->assertEquals(array('foo/*' => 'source', '*' => 'dist'), $config->get('preferred-install')); } public function testMergeGithubOauth() { $config = new Config(false); $config->merge(array('config' => array('github-oauth' => array('foo' => 'bar')))); $config->merge(array('config' => array('github-oauth' => array('bar' => 'baz')))); $this->assertEquals(array('foo' => 'bar', 'bar' => 'baz'), $config->get('github-oauth')); } public function testVarReplacement() { $config = new Config(false); $config->merge(array('config' => array('a' => 'b', 'c' => '{$a}'))); $config->merge(array('config' => array('bin-dir' => '$HOME', 'cache-dir' => '~/foo/'))); $home = rtrim(getenv('HOME') ?: getenv('USERPROFILE'), '\\/'); $this->assertEquals('b', $config->get('c')); $this->assertEquals($home.'/', $config->get('bin-dir')); $this->assertEquals($home.'/foo', $config->get('cache-dir')); } public function testRealpathReplacement() { $config = new Config(false, '/foo/bar'); $config->merge(array('config' => array( 'bin-dir' => '$HOME/foo', 'cache-dir' => '/baz/', 'vendor-dir' => 'vendor', ))); $home = rtrim(getenv('HOME') ?: getenv('USERPROFILE'), '\\/'); $this->assertEquals('/foo/bar/vendor', $config->get('vendor-dir')); $this->assertEquals($home.'/foo', $config->get('bin-dir')); $this->assertEquals('/baz', $config->get('cache-dir')); } public function testStreamWrapperDirs() { $config = new Config(false, '/foo/bar'); $config->merge(array('config' => array( 'cache-dir' => 's3://baz/', ))); $this->assertEquals('s3://baz', $config->get('cache-dir')); } public function testFetchingRelativePaths() { $config = new Config(false, '/foo/bar'); $config->merge(array('config' => array( 'bin-dir' => '{$vendor-dir}/foo', 'vendor-dir' => 'vendor', ))); $this->assertEquals('/foo/bar/vendor', $config->get('vendor-dir')); $this->assertEquals('/foo/bar/vendor/foo', $config->get('bin-dir')); $this->assertEquals('vendor', $config->get('vendor-dir', Config::RELATIVE_PATHS)); $this->assertEquals('vendor/foo', $config->get('bin-dir', Config::RELATIVE_PATHS)); } public function testOverrideGithubProtocols() { $config = new Config(false); $config->merge(array('config' => array('github-protocols' => array('https', 'ssh')))); $config->merge(array('config' => array('github-protocols' => array('https')))); $this->assertEquals(array('https'), $config->get('github-protocols')); } public function testGitDisabledByDefaultInGithubProtocols() { $config = new Config(false); $config->merge(array('config' => array('github-protocols' => array('https', 'git')))); $this->assertEquals(array('https'), $config->get('github-protocols')); $config->merge(array('config' => array('secure-http' => false))); $this->assertEquals(array('https', 'git'), $config->get('github-protocols')); } /** * @group TLS */ public function testDisableTlsCanBeOverridden() { $config = new Config; $config->merge( array('config' => array('disable-tls' => 'false')) ); $this->assertFalse($config->get('disable-tls')); $config->merge( array('config' => array('disable-tls' => 'true')) ); $this->assertTrue($config->get('disable-tls')); } } composer-1.0.0-beta2/tests/Composer/Test/Console/000077500000000000000000000000001267577262200216245ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Console/HtmlOutputFormatterTest.php000066400000000000000000000017431267577262200272130ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer; use Composer\Console\HtmlOutputFormatter; use Symfony\Component\Console\Formatter\OutputFormatterStyle; class HtmlOutputFormatterTest extends \PHPUnit_Framework_TestCase { public function testFormatting() { $formatter = new HtmlOutputFormatter(array( 'warning' => new OutputFormatterStyle('black', 'yellow'), )); return $this->assertEquals( 'text green yellow black w/ yello bg', $formatter->format('text green yellow black w/ yello bg') ); } } composer-1.0.0-beta2/tests/Composer/Test/DefaultConfigTest.php000066400000000000000000000010671267577262200243110ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test; use Composer\Config; class DefaultConfigTest extends \PHPUnit_Framework_TestCase { /** * @group TLS */ public function testDefaultValuesAreAsExpected() { $config = new Config; $this->assertFalse($config->get('disable-tls')); } } composer-1.0.0-beta2/tests/Composer/Test/DependencyResolver/000077500000000000000000000000001267577262200240225ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/DependencyResolver/DefaultPolicyTest.php000066400000000000000000000234001267577262200301360ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\DependencyResolver; use Composer\Repository\ArrayRepository; use Composer\Repository\RepositoryInterface; use Composer\DependencyResolver\DefaultPolicy; use Composer\DependencyResolver\Pool; use Composer\Package\Link; use Composer\Package\AliasPackage; use Composer\Semver\Constraint\Constraint; use Composer\TestCase; class DefaultPolicyTest extends TestCase { protected $pool; protected $repo; protected $repoInstalled; protected $request; protected $policy; public function setUp() { $this->pool = new Pool('dev'); $this->repo = new ArrayRepository; $this->repoInstalled = new ArrayRepository; $this->policy = new DefaultPolicy; } public function testSelectSingle() { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->pool->addRepository($this->repo); $literals = array($packageA->getId()); $expected = array($packageA->getId()); $selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals); $this->assertEquals($expected, $selected); } public function testSelectNewest() { $this->repo->addPackage($packageA1 = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageA2 = $this->getPackage('A', '2.0')); $this->pool->addRepository($this->repo); $literals = array($packageA1->getId(), $packageA2->getId()); $expected = array($packageA2->getId()); $selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals); $this->assertEquals($expected, $selected); } public function testSelectNewestPicksLatest() { $this->repo->addPackage($packageA1 = $this->getPackage('A', '1.0.0')); $this->repo->addPackage($packageA2 = $this->getPackage('A', '1.0.1-alpha')); $this->pool->addRepository($this->repo); $literals = array($packageA1->getId(), $packageA2->getId()); $expected = array($packageA2->getId()); $selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals); $this->assertEquals($expected, $selected); } public function testSelectNewestPicksLatestStableWithPreferStable() { $this->repo->addPackage($packageA1 = $this->getPackage('A', '1.0.0')); $this->repo->addPackage($packageA2 = $this->getPackage('A', '1.0.1-alpha')); $this->pool->addRepository($this->repo); $literals = array($packageA1->getId(), $packageA2->getId()); $expected = array($packageA1->getId()); $policy = new DefaultPolicy(true); $selected = $policy->selectPreferredPackages($this->pool, array(), $literals); $this->assertEquals($expected, $selected); } public function testSelectNewestWithDevPicksNonDev() { $this->repo->addPackage($packageA1 = $this->getPackage('A', 'dev-foo')); $this->repo->addPackage($packageA2 = $this->getPackage('A', '1.0.0')); $this->pool->addRepository($this->repo); $literals = array($packageA1->getId(), $packageA2->getId()); $expected = array($packageA2->getId()); $selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals); $this->assertEquals($expected, $selected); } public function testSelectNewestOverInstalled() { $this->repo->addPackage($packageA = $this->getPackage('A', '2.0')); $this->repoInstalled->addPackage($packageAInstalled = $this->getPackage('A', '1.0')); $this->pool->addRepository($this->repoInstalled); $this->pool->addRepository($this->repo); $literals = array($packageA->getId(), $packageAInstalled->getId()); $expected = array($packageA->getId()); $selected = $this->policy->selectPreferredPackages($this->pool, $this->mapFromRepo($this->repoInstalled), $literals); $this->assertEquals($expected, $selected); } public function testSelectFirstRepo() { $this->repoImportant = new ArrayRepository; $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repoImportant->addPackage($packageAImportant = $this->getPackage('A', '1.0')); $this->pool->addRepository($this->repoInstalled); $this->pool->addRepository($this->repoImportant); $this->pool->addRepository($this->repo); $literals = array($packageA->getId(), $packageAImportant->getId()); $expected = array($packageAImportant->getId()); $selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals); $this->assertEquals($expected, $selected); } public function testSelectLocalReposFirst() { $this->repoImportant = new ArrayRepository; $this->repo->addPackage($packageA = $this->getPackage('A', 'dev-master')); $this->repo->addPackage($packageAAlias = new AliasPackage($packageA, '2.1.9999999.9999999-dev', '2.1.x-dev')); $this->repoImportant->addPackage($packageAImportant = $this->getPackage('A', 'dev-feature-a')); $this->repoImportant->addPackage($packageAAliasImportant = new AliasPackage($packageAImportant, '2.1.9999999.9999999-dev', '2.1.x-dev')); $this->repoImportant->addPackage($packageA2Important = $this->getPackage('A', 'dev-master')); $this->repoImportant->addPackage($packageA2AliasImportant = new AliasPackage($packageA2Important, '2.1.9999999.9999999-dev', '2.1.x-dev')); $packageAAliasImportant->setRootPackageAlias(true); $this->pool->addRepository($this->repoInstalled); $this->pool->addRepository($this->repoImportant); $this->pool->addRepository($this->repo); $packages = $this->pool->whatProvides('a', new Constraint('=', '2.1.9999999.9999999-dev')); $literals = array(); foreach ($packages as $package) { $literals[] = $package->getId(); } $expected = array($packageAAliasImportant->getId()); $selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals); $this->assertEquals($expected, $selected); } public function testSelectAllProviders() { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '2.0')); $packageA->setProvides(array(new Link('A', 'X', new Constraint('==', '1.0'), 'provides'))); $packageB->setProvides(array(new Link('B', 'X', new Constraint('==', '1.0'), 'provides'))); $this->pool->addRepository($this->repo); $literals = array($packageA->getId(), $packageB->getId()); $expected = $literals; $selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals); $this->assertEquals($expected, $selected); } public function testPreferNonReplacingFromSameRepo() { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '2.0')); $packageB->setReplaces(array(new Link('B', 'A', new Constraint('==', '1.0'), 'replaces'))); $this->pool->addRepository($this->repo); $literals = array($packageA->getId(), $packageB->getId()); $expected = $literals; $selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals); $this->assertEquals($expected, $selected); } public function testPreferReplacingPackageFromSameVendor() { // test with default order $this->repo->addPackage($packageB = $this->getPackage('vendor-b/replacer', '1.0')); $this->repo->addPackage($packageA = $this->getPackage('vendor-a/replacer', '1.0')); $packageA->setReplaces(array(new Link('vendor-a/replacer', 'vendor-a/package', new Constraint('==', '1.0'), 'replaces'))); $packageB->setReplaces(array(new Link('vendor-b/replacer', 'vendor-a/package', new Constraint('==', '1.0'), 'replaces'))); $this->pool->addRepository($this->repo); $literals = array($packageA->getId(), $packageB->getId()); $expected = $literals; $selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals, 'vendor-a/package'); $this->assertEquals($expected, $selected); // test with reversed order in repo $repo = new ArrayRepository; $repo->addPackage($packageA = clone $packageA); $repo->addPackage($packageB = clone $packageB); $pool = new Pool('dev'); $pool->addRepository($this->repo); $literals = array($packageA->getId(), $packageB->getId()); $expected = $literals; $selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals, 'vendor-a/package'); $this->assertEquals($expected, $selected); } protected function mapFromRepo(RepositoryInterface $repo) { $map = array(); foreach ($repo->getPackages() as $package) { $map[$package->getId()] = true; } return $map; } public function testSelectLowest() { $policy = new DefaultPolicy(false, true); $this->repo->addPackage($packageA1 = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageA2 = $this->getPackage('A', '2.0')); $this->pool->addRepository($this->repo); $literals = array($packageA1->getId(), $packageA2->getId()); $expected = array($packageA1->getId()); $selected = $policy->selectPreferredPackages($this->pool, array(), $literals); $this->assertEquals($expected, $selected); } } composer-1.0.0-beta2/tests/Composer/Test/DependencyResolver/PoolTest.php000066400000000000000000000102301267577262200263000ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\DependencyResolver; use Composer\DependencyResolver\Pool; use Composer\Repository\ArrayRepository; use Composer\Package\BasePackage; use Composer\TestCase; class PoolTest extends TestCase { public function testPool() { $pool = new Pool; $repo = new ArrayRepository; $package = $this->getPackage('foo', '1'); $repo->addPackage($package); $pool->addRepository($repo); $this->assertEquals(array($package), $pool->whatProvides('foo')); $this->assertEquals(array($package), $pool->whatProvides('foo')); } public function testPoolIgnoresIrrelevantPackages() { $pool = new Pool('stable', array('bar' => BasePackage::STABILITY_BETA)); $repo = new ArrayRepository; $repo->addPackage($package = $this->getPackage('bar', '1')); $repo->addPackage($betaPackage = $this->getPackage('bar', '1-beta')); $repo->addPackage($alphaPackage = $this->getPackage('bar', '1-alpha')); $repo->addPackage($package2 = $this->getPackage('foo', '1')); $repo->addPackage($rcPackage2 = $this->getPackage('foo', '1rc')); $pool->addRepository($repo); $this->assertEquals(array($package, $betaPackage), $pool->whatProvides('bar')); $this->assertEquals(array($package2), $pool->whatProvides('foo')); } /** * @expectedException \RuntimeException */ public function testGetPriorityForNotRegisteredRepository() { $pool = new Pool; $repository = new ArrayRepository; $pool->getPriority($repository); } public function testGetPriorityWhenRepositoryIsRegistered() { $pool = new Pool; $firstRepository = new ArrayRepository; $pool->addRepository($firstRepository); $secondRepository = new ArrayRepository; $pool->addRepository($secondRepository); $firstPriority = $pool->getPriority($firstRepository); $secondPriority = $pool->getPriority($secondRepository); $this->assertEquals(0, $firstPriority); $this->assertEquals(-1, $secondPriority); } public function testWhatProvidesSamePackageForDifferentRepositories() { $pool = new Pool; $firstRepository = new ArrayRepository; $secondRepository = new ArrayRepository; $firstPackage = $this->getPackage('foo', '1'); $secondPackage = $this->getPackage('foo', '1'); $thirdPackage = $this->getPackage('foo', '2'); $firstRepository->addPackage($firstPackage); $secondRepository->addPackage($secondPackage); $secondRepository->addPackage($thirdPackage); $pool->addRepository($firstRepository); $pool->addRepository($secondRepository); $this->assertEquals(array($firstPackage, $secondPackage, $thirdPackage), $pool->whatProvides('foo')); } public function testWhatProvidesPackageWithConstraint() { $pool = new Pool; $repository = new ArrayRepository; $firstPackage = $this->getPackage('foo', '1'); $secondPackage = $this->getPackage('foo', '2'); $repository->addPackage($firstPackage); $repository->addPackage($secondPackage); $pool->addRepository($repository); $this->assertEquals(array($firstPackage, $secondPackage), $pool->whatProvides('foo')); $this->assertEquals(array($secondPackage), $pool->whatProvides('foo', $this->getVersionConstraint('==', '2'))); } public function testPackageById() { $pool = new Pool; $repository = new ArrayRepository; $package = $this->getPackage('foo', '1'); $repository->addPackage($package); $pool->addRepository($repository); $this->assertSame($package, $pool->packageById(1)); } public function testWhatProvidesWhenPackageCannotBeFound() { $pool = new Pool; $this->assertEquals(array(), $pool->whatProvides('foo')); } } composer-1.0.0-beta2/tests/Composer/Test/DependencyResolver/RequestTest.php000066400000000000000000000043331267577262200270260ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\DependencyResolver; use Composer\DependencyResolver\Request; use Composer\Repository\ArrayRepository; use Composer\TestCase; class RequestTest extends TestCase { public function testRequestInstallAndRemove() { $repo = new ArrayRepository; $foo = $this->getPackage('foo', '1'); $bar = $this->getPackage('bar', '1'); $foobar = $this->getPackage('foobar', '1'); $repo->addPackage($foo); $repo->addPackage($bar); $repo->addPackage($foobar); $request = new Request(); $request->install('foo'); $request->fix('bar'); $request->remove('foobar'); $this->assertEquals( array( array('cmd' => 'install', 'packageName' => 'foo', 'constraint' => null, 'fixed' => false), array('cmd' => 'install', 'packageName' => 'bar', 'constraint' => null, 'fixed' => true), array('cmd' => 'remove', 'packageName' => 'foobar', 'constraint' => null, 'fixed' => false), ), $request->getJobs()); } public function testRequestInstallSamePackageFromDifferentRepositories() { $repo1 = new ArrayRepository; $repo2 = new ArrayRepository; $foo1 = $this->getPackage('foo', '1'); $foo2 = $this->getPackage('foo', '1'); $repo1->addPackage($foo1); $repo2->addPackage($foo2); $request = new Request(); $request->install('foo', $constraint = $this->getVersionConstraint('=', '1')); $this->assertEquals( array( array('cmd' => 'install', 'packageName' => 'foo', 'constraint' => $constraint, 'fixed' => false), ), $request->getJobs() ); } public function testUpdateAll() { $request = new Request(); $request->updateAll(); $this->assertEquals( array(array('cmd' => 'update-all')), $request->getJobs()); } } composer-1.0.0-beta2/tests/Composer/Test/DependencyResolver/RuleSetIteratorTest.php000066400000000000000000000035201267577262200304700ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\DependencyResolver; use Composer\DependencyResolver\Rule; use Composer\DependencyResolver\RuleSet; use Composer\DependencyResolver\RuleSetIterator; use Composer\DependencyResolver\Pool; class RuleSetIteratorTest extends \PHPUnit_Framework_TestCase { protected $rules; protected function setUp() { $this->pool = new Pool; $this->rules = array( RuleSet::TYPE_JOB => array( new Rule(array(), 'job1', null), new Rule(array(), 'job2', null), ), RuleSet::TYPE_LEARNED => array( new Rule(array(), 'update1', null), ), RuleSet::TYPE_PACKAGE => array(), ); } public function testForeach() { $ruleSetIterator = new RuleSetIterator($this->rules); $result = array(); foreach ($ruleSetIterator as $rule) { $result[] = $rule; } $expected = array( $this->rules[RuleSet::TYPE_JOB][0], $this->rules[RuleSet::TYPE_JOB][1], $this->rules[RuleSet::TYPE_LEARNED][0], ); $this->assertEquals($expected, $result); } public function testKeys() { $ruleSetIterator = new RuleSetIterator($this->rules); $result = array(); foreach ($ruleSetIterator as $key => $rule) { $result[] = $key; } $expected = array( RuleSet::TYPE_JOB, RuleSet::TYPE_JOB, RuleSet::TYPE_LEARNED, ); $this->assertEquals($expected, $result); } } composer-1.0.0-beta2/tests/Composer/Test/DependencyResolver/RuleSetTest.php000066400000000000000000000117501267577262200267620ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\DependencyResolver; use Composer\DependencyResolver\Rule; use Composer\DependencyResolver\RuleSet; use Composer\DependencyResolver\Pool; use Composer\Repository\ArrayRepository; use Composer\TestCase; class RuleSetTest extends TestCase { protected $pool; public function setUp() { $this->pool = new Pool; } public function testAdd() { $rules = array( RuleSet::TYPE_PACKAGE => array(), RuleSet::TYPE_JOB => array( new Rule(array(), 'job1', null), new Rule(array(), 'job2', null), ), RuleSet::TYPE_LEARNED => array( new Rule(array(), 'update1', null), ), ); $ruleSet = new RuleSet; $ruleSet->add($rules[RuleSet::TYPE_JOB][0], RuleSet::TYPE_JOB); $ruleSet->add($rules[RuleSet::TYPE_LEARNED][0], RuleSet::TYPE_LEARNED); $ruleSet->add($rules[RuleSet::TYPE_JOB][1], RuleSet::TYPE_JOB); $this->assertEquals($rules, $ruleSet->getRules()); } /** * @expectedException \OutOfBoundsException */ public function testAddWhenTypeIsNotRecognized() { $ruleSet = new RuleSet; $ruleSet->add(new Rule(array(), 'job1', null), 7); } public function testCount() { $ruleSet = new RuleSet; $ruleSet->add(new Rule(array(), 'job1', null), RuleSet::TYPE_JOB); $ruleSet->add(new Rule(array(), 'job2', null), RuleSet::TYPE_JOB); $this->assertEquals(2, $ruleSet->count()); } public function testRuleById() { $ruleSet = new RuleSet; $rule = new Rule(array(), 'job1', null); $ruleSet->add($rule, RuleSet::TYPE_JOB); $this->assertSame($rule, $ruleSet->ruleById[0]); } public function testGetIterator() { $ruleSet = new RuleSet; $rule1 = new Rule(array(), 'job1', null); $rule2 = new Rule(array(), 'job1', null); $ruleSet->add($rule1, RuleSet::TYPE_JOB); $ruleSet->add($rule2, RuleSet::TYPE_LEARNED); $iterator = $ruleSet->getIterator(); $this->assertSame($rule1, $iterator->current()); $iterator->next(); $this->assertSame($rule2, $iterator->current()); } public function testGetIteratorFor() { $ruleSet = new RuleSet; $rule1 = new Rule(array(), 'job1', null); $rule2 = new Rule(array(), 'job1', null); $ruleSet->add($rule1, RuleSet::TYPE_JOB); $ruleSet->add($rule2, RuleSet::TYPE_LEARNED); $iterator = $ruleSet->getIteratorFor(RuleSet::TYPE_LEARNED); $this->assertSame($rule2, $iterator->current()); } public function testGetIteratorWithout() { $ruleSet = new RuleSet; $rule1 = new Rule(array(), 'job1', null); $rule2 = new Rule(array(), 'job1', null); $ruleSet->add($rule1, RuleSet::TYPE_JOB); $ruleSet->add($rule2, RuleSet::TYPE_LEARNED); $iterator = $ruleSet->getIteratorWithout(RuleSet::TYPE_JOB); $this->assertSame($rule2, $iterator->current()); } public function testContainsEqual() { $ruleSet = new RuleSet; $rule = $this->getRuleMock(); $rule->expects($this->any()) ->method('getHash') ->will($this->returnValue('rule_1_hash')); $rule->expects($this->any()) ->method('equals') ->will($this->returnValue(true)); $rule2 = $this->getRuleMock(); $rule2->expects($this->any()) ->method('getHash') ->will($this->returnValue('rule_2_hash')); $rule3 = $this->getRuleMock(); $rule3->expects($this->any()) ->method('getHash') ->will($this->returnValue('rule_1_hash')); $rule3->expects($this->any()) ->method('equal') ->will($this->returnValue(false)); $ruleSet->add($rule, RuleSet::TYPE_LEARNED); $this->assertTrue($ruleSet->containsEqual($rule)); $this->assertFalse($ruleSet->containsEqual($rule2)); $this->assertFalse($ruleSet->containsEqual($rule3)); } public function testPrettyString() { $repo = new ArrayRepository; $repo->addPackage($p = $this->getPackage('foo', '2.1')); $this->pool->addRepository($repo); $ruleSet = new RuleSet; $literal = $p->getId(); $rule = new Rule(array($literal), 'job1', null); $ruleSet->add($rule, RuleSet::TYPE_JOB); $this->assertContains('JOB : (install foo 2.1)', $ruleSet->getPrettyString($this->pool)); } private function getRuleMock() { return $this->getMockBuilder('Composer\DependencyResolver\Rule') ->disableOriginalConstructor() ->getMock(); } } composer-1.0.0-beta2/tests/Composer/Test/DependencyResolver/RuleTest.php000066400000000000000000000056031267577262200263060ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\DependencyResolver; use Composer\DependencyResolver\Rule; use Composer\DependencyResolver\RuleSet; use Composer\DependencyResolver\Pool; use Composer\Repository\ArrayRepository; use Composer\TestCase; class RuleTest extends TestCase { protected $pool; public function setUp() { $this->pool = new Pool; } public function testGetHash() { $rule = new Rule(array(123), 'job1', null); $hash = unpack('ihash', md5('123', true)); $this->assertEquals($hash['hash'], $rule->getHash()); } public function testEqualsForRulesWithDifferentHashes() { $rule = new Rule(array(1, 2), 'job1', null); $rule2 = new Rule(array(1, 3), 'job1', null); $this->assertFalse($rule->equals($rule2)); } public function testEqualsForRulesWithDifferLiteralsQuantity() { $rule = new Rule(array(1, 12), 'job1', null); $rule2 = new Rule(array(1), 'job1', null); $this->assertFalse($rule->equals($rule2)); } public function testEqualsForRulesWithSameLiterals() { $rule = new Rule(array(1, 12), 'job1', null); $rule2 = new Rule(array(1, 12), 'job1', null); $this->assertTrue($rule->equals($rule2)); } public function testSetAndGetType() { $rule = new Rule(array(), 'job1', null); $rule->setType(RuleSet::TYPE_JOB); $this->assertEquals(RuleSet::TYPE_JOB, $rule->getType()); } public function testEnable() { $rule = new Rule(array(), 'job1', null); $rule->disable(); $rule->enable(); $this->assertTrue($rule->isEnabled()); $this->assertFalse($rule->isDisabled()); } public function testDisable() { $rule = new Rule(array(), 'job1', null); $rule->enable(); $rule->disable(); $this->assertTrue($rule->isDisabled()); $this->assertFalse($rule->isEnabled()); } public function testIsAssertions() { $rule = new Rule(array(1, 12), 'job1', null); $rule2 = new Rule(array(1), 'job1', null); $this->assertFalse($rule->isAssertion()); $this->assertTrue($rule2->isAssertion()); } public function testPrettyString() { $repo = new ArrayRepository; $repo->addPackage($p1 = $this->getPackage('foo', '2.1')); $repo->addPackage($p2 = $this->getPackage('baz', '1.1')); $this->pool->addRepository($repo); $rule = new Rule(array($p1->getId(), -$p2->getId()), 'job1', null); $this->assertEquals('(don\'t install baz 1.1|install foo 2.1)', $rule->getPrettyString($this->pool)); } } composer-1.0.0-beta2/tests/Composer/Test/DependencyResolver/SolverTest.php000066400000000000000000001041131267577262200266450ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\DependencyResolver; use Composer\IO\NullIO; use Composer\Repository\ArrayRepository; use Composer\DependencyResolver\DefaultPolicy; use Composer\DependencyResolver\Pool; use Composer\DependencyResolver\Request; use Composer\DependencyResolver\Solver; use Composer\DependencyResolver\SolverProblemsException; use Composer\Package\Link; use Composer\TestCase; use Composer\Semver\Constraint\MultiConstraint; class SolverTest extends TestCase { protected $pool; protected $repo; protected $repoInstalled; protected $request; protected $policy; public function setUp() { $this->pool = new Pool; $this->repo = new ArrayRepository; $this->repoInstalled = new ArrayRepository; $this->request = new Request($this->pool); $this->policy = new DefaultPolicy; $this->solver = new Solver($this->policy, $this->pool, $this->repoInstalled, new NullIO()); } public function testSolverInstallSingle() { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->reposComplete(); $this->request->install('A'); $this->checkSolverResult(array( array('job' => 'install', 'package' => $packageA), )); } public function testSolverRemoveIfNotInstalled() { $this->repoInstalled->addPackage($packageA = $this->getPackage('A', '1.0')); $this->reposComplete(); $this->checkSolverResult(array( array('job' => 'remove', 'package' => $packageA), )); } public function testInstallNonExistingPackageFails() { $this->repo->addPackage($this->getPackage('A', '1.0')); $this->reposComplete(); $this->request->install('B', $this->getVersionConstraint('==', '1')); try { $transaction = $this->solver->solve($this->request); $this->fail('Unsolvable conflict did not result in exception.'); } catch (SolverProblemsException $e) { $problems = $e->getProblems(); $this->assertEquals(1, count($problems)); $this->assertEquals(2, $e->getCode()); $this->assertEquals("\n - The requested package b could not be found in any version, there may be a typo in the package name.", $problems[0]->getPrettyString()); } } public function testSolverInstallSamePackageFromDifferentRepositories() { $repo1 = new ArrayRepository; $repo2 = new ArrayRepository; $repo1->addPackage($foo1 = $this->getPackage('foo', '1')); $repo2->addPackage($foo2 = $this->getPackage('foo', '1')); $this->pool->addRepository($this->repoInstalled); $this->pool->addRepository($repo1); $this->pool->addRepository($repo2); $this->request->install('foo'); $this->checkSolverResult(array( array('job' => 'install', 'package' => $foo1), )); } public function testSolverInstallWithDeps() { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); $this->repo->addPackage($newPackageB = $this->getPackage('B', '1.1')); $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('<', '1.1'), 'requires'))); $this->reposComplete(); $this->request->install('A'); $this->checkSolverResult(array( array('job' => 'install', 'package' => $packageB), array('job' => 'install', 'package' => $packageA), )); } public function testSolverInstallHonoursNotEqualOperator() { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); $this->repo->addPackage($newPackageB11 = $this->getPackage('B', '1.1')); $this->repo->addPackage($newPackageB12 = $this->getPackage('B', '1.2')); $this->repo->addPackage($newPackageB13 = $this->getPackage('B', '1.3')); $packageA->setRequires(array( 'b' => new Link('A', 'B', new MultiConstraint(array( $this->getVersionConstraint('<=', '1.3'), $this->getVersionConstraint('<>', '1.3'), $this->getVersionConstraint('!=', '1.2'), )), 'requires'), )); $this->reposComplete(); $this->request->install('A'); $this->checkSolverResult(array( array('job' => 'install', 'package' => $newPackageB11), array('job' => 'install', 'package' => $packageA), )); } public function testSolverInstallWithDepsInOrder() { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); $this->repo->addPackage($packageC = $this->getPackage('C', '1.0')); $packageB->setRequires(array( 'a' => new Link('B', 'A', $this->getVersionConstraint('>=', '1.0'), 'requires'), 'c' => new Link('B', 'C', $this->getVersionConstraint('>=', '1.0'), 'requires'), )); $packageC->setRequires(array( 'a' => new Link('C', 'A', $this->getVersionConstraint('>=', '1.0'), 'requires'), )); $this->reposComplete(); $this->request->install('A'); $this->request->install('B'); $this->request->install('C'); $this->checkSolverResult(array( array('job' => 'install', 'package' => $packageA), array('job' => 'install', 'package' => $packageC), array('job' => 'install', 'package' => $packageB), )); } public function testSolverInstallInstalled() { $this->repoInstalled->addPackage($this->getPackage('A', '1.0')); $this->reposComplete(); $this->request->install('A'); $this->checkSolverResult(array()); } public function testSolverInstallInstalledWithAlternative() { $this->repo->addPackage($this->getPackage('A', '1.0')); $this->repoInstalled->addPackage($this->getPackage('A', '1.0')); $this->reposComplete(); $this->request->install('A'); $this->checkSolverResult(array()); } public function testSolverRemoveSingle() { $this->repoInstalled->addPackage($packageA = $this->getPackage('A', '1.0')); $this->reposComplete(); $this->request->remove('A'); $this->checkSolverResult(array( array('job' => 'remove', 'package' => $packageA), )); } public function testSolverRemoveUninstalled() { $this->repo->addPackage($this->getPackage('A', '1.0')); $this->reposComplete(); $this->request->remove('A'); $this->checkSolverResult(array()); } public function testSolverUpdateDoesOnlyUpdate() { $this->repoInstalled->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repoInstalled->addPackage($packageB = $this->getPackage('B', '1.0')); $this->repo->addPackage($newPackageB = $this->getPackage('B', '1.1')); $this->reposComplete(); $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0.0.0'), 'requires'))); $this->request->install('A', $this->getVersionConstraint('=', '1.0.0.0')); $this->request->install('B', $this->getVersionConstraint('=', '1.1.0.0')); $this->request->update('A', $this->getVersionConstraint('=', '1.0.0.0')); $this->request->update('B', $this->getVersionConstraint('=', '1.0.0.0')); $this->checkSolverResult(array( array('job' => 'update', 'from' => $packageB, 'to' => $newPackageB), )); } public function testSolverUpdateSingle() { $this->repoInstalled->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($newPackageA = $this->getPackage('A', '1.1')); $this->reposComplete(); $this->request->install('A'); $this->request->update('A'); $this->checkSolverResult(array( array('job' => 'update', 'from' => $packageA, 'to' => $newPackageA), )); } public function testSolverUpdateAll() { $this->repoInstalled->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repoInstalled->addPackage($packageB = $this->getPackage('B', '1.0')); $this->repo->addPackage($newPackageA = $this->getPackage('A', '1.1')); $this->repo->addPackage($newPackageB = $this->getPackage('B', '1.1')); $packageA->setRequires(array('b' => new Link('A', 'B', null, 'requires'))); $newPackageA->setRequires(array('b' => new Link('A', 'B', null, 'requires'))); $this->reposComplete(); $this->request->install('A'); $this->request->updateAll(); $this->checkSolverResult(array( array('job' => 'update', 'from' => $packageB, 'to' => $newPackageB), array('job' => 'update', 'from' => $packageA, 'to' => $newPackageA), )); } public function testSolverUpdateCurrent() { $this->repoInstalled->addPackage($this->getPackage('A', '1.0')); $this->repo->addPackage($this->getPackage('A', '1.0')); $this->reposComplete(); $this->request->install('A'); $this->request->update('A'); $this->checkSolverResult(array()); } public function testSolverUpdateOnlyUpdatesSelectedPackage() { $this->repoInstalled->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repoInstalled->addPackage($packageB = $this->getPackage('B', '1.0')); $this->repo->addPackage($packageAnewer = $this->getPackage('A', '1.1')); $this->repo->addPackage($packageBnewer = $this->getPackage('B', '1.1')); $this->reposComplete(); $this->request->install('A'); $this->request->install('B'); $this->request->update('A'); $this->checkSolverResult(array( array('job' => 'update', 'from' => $packageA, 'to' => $packageAnewer), )); } public function testSolverUpdateConstrained() { $this->repoInstalled->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($newPackageA = $this->getPackage('A', '1.2')); $this->repo->addPackage($this->getPackage('A', '2.0')); $this->reposComplete(); $this->request->install('A', $this->getVersionConstraint('<', '2.0.0.0')); $this->request->update('A'); $this->checkSolverResult(array(array( 'job' => 'update', 'from' => $packageA, 'to' => $newPackageA, ))); } public function testSolverUpdateFullyConstrained() { $this->repoInstalled->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($newPackageA = $this->getPackage('A', '1.2')); $this->repo->addPackage($this->getPackage('A', '2.0')); $this->reposComplete(); $this->request->install('A', $this->getVersionConstraint('<', '2.0.0.0')); $this->request->update('A', $this->getVersionConstraint('=', '1.0.0.0')); $this->checkSolverResult(array(array( 'job' => 'update', 'from' => $packageA, 'to' => $newPackageA, ))); } public function testSolverUpdateFullyConstrainedPrunesInstalledPackages() { $this->repoInstalled->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repoInstalled->addPackage($packageB = $this->getPackage('B', '1.0')); $this->repo->addPackage($newPackageA = $this->getPackage('A', '1.2')); $this->repo->addPackage($this->getPackage('A', '2.0')); $this->reposComplete(); $this->request->install('A', $this->getVersionConstraint('<', '2.0.0.0')); $this->request->update('A', $this->getVersionConstraint('=', '1.0.0.0')); $this->checkSolverResult(array( array( 'job' => 'update', 'from' => $packageA, 'to' => $newPackageA, ), array( 'job' => 'remove', 'package' => $packageB, ), )); } public function testSolverAllJobs() { $this->repoInstalled->addPackage($packageD = $this->getPackage('D', '1.0')); $this->repoInstalled->addPackage($oldPackageC = $this->getPackage('C', '1.0')); $this->repo->addPackage($packageA = $this->getPackage('A', '2.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); $this->repo->addPackage($newPackageB = $this->getPackage('B', '1.1')); $this->repo->addPackage($packageC = $this->getPackage('C', '1.1')); $this->repo->addPackage($this->getPackage('D', '1.0')); $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('<', '1.1'), 'requires'))); $this->reposComplete(); $this->request->install('A'); $this->request->install('C'); $this->request->update('C'); $this->request->remove('D'); $this->checkSolverResult(array( array('job' => 'update', 'from' => $oldPackageC, 'to' => $packageC), array('job' => 'install', 'package' => $packageB), array('job' => 'install', 'package' => $packageA), array('job' => 'remove', 'package' => $packageD), )); } public function testSolverThreeAlternativeRequireAndConflict() { $this->repo->addPackage($packageA = $this->getPackage('A', '2.0')); $this->repo->addPackage($middlePackageB = $this->getPackage('B', '1.0')); $this->repo->addPackage($newPackageB = $this->getPackage('B', '1.1')); $this->repo->addPackage($oldPackageB = $this->getPackage('B', '0.9')); $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('<', '1.1'), 'requires'))); $packageA->setConflicts(array('b' => new Link('A', 'B', $this->getVersionConstraint('<', '1.0'), 'conflicts'))); $this->reposComplete(); $this->request->install('A'); $this->checkSolverResult(array( array('job' => 'install', 'package' => $middlePackageB), array('job' => 'install', 'package' => $packageA), )); } public function testSolverObsolete() { $this->repoInstalled->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); $packageB->setReplaces(array('a' => new Link('B', 'A', new MultiConstraint(array())))); $this->reposComplete(); $this->request->install('B'); $this->checkSolverResult(array( array('job' => 'update', 'from' => $packageA, 'to' => $packageB), )); } public function testInstallOneOfTwoAlternatives() { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('A', '1.0')); $this->reposComplete(); $this->request->install('A'); $this->checkSolverResult(array( array('job' => 'install', 'package' => $packageA), )); } public function testInstallProvider() { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageQ = $this->getPackage('Q', '1.0')); $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), 'requires'))); $packageQ->setProvides(array('b' => new Link('Q', 'B', $this->getVersionConstraint('=', '1.0'), 'provides'))); $this->reposComplete(); $this->request->install('A'); // must explicitly pick the provider, so error in this case $this->setExpectedException('Composer\DependencyResolver\SolverProblemsException'); $this->solver->solve($this->request); } public function testSkipReplacerOfExistingPackage() { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageQ = $this->getPackage('Q', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), 'requires'))); $packageQ->setReplaces(array('b' => new Link('Q', 'B', $this->getVersionConstraint('>=', '1.0'), 'replaces'))); $this->reposComplete(); $this->request->install('A'); $this->checkSolverResult(array( array('job' => 'install', 'package' => $packageB), array('job' => 'install', 'package' => $packageA), )); } public function testNoInstallReplacerOfMissingPackage() { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageQ = $this->getPackage('Q', '1.0')); $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), 'requires'))); $packageQ->setReplaces(array('b' => new Link('Q', 'B', $this->getVersionConstraint('>=', '1.0'), 'replaces'))); $this->reposComplete(); $this->request->install('A'); $this->setExpectedException('Composer\DependencyResolver\SolverProblemsException'); $this->solver->solve($this->request); } public function testSkipReplacedPackageIfReplacerIsSelected() { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageQ = $this->getPackage('Q', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), 'requires'))); $packageQ->setReplaces(array('b' => new Link('Q', 'B', $this->getVersionConstraint('>=', '1.0'), 'replaces'))); $this->reposComplete(); $this->request->install('A'); $this->request->install('Q'); $this->checkSolverResult(array( array('job' => 'install', 'package' => $packageQ), array('job' => 'install', 'package' => $packageA), )); } public function testPickOlderIfNewerConflicts() { $this->repo->addPackage($packageX = $this->getPackage('X', '1.0')); $packageX->setRequires(array( 'a' => new Link('X', 'A', $this->getVersionConstraint('>=', '2.0.0.0'), 'requires'), 'b' => new Link('X', 'B', $this->getVersionConstraint('>=', '2.0.0.0'), 'requires'), )); $this->repo->addPackage($packageA = $this->getPackage('A', '2.0.0')); $this->repo->addPackage($newPackageA = $this->getPackage('A', '2.1.0')); $this->repo->addPackage($newPackageB = $this->getPackage('B', '2.1.0')); $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('>=', '2.0.0.0'), 'requires'))); // new package A depends on version of package B that does not exist // => new package A is not installable $newPackageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('>=', '2.2.0.0'), 'requires'))); // add a package S replacing both A and B, so that S and B or S and A cannot be simultaneously installed // but an alternative option for A and B both exists // this creates a more difficult so solve conflict $this->repo->addPackage($packageS = $this->getPackage('S', '2.0.0')); $packageS->setReplaces(array( 'a' => new Link('S', 'A', $this->getVersionConstraint('>=', '2.0.0.0'), 'replaces'), 'b' => new Link('S', 'B', $this->getVersionConstraint('>=', '2.0.0.0'), 'replaces'), )); $this->reposComplete(); $this->request->install('X'); $this->checkSolverResult(array( array('job' => 'install', 'package' => $newPackageB), array('job' => 'install', 'package' => $packageA), array('job' => 'install', 'package' => $packageX), )); } public function testInstallCircularRequire() { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageB1 = $this->getPackage('B', '0.9')); $this->repo->addPackage($packageB2 = $this->getPackage('B', '1.1')); $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), 'requires'))); $packageB2->setRequires(array('a' => new Link('B', 'A', $this->getVersionConstraint('>=', '1.0'), 'requires'))); $this->reposComplete(); $this->request->install('A'); $this->checkSolverResult(array( array('job' => 'install', 'package' => $packageB2), array('job' => 'install', 'package' => $packageA), )); } public function testInstallAlternativeWithCircularRequire() { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); $this->repo->addPackage($packageC = $this->getPackage('C', '1.0')); $this->repo->addPackage($packageD = $this->getPackage('D', '1.0')); $packageA->setRequires(array('b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), 'requires'))); $packageB->setRequires(array('virtual' => new Link('B', 'Virtual', $this->getVersionConstraint('>=', '1.0'), 'requires'))); $packageC->setProvides(array('virtual' => new Link('C', 'Virtual', $this->getVersionConstraint('==', '1.0'), 'provides'))); $packageD->setProvides(array('virtual' => new Link('D', 'Virtual', $this->getVersionConstraint('==', '1.0'), 'provides'))); $packageC->setRequires(array('a' => new Link('C', 'A', $this->getVersionConstraint('==', '1.0'), 'requires'))); $packageD->setRequires(array('a' => new Link('D', 'A', $this->getVersionConstraint('==', '1.0'), 'requires'))); $this->reposComplete(); $this->request->install('A'); $this->request->install('C'); $this->checkSolverResult(array( array('job' => 'install', 'package' => $packageA), array('job' => 'install', 'package' => $packageC), array('job' => 'install', 'package' => $packageB), )); } /** * If a replacer D replaces B and C with C not otherwise available, * D must be installed instead of the original B. */ public function testUseReplacerIfNecessary() { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); $this->repo->addPackage($packageD = $this->getPackage('D', '1.0')); $this->repo->addPackage($packageD2 = $this->getPackage('D', '1.1')); $packageA->setRequires(array( 'b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), 'requires'), 'c' => new Link('A', 'C', $this->getVersionConstraint('>=', '1.0'), 'requires'), )); $packageD->setReplaces(array( 'b' => new Link('D', 'B', $this->getVersionConstraint('>=', '1.0'), 'replaces'), 'c' => new Link('D', 'C', $this->getVersionConstraint('>=', '1.0'), 'replaces'), )); $packageD2->setReplaces(array( 'b' => new Link('D', 'B', $this->getVersionConstraint('>=', '1.0'), 'replaces'), 'c' => new Link('D', 'C', $this->getVersionConstraint('>=', '1.0'), 'replaces'), )); $this->reposComplete(); $this->request->install('A'); $this->request->install('D'); $this->checkSolverResult(array( array('job' => 'install', 'package' => $packageD2), array('job' => 'install', 'package' => $packageA), )); } public function testIssue265() { $this->repo->addPackage($packageA1 = $this->getPackage('A', '2.0.999999-dev')); $this->repo->addPackage($packageA2 = $this->getPackage('A', '2.1-dev')); $this->repo->addPackage($packageA3 = $this->getPackage('A', '2.2-dev')); $this->repo->addPackage($packageB1 = $this->getPackage('B', '2.0.10')); $this->repo->addPackage($packageB2 = $this->getPackage('B', '2.0.9')); $this->repo->addPackage($packageC = $this->getPackage('C', '2.0-dev')); $this->repo->addPackage($packageD = $this->getPackage('D', '2.0.9')); $packageC->setRequires(array( 'a' => new Link('C', 'A', $this->getVersionConstraint('>=', '2.0'), 'requires'), 'd' => new Link('C', 'D', $this->getVersionConstraint('>=', '2.0'), 'requires'), )); $packageD->setRequires(array( 'a' => new Link('D', 'A', $this->getVersionConstraint('>=', '2.1'), 'requires'), 'b' => new Link('D', 'B', $this->getVersionConstraint('>=', '2.0-dev'), 'requires'), )); $packageB1->setRequires(array('a' => new Link('B', 'A', $this->getVersionConstraint('==', '2.1.0.0-dev'), 'requires'))); $packageB2->setRequires(array('a' => new Link('B', 'A', $this->getVersionConstraint('==', '2.1.0.0-dev'), 'requires'))); $packageB2->setReplaces(array('d' => new Link('B', 'D', $this->getVersionConstraint('==', '2.0.9.0'), 'replaces'))); $this->reposComplete(); $this->request->install('C', $this->getVersionConstraint('==', '2.0.0.0-dev')); $this->setExpectedException('Composer\DependencyResolver\SolverProblemsException'); $this->solver->solve($this->request); } public function testConflictResultEmpty() { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); $packageA->setConflicts(array( 'b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), 'conflicts'), )); $this->reposComplete(); $this->request->install('A'); $this->request->install('B'); try { $transaction = $this->solver->solve($this->request); $this->fail('Unsolvable conflict did not result in exception.'); } catch (SolverProblemsException $e) { $problems = $e->getProblems(); $this->assertEquals(1, count($problems)); $msg = "\n"; $msg .= " Problem 1\n"; $msg .= " - Installation request for a -> satisfiable by A[1.0].\n"; $msg .= " - B 1.0 conflicts with A[1.0].\n"; $msg .= " - Installation request for b -> satisfiable by B[1.0].\n"; $this->assertEquals($msg, $e->getMessage()); } } public function testUnsatisfiableRequires() { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); $packageA->setRequires(array( 'b' => new Link('A', 'B', $this->getVersionConstraint('>=', '2.0'), 'requires'), )); $this->reposComplete(); $this->request->install('A'); try { $transaction = $this->solver->solve($this->request); $this->fail('Unsolvable conflict did not result in exception.'); } catch (SolverProblemsException $e) { $problems = $e->getProblems(); $this->assertEquals(1, count($problems)); // TODO assert problem properties $msg = "\n"; $msg .= " Problem 1\n"; $msg .= " - Installation request for a -> satisfiable by A[1.0].\n"; $msg .= " - A 1.0 requires b >= 2.0 -> no matching package found.\n\n"; $msg .= "Potential causes:\n"; $msg .= " - A typo in the package name\n"; $msg .= " - The package is not available in a stable-enough version according to your minimum-stability setting\n"; $msg .= " see for more details.\n\n"; $msg .= "Read for further common problems."; $this->assertEquals($msg, $e->getMessage()); } } public function testRequireMismatchException() { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); $this->repo->addPackage($packageB2 = $this->getPackage('B', '0.9')); $this->repo->addPackage($packageC = $this->getPackage('C', '1.0')); $this->repo->addPackage($packageD = $this->getPackage('D', '1.0')); $packageA->setRequires(array( 'b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), 'requires'), )); $packageB->setRequires(array( 'c' => new Link('B', 'C', $this->getVersionConstraint('>=', '1.0'), 'requires'), )); $packageC->setRequires(array( 'd' => new Link('C', 'D', $this->getVersionConstraint('>=', '1.0'), 'requires'), )); $packageD->setRequires(array( 'b' => new Link('D', 'B', $this->getVersionConstraint('<', '1.0'), 'requires'), )); $this->reposComplete(); $this->request->install('A'); try { $transaction = $this->solver->solve($this->request); $this->fail('Unsolvable conflict did not result in exception.'); } catch (SolverProblemsException $e) { $problems = $e->getProblems(); $this->assertEquals(1, count($problems)); $msg = "\n"; $msg .= " Problem 1\n"; $msg .= " - C 1.0 requires d >= 1.0 -> satisfiable by D[1.0].\n"; $msg .= " - D 1.0 requires b < 1.0 -> satisfiable by B[0.9].\n"; $msg .= " - B 1.0 requires c >= 1.0 -> satisfiable by C[1.0].\n"; $msg .= " - Can only install one of: B[0.9, 1.0].\n"; $msg .= " - A 1.0 requires b >= 1.0 -> satisfiable by B[1.0].\n"; $msg .= " - Installation request for a -> satisfiable by A[1.0].\n"; $this->assertEquals($msg, $e->getMessage()); } } public function testLearnLiteralsWithSortedRuleLiterals() { $this->repo->addPackage($packageTwig2 = $this->getPackage('twig/twig', '2.0')); $this->repo->addPackage($packageTwig16 = $this->getPackage('twig/twig', '1.6')); $this->repo->addPackage($packageTwig15 = $this->getPackage('twig/twig', '1.5')); $this->repo->addPackage($packageSymfony = $this->getPackage('symfony/symfony', '2.0')); $this->repo->addPackage($packageTwigBridge = $this->getPackage('symfony/twig-bridge', '2.0')); $packageTwigBridge->setRequires(array( 'twig/twig' => new Link('symfony/twig-bridge', 'twig/twig', $this->getVersionConstraint('<', '2.0'), 'requires'), )); $packageSymfony->setReplaces(array( 'symfony/twig-bridge' => new Link('symfony/symfony', 'symfony/twig-bridge', $this->getVersionConstraint('==', '2.0'), 'replaces'), )); $this->reposComplete(); $this->request->install('symfony/twig-bridge'); $this->request->install('twig/twig'); $this->checkSolverResult(array( array('job' => 'install', 'package' => $packageTwig16), array('job' => 'install', 'package' => $packageTwigBridge), )); } public function testInstallRecursiveAliasDependencies() { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '2.0')); $this->repo->addPackage($packageA2 = $this->getPackage('A', '2.0')); $packageA2->setRequires(array( 'b' => new Link('A', 'B', $this->getVersionConstraint('==', '2.0'), 'requires', '== 2.0'), )); $packageB->setRequires(array( 'a' => new Link('B', 'A', $this->getVersionConstraint('>=', '2.0'), 'requires'), )); $this->repo->addPackage($packageA2Alias = $this->getAliasPackage($packageA2, '1.1')); $this->reposComplete(); $this->request->install('A', $this->getVersionConstraint('==', '1.1.0.0')); $this->checkSolverResult(array( array('job' => 'install', 'package' => $packageA2), array('job' => 'install', 'package' => $packageB), array('job' => 'install', 'package' => $packageA2Alias), )); } public function testInstallDevAlias() { $this->repo->addPackage($packageA = $this->getPackage('A', '2.0')); $this->repo->addPackage($packageB = $this->getPackage('B', '1.0')); $packageB->setRequires(array( 'a' => new Link('B', 'A', $this->getVersionConstraint('<', '2.0'), 'requires'), )); $this->repo->addPackage($packageAAlias = $this->getAliasPackage($packageA, '1.1')); $this->reposComplete(); $this->request->install('A', $this->getVersionConstraint('==', '2.0')); $this->request->install('B'); $this->checkSolverResult(array( array('job' => 'install', 'package' => $packageA), array('job' => 'install', 'package' => $packageAAlias), array('job' => 'install', 'package' => $packageB), )); } protected function reposComplete() { $this->pool->addRepository($this->repoInstalled); $this->pool->addRepository($this->repo); } protected function checkSolverResult(array $expected) { $transaction = $this->solver->solve($this->request); $result = array(); foreach ($transaction as $operation) { if ('update' === $operation->getJobType()) { $result[] = array( 'job' => 'update', 'from' => $operation->getInitialPackage(), 'to' => $operation->getTargetPackage(), ); } else { $job = ('uninstall' === $operation->getJobType() ? 'remove' : 'install'); $result[] = array( 'job' => $job, 'package' => $operation->getPackage(), ); } } $this->assertEquals($expected, $result); } } composer-1.0.0-beta2/tests/Composer/Test/Downloader/000077500000000000000000000000001267577262200223205ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Downloader/ArchiveDownloaderTest.php000066400000000000000000000137561267577262200273050ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Downloader; class ArchiveDownloaderTest extends \PHPUnit_Framework_TestCase { public function testGetFileName() { $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->any()) ->method('getDistUrl') ->will($this->returnValue('http://example.com/script.js')) ; $downloader = $this->getMockForAbstractClass('Composer\Downloader\ArchiveDownloader', array($this->getMock('Composer\IO\IOInterface'), $this->getMock('Composer\Config'))); $method = new \ReflectionMethod($downloader, 'getFileName'); $method->setAccessible(true); $first = $method->invoke($downloader, $packageMock, '/path'); $this->assertRegExp('#/path/[a-z0-9]+\.js#', $first); $this->assertSame($first, $method->invoke($downloader, $packageMock, '/path')); } public function testProcessUrl() { if (!extension_loaded('openssl')) { $this->markTestSkipped('Requires openssl'); } $downloader = $this->getMockForAbstractClass('Composer\Downloader\ArchiveDownloader', array($this->getMock('Composer\IO\IOInterface'), $this->getMock('Composer\Config'))); $method = new \ReflectionMethod($downloader, 'processUrl'); $method->setAccessible(true); $expected = 'https://github.com/composer/composer/zipball/master'; $url = $method->invoke($downloader, $this->getMock('Composer\Package\PackageInterface'), $expected); $this->assertEquals($expected, $url); } public function testProcessUrl2() { if (!extension_loaded('openssl')) { $this->markTestSkipped('Requires openssl'); } $downloader = $this->getMockForAbstractClass('Composer\Downloader\ArchiveDownloader', array($this->getMock('Composer\IO\IOInterface'), $this->getMock('Composer\Config'))); $method = new \ReflectionMethod($downloader, 'processUrl'); $method->setAccessible(true); $expected = 'https://github.com/composer/composer/archive/master.tar.gz'; $url = $method->invoke($downloader, $this->getMock('Composer\Package\PackageInterface'), $expected); $this->assertEquals($expected, $url); } public function testProcessUrl3() { if (!extension_loaded('openssl')) { $this->markTestSkipped('Requires openssl'); } $downloader = $this->getMockForAbstractClass('Composer\Downloader\ArchiveDownloader', array($this->getMock('Composer\IO\IOInterface'), $this->getMock('Composer\Config'))); $method = new \ReflectionMethod($downloader, 'processUrl'); $method->setAccessible(true); $expected = 'https://api.github.com/repos/composer/composer/zipball/master'; $url = $method->invoke($downloader, $this->getMock('Composer\Package\PackageInterface'), $expected); $this->assertEquals($expected, $url); } /** * @dataProvider provideUrls */ public function testProcessUrlRewriteDist($url) { if (!extension_loaded('openssl')) { $this->markTestSkipped('Requires openssl'); } $downloader = $this->getMockForAbstractClass('Composer\Downloader\ArchiveDownloader', array($this->getMock('Composer\IO\IOInterface'), $this->getMock('Composer\Config'))); $method = new \ReflectionMethod($downloader, 'processUrl'); $method->setAccessible(true); $type = strpos($url, 'tar') ? 'tar' : 'zip'; $expected = 'https://api.github.com/repos/composer/composer/'.$type.'ball/ref'; $package = $this->getMock('Composer\Package\PackageInterface'); $package->expects($this->any()) ->method('getDistReference') ->will($this->returnValue('ref')); $url = $method->invoke($downloader, $package, $url); $this->assertEquals($expected, $url); } public function provideUrls() { return array( array('https://api.github.com/repos/composer/composer/zipball/master'), array('https://api.github.com/repos/composer/composer/tarball/master'), array('https://github.com/composer/composer/zipball/master'), array('https://www.github.com/composer/composer/tarball/master'), array('https://github.com/composer/composer/archive/master.zip'), array('https://github.com/composer/composer/archive/master.tar.gz'), ); } /** * @dataProvider provideBitbucketUrls */ public function testProcessUrlRewriteBitbucketDist($url, $extension) { if (!extension_loaded('openssl')) { $this->markTestSkipped('Requires openssl'); } $downloader = $this->getMockForAbstractClass('Composer\Downloader\ArchiveDownloader', array($this->getMock('Composer\IO\IOInterface'), $this->getMock('Composer\Config'))); $method = new \ReflectionMethod($downloader, 'processUrl'); $method->setAccessible(true); $url = $url . '.' . $extension; $expected = 'https://bitbucket.org/davereid/drush-virtualhost/get/ref.' . $extension; $package = $this->getMock('Composer\Package\PackageInterface'); $package->expects($this->any()) ->method('getDistReference') ->will($this->returnValue('ref')); $url = $method->invoke($downloader, $package, $url); $this->assertEquals($expected, $url); } public function provideBitbucketUrls() { return array( array('https://bitbucket.org/davereid/drush-virtualhost/get/77ca490c26ac818e024d1138aa8bd3677d1ef21f', 'zip'), array('https://bitbucket.org/davereid/drush-virtualhost/get/master', 'tar.gz'), array('https://bitbucket.org/davereid/drush-virtualhost/get/v1.0', 'tar.bz2'), ); } } composer-1.0.0-beta2/tests/Composer/Test/Downloader/DownloadManagerTest.php000066400000000000000000001135371267577262200267450ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Downloader; use Composer\Downloader\DownloadManager; class DownloadManagerTest extends \PHPUnit_Framework_TestCase { protected $filesystem; protected $io; public function setUp() { $this->filesystem = $this->getMock('Composer\Util\Filesystem'); $this->io = $this->getMock('Composer\IO\IOInterface'); } public function testSetGetDownloader() { $downloader = $this->createDownloaderMock(); $manager = new DownloadManager($this->io, false, $this->filesystem); $manager->setDownloader('test', $downloader); $this->assertSame($downloader, $manager->getDownloader('test')); $this->setExpectedException('InvalidArgumentException'); $manager->getDownloader('unregistered'); } public function testGetDownloaderForIncorrectlyInstalledPackage() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getInstallationSource') ->will($this->returnValue(null)); $manager = new DownloadManager($this->io, false, $this->filesystem); $this->setExpectedException('InvalidArgumentException'); $manager->getDownloaderForInstalledPackage($package); } public function testGetDownloaderForCorrectlyInstalledDistPackage() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getInstallationSource') ->will($this->returnValue('dist')); $package ->expects($this->once()) ->method('getDistType') ->will($this->returnValue('pear')); $downloader = $this->createDownloaderMock(); $downloader ->expects($this->once()) ->method('getInstallationSource') ->will($this->returnValue('dist')); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloader')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloader') ->with('pear') ->will($this->returnValue($downloader)); $this->assertSame($downloader, $manager->getDownloaderForInstalledPackage($package)); } public function testGetDownloaderForIncorrectlyInstalledDistPackage() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getInstallationSource') ->will($this->returnValue('dist')); $package ->expects($this->once()) ->method('getDistType') ->will($this->returnValue('git')); $downloader = $this->createDownloaderMock(); $downloader ->expects($this->exactly(2)) ->method('getInstallationSource') ->will($this->returnValue('source')); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloader')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloader') ->with('git') ->will($this->returnValue($downloader)); $this->setExpectedException('LogicException'); $manager->getDownloaderForInstalledPackage($package); } public function testGetDownloaderForCorrectlyInstalledSourcePackage() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getInstallationSource') ->will($this->returnValue('source')); $package ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue('git')); $downloader = $this->createDownloaderMock(); $downloader ->expects($this->once()) ->method('getInstallationSource') ->will($this->returnValue('source')); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloader')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloader') ->with('git') ->will($this->returnValue($downloader)); $this->assertSame($downloader, $manager->getDownloaderForInstalledPackage($package)); } public function testGetDownloaderForIncorrectlyInstalledSourcePackage() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getInstallationSource') ->will($this->returnValue('source')); $package ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue('pear')); $downloader = $this->createDownloaderMock(); $downloader ->expects($this->exactly(2)) ->method('getInstallationSource') ->will($this->returnValue('dist')); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloader')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloader') ->with('pear') ->will($this->returnValue($downloader)); $this->setExpectedException('LogicException'); $manager->getDownloaderForInstalledPackage($package); } public function testGetDownloaderForMetapackage() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getType') ->will($this->returnValue('metapackage')); $manager = new DownloadManager($this->io, false, $this->filesystem); $this->assertNull($manager->getDownloaderForInstalledPackage($package)); } public function testFullPackageDownload() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue('git')); $package ->expects($this->once()) ->method('getDistType') ->will($this->returnValue('pear')); $package ->expects($this->once()) ->method('setInstallationSource') ->with('dist'); $downloader = $this->createDownloaderMock(); $downloader ->expects($this->once()) ->method('download') ->with($package, 'target_dir'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($package) ->will($this->returnValue($downloader)); $manager->download($package, 'target_dir'); } public function testFullPackageDownloadFailover() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue('git')); $package ->expects($this->once()) ->method('getDistType') ->will($this->returnValue('pear')); $package ->expects($this->any()) ->method('getPrettyString') ->will($this->returnValue('prettyPackage')); $package ->expects($this->at(3)) ->method('setInstallationSource') ->with('dist'); $package ->expects($this->at(5)) ->method('setInstallationSource') ->with('source'); $downloaderFail = $this->createDownloaderMock(); $downloaderFail ->expects($this->once()) ->method('download') ->with($package, 'target_dir') ->will($this->throwException(new \RuntimeException("Foo"))); $downloaderSuccess = $this->createDownloaderMock(); $downloaderSuccess ->expects($this->once()) ->method('download') ->with($package, 'target_dir'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage')) ->getMock(); $manager ->expects($this->at(0)) ->method('getDownloaderForInstalledPackage') ->with($package) ->will($this->returnValue($downloaderFail)); $manager ->expects($this->at(1)) ->method('getDownloaderForInstalledPackage') ->with($package) ->will($this->returnValue($downloaderSuccess)); $manager->download($package, 'target_dir'); } public function testBadPackageDownload() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue(null)); $package ->expects($this->once()) ->method('getDistType') ->will($this->returnValue(null)); $manager = new DownloadManager($this->io, false, $this->filesystem); $this->setExpectedException('InvalidArgumentException'); $manager->download($package, 'target_dir'); } public function testDistOnlyPackageDownload() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue(null)); $package ->expects($this->once()) ->method('getDistType') ->will($this->returnValue('pear')); $package ->expects($this->once()) ->method('setInstallationSource') ->with('dist'); $downloader = $this->createDownloaderMock(); $downloader ->expects($this->once()) ->method('download') ->with($package, 'target_dir'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($package) ->will($this->returnValue($downloader)); $manager->download($package, 'target_dir'); } public function testSourceOnlyPackageDownload() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue('git')); $package ->expects($this->once()) ->method('getDistType') ->will($this->returnValue(null)); $package ->expects($this->once()) ->method('setInstallationSource') ->with('source'); $downloader = $this->createDownloaderMock(); $downloader ->expects($this->once()) ->method('download') ->with($package, 'target_dir'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($package) ->will($this->returnValue($downloader)); $manager->download($package, 'target_dir'); } public function testMetapackagePackageDownload() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue('git')); $package ->expects($this->once()) ->method('getDistType') ->will($this->returnValue(null)); $package ->expects($this->once()) ->method('setInstallationSource') ->with('source'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($package) ->will($this->returnValue(null)); // There is no downloader for Metapackages. $manager->download($package, 'target_dir'); } public function testFullPackageDownloadWithSourcePreferred() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue('git')); $package ->expects($this->once()) ->method('getDistType') ->will($this->returnValue('pear')); $package ->expects($this->once()) ->method('setInstallationSource') ->with('source'); $downloader = $this->createDownloaderMock(); $downloader ->expects($this->once()) ->method('download') ->with($package, 'target_dir'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($package) ->will($this->returnValue($downloader)); $manager->setPreferSource(true); $manager->download($package, 'target_dir'); } public function testDistOnlyPackageDownloadWithSourcePreferred() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue(null)); $package ->expects($this->once()) ->method('getDistType') ->will($this->returnValue('pear')); $package ->expects($this->once()) ->method('setInstallationSource') ->with('dist'); $downloader = $this->createDownloaderMock(); $downloader ->expects($this->once()) ->method('download') ->with($package, 'target_dir'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($package) ->will($this->returnValue($downloader)); $manager->setPreferSource(true); $manager->download($package, 'target_dir'); } public function testSourceOnlyPackageDownloadWithSourcePreferred() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue('git')); $package ->expects($this->once()) ->method('getDistType') ->will($this->returnValue(null)); $package ->expects($this->once()) ->method('setInstallationSource') ->with('source'); $downloader = $this->createDownloaderMock(); $downloader ->expects($this->once()) ->method('download') ->with($package, 'target_dir'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($package) ->will($this->returnValue($downloader)); $manager->setPreferSource(true); $manager->download($package, 'target_dir'); } public function testBadPackageDownloadWithSourcePreferred() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue(null)); $package ->expects($this->once()) ->method('getDistType') ->will($this->returnValue(null)); $manager = new DownloadManager($this->io, false, $this->filesystem); $manager->setPreferSource(true); $this->setExpectedException('InvalidArgumentException'); $manager->download($package, 'target_dir'); } public function testUpdateDistWithEqualTypes() { $initial = $this->createPackageMock(); $initial ->expects($this->once()) ->method('getInstallationSource') ->will($this->returnValue('dist')); $initial ->expects($this->once()) ->method('getDistType') ->will($this->returnValue('pear')); $target = $this->createPackageMock(); $target ->expects($this->once()) ->method('getDistType') ->will($this->returnValue('pear')); $target ->expects($this->once()) ->method('setInstallationSource') ->with('dist'); $pearDownloader = $this->createDownloaderMock(); $pearDownloader ->expects($this->once()) ->method('update') ->with($initial, $target, 'vendor/bundles/FOS/UserBundle'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($initial) ->will($this->returnValue($pearDownloader)); $manager->update($initial, $target, 'vendor/bundles/FOS/UserBundle'); } public function testUpdateDistWithNotEqualTypes() { $initial = $this->createPackageMock(); $initial ->expects($this->once()) ->method('getInstallationSource') ->will($this->returnValue('dist')); $initial ->expects($this->once()) ->method('getDistType') ->will($this->returnValue('pear')); $target = $this->createPackageMock(); $target ->expects($this->once()) ->method('getDistType') ->will($this->returnValue('composer')); $pearDownloader = $this->createDownloaderMock(); $pearDownloader ->expects($this->once()) ->method('remove') ->with($initial, 'vendor/bundles/FOS/UserBundle'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage', 'download')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($initial) ->will($this->returnValue($pearDownloader)); $manager ->expects($this->once()) ->method('download') ->with($target, 'vendor/bundles/FOS/UserBundle', false); $manager->update($initial, $target, 'vendor/bundles/FOS/UserBundle'); } public function testUpdateSourceWithEqualTypes() { $initial = $this->createPackageMock(); $initial ->expects($this->once()) ->method('getInstallationSource') ->will($this->returnValue('source')); $initial ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue('svn')); $target = $this->createPackageMock(); $target ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue('svn')); $svnDownloader = $this->createDownloaderMock(); $svnDownloader ->expects($this->once()) ->method('update') ->with($initial, $target, 'vendor/pkg'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage', 'download')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($initial) ->will($this->returnValue($svnDownloader)); $manager->update($initial, $target, 'vendor/pkg'); } public function testUpdateSourceWithNotEqualTypes() { $initial = $this->createPackageMock(); $initial ->expects($this->once()) ->method('getInstallationSource') ->will($this->returnValue('source')); $initial ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue('svn')); $target = $this->createPackageMock(); $target ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue('git')); $svnDownloader = $this->createDownloaderMock(); $svnDownloader ->expects($this->once()) ->method('remove') ->with($initial, 'vendor/pkg'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage', 'download')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($initial) ->will($this->returnValue($svnDownloader)); $manager ->expects($this->once()) ->method('download') ->with($target, 'vendor/pkg', true); $manager->update($initial, $target, 'vendor/pkg'); } public function testUpdateMetapackage() { $initial = $this->createPackageMock(); $target = $this->createPackageMock(); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($initial) ->will($this->returnValue(null)); // There is no downloader for metapackages. $manager->update($initial, $target, 'vendor/pkg'); } public function testRemove() { $package = $this->createPackageMock(); $pearDownloader = $this->createDownloaderMock(); $pearDownloader ->expects($this->once()) ->method('remove') ->with($package, 'vendor/bundles/FOS/UserBundle'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($package) ->will($this->returnValue($pearDownloader)); $manager->remove($package, 'vendor/bundles/FOS/UserBundle'); } public function testMetapackageRemove() { $package = $this->createPackageMock(); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($package) ->will($this->returnValue(null)); // There is no downloader for metapackages. $manager->remove($package, 'vendor/bundles/FOS/UserBundle'); } /** * @covers Composer\Downloader\DownloadManager::resolvePackageInstallPreference */ public function testInstallPreferenceWithoutPreferenceDev() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue('git')); $package ->expects($this->once()) ->method('getDistType') ->will($this->returnValue('pear')); $package ->expects($this->once()) ->method('isDev') ->will($this->returnValue(true)); $package ->expects($this->once()) ->method('setInstallationSource') ->with('source'); $downloader = $this->createDownloaderMock(); $downloader ->expects($this->once()) ->method('download') ->with($package, 'target_dir'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($package) ->will($this->returnValue($downloader)); $manager->download($package, 'target_dir'); } /** * @covers Composer\Downloader\DownloadManager::resolvePackageInstallPreference */ public function testInstallPreferenceWithoutPreferenceNoDev() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue('git')); $package ->expects($this->once()) ->method('getDistType') ->will($this->returnValue('pear')); $package ->expects($this->once()) ->method('isDev') ->will($this->returnValue(false)); $package ->expects($this->once()) ->method('setInstallationSource') ->with('dist'); $downloader = $this->createDownloaderMock(); $downloader ->expects($this->once()) ->method('download') ->with($package, 'target_dir'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($package) ->will($this->returnValue($downloader)); $manager->download($package, 'target_dir'); } /** * @covers Composer\Downloader\DownloadManager::resolvePackageInstallPreference */ public function testInstallPreferenceWithoutMatchDev() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue('git')); $package ->expects($this->once()) ->method('getDistType') ->will($this->returnValue('pear')); $package ->expects($this->once()) ->method('isDev') ->will($this->returnValue(true)); $package ->expects($this->once()) ->method('getName') ->will($this->returnValue('bar/package')); $package ->expects($this->once()) ->method('setInstallationSource') ->with('source'); $downloader = $this->createDownloaderMock(); $downloader ->expects($this->once()) ->method('download') ->with($package, 'target_dir'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($package) ->will($this->returnValue($downloader)); $manager->setPreferences(array('foo/*' => 'source')); $manager->download($package, 'target_dir'); } /** * @covers Composer\Downloader\DownloadManager::resolvePackageInstallPreference */ public function testInstallPreferenceWithoutMatchNoDev() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue('git')); $package ->expects($this->once()) ->method('getDistType') ->will($this->returnValue('pear')); $package ->expects($this->once()) ->method('isDev') ->will($this->returnValue(false)); $package ->expects($this->once()) ->method('getName') ->will($this->returnValue('bar/package')); $package ->expects($this->once()) ->method('setInstallationSource') ->with('dist'); $downloader = $this->createDownloaderMock(); $downloader ->expects($this->once()) ->method('download') ->with($package, 'target_dir'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($package) ->will($this->returnValue($downloader)); $manager->setPreferences(array('foo/*' => 'source')); $manager->download($package, 'target_dir'); } /** * @covers Composer\Downloader\DownloadManager::resolvePackageInstallPreference */ public function testInstallPreferenceWithMatchAutoDev() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue('git')); $package ->expects($this->once()) ->method('getDistType') ->will($this->returnValue('pear')); $package ->expects($this->once()) ->method('isDev') ->will($this->returnValue(true)); $package ->expects($this->once()) ->method('getName') ->will($this->returnValue('foo/package')); $package ->expects($this->once()) ->method('setInstallationSource') ->with('source'); $downloader = $this->createDownloaderMock(); $downloader ->expects($this->once()) ->method('download') ->with($package, 'target_dir'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($package) ->will($this->returnValue($downloader)); $manager->setPreferences(array('foo/*' => 'auto')); $manager->download($package, 'target_dir'); } /** * @covers Composer\Downloader\DownloadManager::resolvePackageInstallPreference */ public function testInstallPreferenceWithMatchAutoNoDev() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue('git')); $package ->expects($this->once()) ->method('getDistType') ->will($this->returnValue('pear')); $package ->expects($this->once()) ->method('isDev') ->will($this->returnValue(false)); $package ->expects($this->once()) ->method('getName') ->will($this->returnValue('foo/package')); $package ->expects($this->once()) ->method('setInstallationSource') ->with('dist'); $downloader = $this->createDownloaderMock(); $downloader ->expects($this->once()) ->method('download') ->with($package, 'target_dir'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($package) ->will($this->returnValue($downloader)); $manager->setPreferences(array('foo/*' => 'auto')); $manager->download($package, 'target_dir'); } /** * @covers Composer\Downloader\DownloadManager::resolvePackageInstallPreference */ public function testInstallPreferenceWithMatchSource() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue('git')); $package ->expects($this->once()) ->method('getDistType') ->will($this->returnValue('pear')); $package ->expects($this->once()) ->method('getName') ->will($this->returnValue('foo/package')); $package ->expects($this->once()) ->method('setInstallationSource') ->with('source'); $downloader = $this->createDownloaderMock(); $downloader ->expects($this->once()) ->method('download') ->with($package, 'target_dir'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($package) ->will($this->returnValue($downloader)); $manager->setPreferences(array('foo/*' => 'source')); $manager->download($package, 'target_dir'); } /** * @covers Composer\Downloader\DownloadManager::resolvePackageInstallPreference */ public function testInstallPreferenceWithMatchDist() { $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getSourceType') ->will($this->returnValue('git')); $package ->expects($this->once()) ->method('getDistType') ->will($this->returnValue('pear')); $package ->expects($this->once()) ->method('getName') ->will($this->returnValue('foo/package')); $package ->expects($this->once()) ->method('setInstallationSource') ->with('dist'); $downloader = $this->createDownloaderMock(); $downloader ->expects($this->once()) ->method('download') ->with($package, 'target_dir'); $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->setConstructorArgs(array($this->io, false, $this->filesystem)) ->setMethods(array('getDownloaderForInstalledPackage')) ->getMock(); $manager ->expects($this->once()) ->method('getDownloaderForInstalledPackage') ->with($package) ->will($this->returnValue($downloader)); $manager->setPreferences(array('foo/*' => 'dist')); $manager->download($package, 'target_dir'); } private function createDownloaderMock() { return $this->getMockBuilder('Composer\Downloader\DownloaderInterface') ->getMock(); } private function createPackageMock() { return $this->getMockBuilder('Composer\Package\PackageInterface') ->getMock(); } } composer-1.0.0-beta2/tests/Composer/Test/Downloader/FileDownloaderTest.php000066400000000000000000000160031267577262200265670ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Downloader; use Composer\Downloader\FileDownloader; use Composer\TestCase; use Composer\Util\Filesystem; class FileDownloaderTest extends TestCase { protected function getDownloader($io = null, $config = null, $eventDispatcher = null, $cache = null, $rfs = null, $filesystem = null) { $io = $io ?: $this->getMock('Composer\IO\IOInterface'); $config = $config ?: $this->getMock('Composer\Config'); $rfs = $rfs ?: $this->getMockBuilder('Composer\Util\RemoteFilesystem')->disableOriginalConstructor()->getMock(); return new FileDownloader($io, $config, $eventDispatcher, $cache, $rfs, $filesystem); } /** * @expectedException \InvalidArgumentException */ public function testDownloadForPackageWithoutDistReference() { $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->once()) ->method('getDistUrl') ->will($this->returnValue(null)) ; $downloader = $this->getDownloader(); $downloader->download($packageMock, '/path'); } public function testDownloadToExistingFile() { $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->once()) ->method('getDistUrl') ->will($this->returnValue('url')) ; $packageMock->expects($this->once()) ->method('getDistUrls') ->will($this->returnValue(array('url'))) ; $path = tempnam($this->getUniqueTmpDirectory(), 'c'); $downloader = $this->getDownloader(); try { $downloader->download($packageMock, $path); $this->fail(); } catch (\Exception $e) { if (is_dir($path)) { $fs = new Filesystem(); $fs->removeDirectory($path); } elseif (is_file($path)) { unlink($path); } $this->assertInstanceOf('RuntimeException', $e); $this->assertContains('exists and is not a directory', $e->getMessage()); } } public function testGetFileName() { $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->once()) ->method('getDistUrl') ->will($this->returnValue('http://example.com/script.js')) ; $downloader = $this->getDownloader(); $method = new \ReflectionMethod($downloader, 'getFileName'); $method->setAccessible(true); $this->assertEquals('/path/script.js', $method->invoke($downloader, $packageMock, '/path')); } public function testDownloadButFileIsUnsaved() { $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->any()) ->method('getDistUrl') ->will($this->returnValue($distUrl = 'http://example.com/script.js')) ; $packageMock->expects($this->once()) ->method('getDistUrls') ->will($this->returnValue(array($distUrl))) ; $packageMock->expects($this->atLeastOnce()) ->method('getTransportOptions') ->will($this->returnValue(array())) ; $path = $this->getUniqueTmpDirectory(); $ioMock = $this->getMock('Composer\IO\IOInterface'); $ioMock->expects($this->any()) ->method('write') ->will($this->returnCallback(function ($messages, $newline = true) use ($path) { if (is_file($path.'/script.js')) { unlink($path.'/script.js'); } return $messages; })) ; $downloader = $this->getDownloader($ioMock); try { $downloader->download($packageMock, $path); $this->fail(); } catch (\Exception $e) { if (is_dir($path)) { $fs = new Filesystem(); $fs->removeDirectory($path); } elseif (is_file($path)) { unlink($path); } $this->assertInstanceOf('UnexpectedValueException', $e); $this->assertContains('could not be saved to', $e->getMessage()); } } public function testCacheGarbageCollectionIsCalled() { $expectedTtl = '99999999'; $configMock = $this->getMock('Composer\Config'); $configMock ->expects($this->at(0)) ->method('get') ->with('cache-files-ttl') ->will($this->returnValue($expectedTtl)); $configMock ->expects($this->at(1)) ->method('get') ->with('cache-files-maxsize') ->will($this->returnValue('500M')); $cacheMock = $this->getMockBuilder('Composer\Cache') ->disableOriginalConstructor() ->getMock(); $cacheMock ->expects($this->any()) ->method('gcIsNecessary') ->will($this->returnValue(true)); $cacheMock ->expects($this->once()) ->method('gc') ->with($expectedTtl, $this->anything()); $downloader = $this->getDownloader(null, $configMock, null, $cacheMock, null, null); } public function testDownloadFileWithInvalidChecksum() { $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->any()) ->method('getDistUrl') ->will($this->returnValue($distUrl = 'http://example.com/script.js')) ; $packageMock->expects($this->atLeastOnce()) ->method('getTransportOptions') ->will($this->returnValue(array())) ; $packageMock->expects($this->any()) ->method('getDistSha1Checksum') ->will($this->returnValue('invalid')) ; $packageMock->expects($this->once()) ->method('getDistUrls') ->will($this->returnValue(array($distUrl))) ; $filesystem = $this->getMock('Composer\Util\Filesystem'); $path = $this->getUniqueTmpDirectory(); $downloader = $this->getDownloader(null, null, null, null, null, $filesystem); // make sure the file expected to be downloaded is on disk already touch($path.'/script.js'); try { $downloader->download($packageMock, $path); $this->fail(); } catch (\Exception $e) { if (is_dir($path)) { $fs = new Filesystem(); $fs->removeDirectory($path); } elseif (is_file($path)) { unlink($path); } $this->assertInstanceOf('UnexpectedValueException', $e); $this->assertContains('checksum verification', $e->getMessage()); } } } composer-1.0.0-beta2/tests/Composer/Test/Downloader/Fixtures/000077500000000000000000000000001267577262200241315ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Downloader/Fixtures/Package_v1.0/000077500000000000000000000000001267577262200262305ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Downloader/Fixtures/Package_v1.0/package.xml000066400000000000000000000016241267577262200303500ustar00rootroot00000000000000 PEAR_Frontend_Gtk Gtk (Desktop) PEAR Package Manager 0.4.0 2005-03-14 PHP License beta Implement channels, support PEAR 1.4.0 (Greg Beaver) Tidy up logging a little. composer-1.0.0-beta2/tests/Composer/Test/Downloader/Fixtures/Package_v2.0/000077500000000000000000000000001267577262200262315ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Downloader/Fixtures/Package_v2.0/package.xml000066400000000000000000000020641267577262200303500ustar00rootroot00000000000000 Net_URL pear.php.net Easy parsing of Urls Provides easy parsing of URLs and their constituent parts. 1.0.15 1.0.15 composer-1.0.0-beta2/tests/Composer/Test/Downloader/Fixtures/Package_v2.1/000077500000000000000000000000001267577262200262325ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Downloader/Fixtures/Package_v2.1/package.xml000066400000000000000000000030111267577262200303420ustar00rootroot00000000000000 Zend_Authentication packages.zendframework.com Package Zend_Authentication summary.\n\n" . "Package detailed description here (found in README) 2.0.0beta4 2.0.0beta4 beta beta composer-1.0.0-beta2/tests/Composer/Test/Downloader/GitDownloaderTest.php000066400000000000000000000474471267577262200264530ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Downloader; use Composer\Downloader\GitDownloader; use Composer\Config; use Composer\TestCase; use Composer\Util\Filesystem; use Composer\Util\Platform; class GitDownloaderTest extends TestCase { /** @var Filesystem */ private $fs; /** @var string */ private $workingDir; protected function setUp() { $this->fs = new Filesystem; $this->workingDir = $this->getUniqueTmpDirectory(); } protected function tearDown() { if (is_dir($this->workingDir)) { $this->fs->removeDirectory($this->workingDir); } } protected function getDownloaderMock($io = null, $config = null, $executor = null, $filesystem = null) { $io = $io ?: $this->getMock('Composer\IO\IOInterface'); $executor = $executor ?: $this->getMock('Composer\Util\ProcessExecutor'); $filesystem = $filesystem ?: $this->getMock('Composer\Util\Filesystem'); if (!$config) { $config = new Config(); } return new GitDownloader($io, $config, $executor, $filesystem); } /** * @expectedException \InvalidArgumentException */ public function testDownloadForPackageWithoutSourceReference() { $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->once()) ->method('getSourceReference') ->will($this->returnValue(null)); $downloader = $this->getDownloaderMock(); $downloader->download($packageMock, '/path'); } public function testDownload() { $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->any()) ->method('getSourceReference') ->will($this->returnValue('1234567890123456789012345678901234567890')); $packageMock->expects($this->any()) ->method('getSourceUrls') ->will($this->returnValue(array('https://example.com/composer/composer'))); $packageMock->expects($this->any()) ->method('getSourceUrl') ->will($this->returnValue('https://example.com/composer/composer')); $packageMock->expects($this->any()) ->method('getPrettyVersion') ->will($this->returnValue('dev-master')); $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); $expectedGitCommand = $this->winCompat("git clone --no-checkout 'https://example.com/composer/composer' 'composerPath' && cd 'composerPath' && git remote add composer 'https://example.com/composer/composer' && git fetch composer"); $processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedGitCommand)) ->will($this->returnValue(0)); $processExecutor->expects($this->at(1)) ->method('execute') ->with($this->equalTo($this->winCompat("git branch -r")), $this->equalTo(null), $this->equalTo($this->winCompat('composerPath'))) ->will($this->returnValue(0)); $processExecutor->expects($this->at(2)) ->method('execute') ->with($this->equalTo($this->winCompat("git checkout 'master' --")), $this->equalTo(null), $this->equalTo($this->winCompat('composerPath'))) ->will($this->returnValue(0)); $processExecutor->expects($this->at(3)) ->method('execute') ->with($this->equalTo($this->winCompat("git reset --hard '1234567890123456789012345678901234567890' --")), $this->equalTo(null), $this->equalTo($this->winCompat('composerPath'))) ->will($this->returnValue(0)); $downloader = $this->getDownloaderMock(null, null, $processExecutor); $downloader->download($packageMock, 'composerPath'); } public function testDownloadUsesVariousProtocolsAndSetsPushUrlForGithub() { $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->any()) ->method('getSourceReference') ->will($this->returnValue('ref')); $packageMock->expects($this->any()) ->method('getSourceUrls') ->will($this->returnValue(array('https://github.com/mirrors/composer', 'https://github.com/composer/composer'))); $packageMock->expects($this->any()) ->method('getSourceUrl') ->will($this->returnValue('https://github.com/composer/composer')); $packageMock->expects($this->any()) ->method('getPrettyVersion') ->will($this->returnValue('1.0.0')); $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); $expectedGitCommand = $this->winCompat("git clone --no-checkout 'https://github.com/mirrors/composer' 'composerPath' && cd 'composerPath' && git remote add composer 'https://github.com/mirrors/composer' && git fetch composer"); $processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedGitCommand)) ->will($this->returnValue(1)); $processExecutor->expects($this->at(1)) ->method('getErrorOutput') ->with() ->will($this->returnValue('Error1')); $expectedGitCommand = $this->winCompat("git clone --no-checkout 'git@github.com:mirrors/composer' 'composerPath' && cd 'composerPath' && git remote add composer 'git@github.com:mirrors/composer' && git fetch composer"); $processExecutor->expects($this->at(2)) ->method('execute') ->with($this->equalTo($expectedGitCommand)) ->will($this->returnValue(0)); $expectedGitCommand = $this->winCompat("git remote set-url origin 'https://github.com/composer/composer'"); $processExecutor->expects($this->at(3)) ->method('execute') ->with($this->equalTo($expectedGitCommand), $this->equalTo(null), $this->equalTo($this->winCompat('composerPath'))) ->will($this->returnValue(0)); $expectedGitCommand = $this->winCompat("git remote set-url --push origin 'git@github.com:composer/composer.git'"); $processExecutor->expects($this->at(4)) ->method('execute') ->with($this->equalTo($expectedGitCommand), $this->equalTo(null), $this->equalTo($this->winCompat('composerPath'))) ->will($this->returnValue(0)); $processExecutor->expects($this->at(5)) ->method('execute') ->with($this->equalTo('git branch -r')) ->will($this->returnValue(0)); $processExecutor->expects($this->at(6)) ->method('execute') ->with($this->equalTo($this->winCompat("git checkout 'ref' -- && git reset --hard 'ref' --")), $this->equalTo(null), $this->equalTo($this->winCompat('composerPath'))) ->will($this->returnValue(0)); $downloader = $this->getDownloaderMock(null, new Config(), $processExecutor); $downloader->download($packageMock, 'composerPath'); } public function pushUrlProvider() { return array( // ssh proto should use git@ all along array(array('ssh'), 'git@github.com:composer/composer', 'git@github.com:composer/composer.git'), // auto-proto uses git@ by default for push url, but not fetch array(array('https', 'ssh', 'git'), 'https://github.com/composer/composer', 'git@github.com:composer/composer.git'), // if restricted to https then push url is not overwritten to git@ array(array('https'), 'https://github.com/composer/composer', 'https://github.com/composer/composer.git'), ); } /** * @dataProvider pushUrlProvider */ public function testDownloadAndSetPushUrlUseCustomVariousProtocolsForGithub($protocols, $url, $pushUrl) { $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->any()) ->method('getSourceReference') ->will($this->returnValue('ref')); $packageMock->expects($this->any()) ->method('getSourceUrls') ->will($this->returnValue(array('https://github.com/composer/composer'))); $packageMock->expects($this->any()) ->method('getSourceUrl') ->will($this->returnValue('https://github.com/composer/composer')); $packageMock->expects($this->any()) ->method('getPrettyVersion') ->will($this->returnValue('1.0.0')); $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); $expectedGitCommand = $this->winCompat("git clone --no-checkout '{$url}' 'composerPath' && cd 'composerPath' && git remote add composer '{$url}' && git fetch composer"); $processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedGitCommand)) ->will($this->returnValue(0)); $expectedGitCommand = $this->winCompat("git remote set-url --push origin '{$pushUrl}'"); $processExecutor->expects($this->at(1)) ->method('execute') ->with($this->equalTo($expectedGitCommand), $this->equalTo(null), $this->equalTo($this->winCompat('composerPath'))) ->will($this->returnValue(0)); $processExecutor->expects($this->exactly(4)) ->method('execute') ->will($this->returnValue(0)); $config = new Config(); $config->merge(array('config' => array('github-protocols' => $protocols))); $downloader = $this->getDownloaderMock(null, $config, $processExecutor); $downloader->download($packageMock, 'composerPath'); } /** * @expectedException \RuntimeException */ public function testDownloadThrowsRuntimeExceptionIfGitCommandFails() { $expectedGitCommand = $this->winCompat("git clone --no-checkout 'https://example.com/composer/composer' 'composerPath' && cd 'composerPath' && git remote add composer 'https://example.com/composer/composer' && git fetch composer"); $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->any()) ->method('getSourceReference') ->will($this->returnValue('ref')); $packageMock->expects($this->any()) ->method('getSourceUrls') ->will($this->returnValue(array('https://example.com/composer/composer'))); $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); $processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedGitCommand)) ->will($this->returnValue(1)); $downloader = $this->getDownloaderMock(null, null, $processExecutor); $downloader->download($packageMock, 'composerPath'); } /** * @expectedException \InvalidArgumentException */ public function testUpdateforPackageWithoutSourceReference() { $initialPackageMock = $this->getMock('Composer\Package\PackageInterface'); $sourcePackageMock = $this->getMock('Composer\Package\PackageInterface'); $sourcePackageMock->expects($this->once()) ->method('getSourceReference') ->will($this->returnValue(null)); $downloader = $this->getDownloaderMock(); $downloader->update($initialPackageMock, $sourcePackageMock, '/path'); } public function testUpdate() { $expectedGitUpdateCommand = $this->winCompat("git remote set-url composer 'https://github.com/composer/composer' && git fetch composer && git fetch --tags composer"); $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->any()) ->method('getSourceReference') ->will($this->returnValue('ref')); $packageMock->expects($this->any()) ->method('getSourceUrls') ->will($this->returnValue(array('https://github.com/composer/composer'))); $packageMock->expects($this->any()) ->method('getPrettyVersion') ->will($this->returnValue('1.0.0')); $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); $processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($this->winCompat("git show-ref --head -d"))) ->will($this->returnValue(0)); $processExecutor->expects($this->at(1)) ->method('execute') ->with($this->equalTo($this->winCompat("git status --porcelain --untracked-files=no"))) ->will($this->returnValue(0)); $processExecutor->expects($this->at(2)) ->method('execute') ->with($this->equalTo($this->winCompat("git remote -v"))) ->will($this->returnValue(0)); $processExecutor->expects($this->at(3)) ->method('execute') ->with($this->equalTo($this->winCompat($expectedGitUpdateCommand)), $this->equalTo(null), $this->equalTo($this->winCompat($this->workingDir))) ->will($this->returnValue(0)); $processExecutor->expects($this->at(4)) ->method('execute') ->with($this->equalTo('git branch -r')) ->will($this->returnValue(0)); $processExecutor->expects($this->at(5)) ->method('execute') ->with($this->equalTo($this->winCompat("git checkout 'ref' -- && git reset --hard 'ref' --")), $this->equalTo(null), $this->equalTo($this->winCompat($this->workingDir))) ->will($this->returnValue(0)); $this->fs->ensureDirectoryExists($this->workingDir.'/.git'); $downloader = $this->getDownloaderMock(null, new Config(), $processExecutor); $downloader->update($packageMock, $packageMock, $this->workingDir); } /** * @group failing * @expectedException \RuntimeException */ public function testUpdateThrowsRuntimeExceptionIfGitCommandFails() { $expectedGitUpdateCommand = $this->winCompat("git remote set-url composer 'https://github.com/composer/composer' && git fetch composer && git fetch --tags composer"); $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->any()) ->method('getSourceReference') ->will($this->returnValue('ref')); $packageMock->expects($this->any()) ->method('getSourceUrls') ->will($this->returnValue(array('https://github.com/composer/composer'))); $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); $processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($this->winCompat("git show-ref --head -d"))) ->will($this->returnValue(0)); $processExecutor->expects($this->at(1)) ->method('execute') ->with($this->equalTo($this->winCompat("git status --porcelain --untracked-files=no"))) ->will($this->returnValue(0)); $processExecutor->expects($this->at(2)) ->method('execute') ->with($this->equalTo($this->winCompat("git remote -v"))) ->will($this->returnValue(0)); $processExecutor->expects($this->at(3)) ->method('execute') ->with($this->equalTo($expectedGitUpdateCommand)) ->will($this->returnValue(1)); $this->fs->ensureDirectoryExists($this->workingDir.'/.git'); $downloader = $this->getDownloaderMock(null, new Config(), $processExecutor); $downloader->update($packageMock, $packageMock, $this->workingDir); } public function testUpdateDoesntThrowsRuntimeExceptionIfGitCommandFailsAtFirstButIsAbleToRecover() { $expectedFirstGitUpdateCommand = $this->winCompat("git remote set-url composer '' && git fetch composer && git fetch --tags composer"); $expectedSecondGitUpdateCommand = $this->winCompat("git remote set-url composer 'https://github.com/composer/composer' && git fetch composer && git fetch --tags composer"); $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->any()) ->method('getSourceReference') ->will($this->returnValue('ref')); $packageMock->expects($this->any()) ->method('getSourceUrls') ->will($this->returnValue(array('/foo/bar', 'https://github.com/composer/composer'))); $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); $processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($this->winCompat("git show-ref --head -d"))) ->will($this->returnValue(0)); $processExecutor->expects($this->at(1)) ->method('execute') ->with($this->equalTo($this->winCompat("git status --porcelain --untracked-files=no"))) ->will($this->returnValue(0)); $processExecutor->expects($this->at(2)) ->method('execute') ->with($this->equalTo($this->winCompat("git remote -v"))) ->will($this->returnValue(0)); $processExecutor->expects($this->at(3)) ->method('execute') ->with($this->equalTo($expectedFirstGitUpdateCommand)) ->will($this->returnValue(1)); $processExecutor->expects($this->at(5)) ->method('execute') ->with($this->equalTo($this->winCompat("git --version"))) ->will($this->returnValue(0)); $processExecutor->expects($this->at(6)) ->method('execute') ->with($this->equalTo($this->winCompat("git remote -v"))) ->will($this->returnValue(0)); $processExecutor->expects($this->at(7)) ->method('execute') ->with($this->equalTo($expectedSecondGitUpdateCommand)) ->will($this->returnValue(0)); $processExecutor->expects($this->at(9)) ->method('execute') ->with($this->equalTo($this->winCompat("git checkout 'ref' -- && git reset --hard 'ref' --")), $this->equalTo(null), $this->equalTo($this->winCompat($this->workingDir))) ->will($this->returnValue(0)); $this->fs->ensureDirectoryExists($this->workingDir.'/.git'); $downloader = $this->getDownloaderMock(null, new Config(), $processExecutor); $downloader->update($packageMock, $packageMock, $this->workingDir); } public function testRemove() { $expectedGitResetCommand = $this->winCompat("cd 'composerPath' && git status --porcelain --untracked-files=no"); $packageMock = $this->getMock('Composer\Package\PackageInterface'); $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); $processExecutor->expects($this->any()) ->method('execute') ->with($this->equalTo($expectedGitResetCommand)) ->will($this->returnValue(0)); $filesystem = $this->getMock('Composer\Util\Filesystem'); $filesystem->expects($this->any()) ->method('removeDirectory') ->with($this->equalTo('composerPath')) ->will($this->returnValue(true)); $downloader = $this->getDownloaderMock(null, null, $processExecutor, $filesystem); $downloader->remove($packageMock, 'composerPath'); } public function testGetInstallationSource() { $downloader = $this->getDownloaderMock(); $this->assertEquals('source', $downloader->getInstallationSource()); } private function winCompat($cmd) { if (Platform::isWindows()) { $cmd = str_replace('cd ', 'cd /D ', $cmd); $cmd = str_replace('composerPath', getcwd().'/composerPath', $cmd); return str_replace('""', '', strtr($cmd, "'", '"')); } return $cmd; } } composer-1.0.0-beta2/tests/Composer/Test/Downloader/HgDownloaderTest.php000066400000000000000000000134071267577262200262530ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Downloader; use Composer\Downloader\HgDownloader; use Composer\TestCase; use Composer\Util\Filesystem; use Composer\Util\Platform; class HgDownloaderTest extends TestCase { /** @var string */ private $workingDir; protected function setUp() { $this->workingDir = $this->getUniqueTmpDirectory(); } protected function tearDown() { if (is_dir($this->workingDir)) { $fs = new Filesystem; $fs->removeDirectory($this->workingDir); } } protected function getDownloaderMock($io = null, $config = null, $executor = null, $filesystem = null) { $io = $io ?: $this->getMock('Composer\IO\IOInterface'); $config = $config ?: $this->getMock('Composer\Config'); $executor = $executor ?: $this->getMock('Composer\Util\ProcessExecutor'); $filesystem = $filesystem ?: $this->getMock('Composer\Util\Filesystem'); return new HgDownloader($io, $config, $executor, $filesystem); } /** * @expectedException \InvalidArgumentException */ public function testDownloadForPackageWithoutSourceReference() { $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->once()) ->method('getSourceReference') ->will($this->returnValue(null)); $downloader = $this->getDownloaderMock(); $downloader->download($packageMock, '/path'); } public function testDownload() { $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->any()) ->method('getSourceReference') ->will($this->returnValue('ref')); $packageMock->expects($this->once()) ->method('getSourceUrls') ->will($this->returnValue(array('https://mercurial.dev/l3l0/composer'))); $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); $expectedGitCommand = $this->getCmd('hg clone \'https://mercurial.dev/l3l0/composer\' \'composerPath\''); $processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedGitCommand)) ->will($this->returnValue(0)); $expectedGitCommand = $this->getCmd('hg up \'ref\''); $processExecutor->expects($this->at(1)) ->method('execute') ->with($this->equalTo($expectedGitCommand)) ->will($this->returnValue(0)); $downloader = $this->getDownloaderMock(null, null, $processExecutor); $downloader->download($packageMock, 'composerPath'); } /** * @expectedException \InvalidArgumentException */ public function testUpdateforPackageWithoutSourceReference() { $initialPackageMock = $this->getMock('Composer\Package\PackageInterface'); $sourcePackageMock = $this->getMock('Composer\Package\PackageInterface'); $sourcePackageMock->expects($this->once()) ->method('getSourceReference') ->will($this->returnValue(null)); $downloader = $this->getDownloaderMock(); $downloader->update($initialPackageMock, $sourcePackageMock, '/path'); } public function testUpdate() { $fs = new Filesystem; $fs->ensureDirectoryExists($this->workingDir.'/.hg'); $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->any()) ->method('getSourceReference') ->will($this->returnValue('ref')); $packageMock->expects($this->any()) ->method('getSourceUrls') ->will($this->returnValue(array('https://github.com/l3l0/composer'))); $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); $expectedHgCommand = $this->getCmd("hg st"); $processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedHgCommand)) ->will($this->returnValue(0)); $expectedHgCommand = $this->getCmd("hg pull 'https://github.com/l3l0/composer' && hg up 'ref'"); $processExecutor->expects($this->at(1)) ->method('execute') ->with($this->equalTo($expectedHgCommand)) ->will($this->returnValue(0)); $downloader = $this->getDownloaderMock(null, null, $processExecutor); $downloader->update($packageMock, $packageMock, $this->workingDir); } public function testRemove() { $expectedResetCommand = $this->getCmd('cd \'composerPath\' && hg st'); $packageMock = $this->getMock('Composer\Package\PackageInterface'); $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); $processExecutor->expects($this->any()) ->method('execute') ->with($this->equalTo($expectedResetCommand)); $filesystem = $this->getMock('Composer\Util\Filesystem'); $filesystem->expects($this->any()) ->method('removeDirectory') ->with($this->equalTo('composerPath')) ->will($this->returnValue(true)); $downloader = $this->getDownloaderMock(null, null, $processExecutor, $filesystem); $downloader->remove($packageMock, 'composerPath'); } public function testGetInstallationSource() { $downloader = $this->getDownloaderMock(null); $this->assertEquals('source', $downloader->getInstallationSource()); } private function getCmd($cmd) { return Platform::isWindows() ? strtr($cmd, "'", '"') : $cmd; } } composer-1.0.0-beta2/tests/Composer/Test/Downloader/PearPackageExtractorTest.php000066400000000000000000000124571267577262200277410ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Downloader; use Composer\Downloader\PearPackageExtractor; use Composer\TestCase; class PearPackageExtractorTest extends TestCase { public function testShouldExtractPackage_1_0() { $state = libxml_disable_entity_loader(true); $extractor = $this->getMockForAbstractClass('Composer\Downloader\PearPackageExtractor', array(), '', false); $method = new \ReflectionMethod($extractor, 'buildCopyActions'); $method->setAccessible(true); $fileActions = $method->invoke($extractor, __DIR__ . '/Fixtures/Package_v1.0', array('php' => '/'), array()); libxml_disable_entity_loader($state); $expectedFileActions = array( 'Gtk.php' => array( 'from' => 'PEAR_Frontend_Gtk-0.4.0/Gtk.php', 'to' => 'PEAR/Frontend/Gtk.php', 'role' => 'php', 'tasks' => array(), ), 'Gtk/Config.php' => array( 'from' => 'PEAR_Frontend_Gtk-0.4.0/Gtk/Config.php', 'to' => 'PEAR/Frontend/Gtk/Config.php', 'role' => 'php', 'tasks' => array(), ), 'Gtk/xpm/black_close_icon.xpm' => array( 'from' => 'PEAR_Frontend_Gtk-0.4.0/Gtk/xpm/black_close_icon.xpm', 'to' => 'PEAR/Frontend/Gtk/xpm/black_close_icon.xpm', 'role' => 'php', 'tasks' => array(), ), ); $this->assertSame($expectedFileActions, $fileActions); } public function testShouldExtractPackage_2_0() { $state = libxml_disable_entity_loader(true); $extractor = $this->getMockForAbstractClass('Composer\Downloader\PearPackageExtractor', array(), '', false); $method = new \ReflectionMethod($extractor, 'buildCopyActions'); $method->setAccessible(true); $fileActions = $method->invoke($extractor, __DIR__ . '/Fixtures/Package_v2.0', array('php' => '/'), array()); libxml_disable_entity_loader($state); $expectedFileActions = array( 'URL.php' => array( 'from' => 'Net_URL-1.0.15/URL.php', 'to' => 'Net/URL.php', 'role' => 'php', 'tasks' => array(), ), ); $this->assertSame($expectedFileActions, $fileActions); } public function testShouldExtractPackage_2_1() { $state = libxml_disable_entity_loader(true); $extractor = $this->getMockForAbstractClass('Composer\Downloader\PearPackageExtractor', array(), '', false); $method = new \ReflectionMethod($extractor, 'buildCopyActions'); $method->setAccessible(true); $fileActions = $method->invoke($extractor, __DIR__ . '/Fixtures/Package_v2.1', array('php' => '/', 'script' => '/bin'), array()); libxml_disable_entity_loader($state); $expectedFileActions = array( 'php/Zend/Authentication/Storage/StorageInterface.php' => array( 'from' => 'Zend_Authentication-2.0.0beta4/php/Zend/Authentication/Storage/StorageInterface.php', 'to' => '/php/Zend/Authentication/Storage/StorageInterface.php', 'role' => 'php', 'tasks' => array(), ), 'php/Zend/Authentication/Result.php' => array( 'from' => 'Zend_Authentication-2.0.0beta4/php/Zend/Authentication/Result.php', 'to' => '/php/Zend/Authentication/Result.php', 'role' => 'php', 'tasks' => array(), ), 'php/Test.php' => array( 'from' => 'Zend_Authentication-2.0.0beta4/php/Test.php', 'to' => '/php/Test.php', 'role' => 'script', 'tasks' => array( array( 'from' => '@version@', 'to' => 'version', ), ), ), 'renamedFile.php' => array( 'from' => 'Zend_Authentication-2.0.0beta4/renamedFile.php', 'to' => 'correctFile.php', 'role' => 'php', 'tasks' => array(), ), ); $this->assertSame($expectedFileActions, $fileActions); } public function testShouldPerformReplacements() { $from = tempnam($this->getUniqueTmpDirectory(), 'pear-extract'); $to = $from.'-to'; $original = 'replaced: @placeholder@; not replaced: @another@; replaced again: @placeholder@'; $expected = 'replaced: value; not replaced: @another@; replaced again: value'; file_put_contents($from, $original); $extractor = new PearPackageExtractor($from); $method = new \ReflectionMethod($extractor, 'copyFile'); $method->setAccessible(true); $method->invoke($extractor, $from, $to, array(array('from' => '@placeholder@', 'to' => 'variable')), array('variable' => 'value')); $result = file_get_contents($to); unlink($to); unlink($from); $this->assertEquals($expected, $result); } } composer-1.0.0-beta2/tests/Composer/Test/Downloader/PerforceDownloaderTest.php000066400000000000000000000151341267577262200274610ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Downloader; use Composer\Downloader\PerforceDownloader; use Composer\Config; use Composer\Repository\VcsRepository; use Composer\IO\IOInterface; use Composer\TestCase; use Composer\Util\Filesystem; /** * @author Matt Whittom */ class PerforceDownloaderTest extends TestCase { protected $config; /** @var PerforceDownloader */ protected $downloader; protected $io; protected $package; protected $processExecutor; protected $repoConfig; protected $repository; protected $testPath; protected function setUp() { $this->testPath = $this->getUniqueTmpDirectory(); $this->repoConfig = $this->getRepoConfig(); $this->config = $this->getConfig(); $this->io = $this->getMockIoInterface(); $this->processExecutor = $this->getMockProcessExecutor(); $this->repository = $this->getMockRepository($this->repoConfig, $this->io, $this->config); $this->package = $this->getMockPackageInterface($this->repository); $this->downloader = new PerforceDownloader($this->io, $this->config, $this->processExecutor); } protected function tearDown() { $this->downloader = null; $this->package = null; $this->repository = null; $this->io = null; $this->config = null; $this->repoConfig = null; if (is_dir($this->testPath)) { $fs = new Filesystem; $fs->removeDirectory($this->testPath); } } protected function getMockProcessExecutor() { return $this->getMock('Composer\Util\ProcessExecutor'); } protected function getConfig() { $config = new Config(); $settings = array('config' => array('home' => $this->testPath)); $config->merge($settings); return $config; } protected function getMockIoInterface() { return $this->getMock('Composer\IO\IOInterface'); } protected function getMockPackageInterface(VcsRepository $repository) { $package = $this->getMock('Composer\Package\PackageInterface'); $package->expects($this->any())->method('getRepository')->will($this->returnValue($repository)); return $package; } protected function getRepoConfig() { return array('url' => 'TEST_URL', 'p4user' => 'TEST_USER'); } protected function getMockRepository(array $repoConfig, IOInterface $io, Config $config) { $class = 'Composer\Repository\VcsRepository'; $methods = array('getRepoConfig'); $args = array($repoConfig, $io, $config); $repository = $this->getMock($class, $methods, $args); $repository->expects($this->any())->method('getRepoConfig')->will($this->returnValue($repoConfig)); return $repository; } public function testInitPerforceInstantiatesANewPerforceObject() { $this->downloader->initPerforce($this->package, $this->testPath, 'SOURCE_REF'); } public function testInitPerforceDoesNothingIfPerforceAlreadySet() { $perforce = $this->getMockBuilder('Composer\Util\Perforce')->disableOriginalConstructor()->getMock(); $this->downloader->setPerforce($perforce); $this->repository->expects($this->never())->method('getRepoConfig'); $this->downloader->initPerforce($this->package, $this->testPath, 'SOURCE_REF'); } /** * @depends testInitPerforceInstantiatesANewPerforceObject * @depends testInitPerforceDoesNothingIfPerforceAlreadySet */ public function testDoDownloadWithTag() { //I really don't like this test but the logic of each Perforce method is tested in the Perforce class. Really I am just enforcing workflow. $ref = 'SOURCE_REF@123'; $label = 123; $this->package->expects($this->once())->method('getSourceReference')->will($this->returnValue($ref)); $this->io->expects($this->once())->method('writeError')->with($this->stringContains('Cloning '.$ref)); $perforceMethods = array('setStream', 'p4Login', 'writeP4ClientSpec', 'connectClient', 'syncCodeBase', 'cleanupClientSpec'); $perforce = $this->getMockBuilder('Composer\Util\Perforce', $perforceMethods)->disableOriginalConstructor()->getMock(); $perforce->expects($this->at(0))->method('initializePath')->with($this->equalTo($this->testPath)); $perforce->expects($this->at(1))->method('setStream')->with($this->equalTo($ref)); $perforce->expects($this->at(2))->method('p4Login'); $perforce->expects($this->at(3))->method('writeP4ClientSpec'); $perforce->expects($this->at(4))->method('connectClient'); $perforce->expects($this->at(5))->method('syncCodeBase')->with($label); $perforce->expects($this->at(6))->method('cleanupClientSpec'); $this->downloader->setPerforce($perforce); $this->downloader->doDownload($this->package, $this->testPath, 'url'); } /** * @depends testInitPerforceInstantiatesANewPerforceObject * @depends testInitPerforceDoesNothingIfPerforceAlreadySet */ public function testDoDownloadWithNoTag() { $ref = 'SOURCE_REF'; $label = null; $this->package->expects($this->once())->method('getSourceReference')->will($this->returnValue($ref)); $this->io->expects($this->once())->method('writeError')->with($this->stringContains('Cloning '.$ref)); $perforceMethods = array('setStream', 'p4Login', 'writeP4ClientSpec', 'connectClient', 'syncCodeBase', 'cleanupClientSpec'); $perforce = $this->getMockBuilder('Composer\Util\Perforce', $perforceMethods)->disableOriginalConstructor()->getMock(); $perforce->expects($this->at(0))->method('initializePath')->with($this->equalTo($this->testPath)); $perforce->expects($this->at(1))->method('setStream')->with($this->equalTo($ref)); $perforce->expects($this->at(2))->method('p4Login'); $perforce->expects($this->at(3))->method('writeP4ClientSpec'); $perforce->expects($this->at(4))->method('connectClient'); $perforce->expects($this->at(5))->method('syncCodeBase')->with($label); $perforce->expects($this->at(6))->method('cleanupClientSpec'); $this->downloader->setPerforce($perforce); $this->downloader->doDownload($this->package, $this->testPath, 'url'); } } composer-1.0.0-beta2/tests/Composer/Test/Downloader/XzDownloaderTest.php000066400000000000000000000042571267577262200263210ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Downloader; use Composer\Downloader\XzDownloader; use Composer\TestCase; use Composer\Util\Filesystem; use Composer\Util\Platform; use Composer\Util\RemoteFilesystem; class XzDownloaderTest extends TestCase { /** * @var Filesystem */ private $fs; /** * @var string */ private $testDir; public function setUp() { if (Platform::isWindows()) { $this->markTestSkipped('Skip test on Windows'); } $this->testDir = $this->getUniqueTmpDirectory(); } public function tearDown() { $this->fs = new Filesystem; $this->fs->removeDirectory($this->testDir); } public function testErrorMessages() { $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->any()) ->method('getDistUrl') ->will($this->returnValue($distUrl = 'file://'.__FILE__)) ; $packageMock->expects($this->any()) ->method('getDistUrls') ->will($this->returnValue(array($distUrl))) ; $packageMock->expects($this->atLeastOnce()) ->method('getTransportOptions') ->will($this->returnValue(array())) ; $io = $this->getMock('Composer\IO\IOInterface'); $config = $this->getMock('Composer\Config'); $config->expects($this->any()) ->method('get') ->with('vendor-dir') ->will($this->returnValue($this->testDir)); $downloader = new XzDownloader($io, $config, null, null, null, new RemoteFilesystem($io)); try { $downloader->download($packageMock, $this->getUniqueTmpDirectory()); $this->fail('Download of invalid tarball should throw an exception'); } catch (\RuntimeException $e) { $this->assertContains('File format not recognized', $e->getMessage()); } } } composer-1.0.0-beta2/tests/Composer/Test/Downloader/ZipDownloaderTest.php000066400000000000000000000047051267577262200264600ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Downloader; use Composer\Downloader\ZipDownloader; use Composer\TestCase; use Composer\Util\Filesystem; class ZipDownloaderTest extends TestCase { /** * @var string */ private $testDir; public function setUp() { if (!class_exists('ZipArchive')) { $this->markTestSkipped('zip extension missing'); } $this->testDir = $this->getUniqueTmpDirectory(); } public function tearDown() { $fs = new Filesystem; $fs->removeDirectory($this->testDir); } public function testErrorMessages() { $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->any()) ->method('getDistUrl') ->will($this->returnValue($distUrl = 'file://'.__FILE__)) ; $packageMock->expects($this->any()) ->method('getDistUrls') ->will($this->returnValue(array($distUrl))) ; $packageMock->expects($this->atLeastOnce()) ->method('getTransportOptions') ->will($this->returnValue(array())) ; $io = $this->getMock('Composer\IO\IOInterface'); $config = $this->getMock('Composer\Config'); $config->expects($this->at(0)) ->method('get') ->with('disable-tls') ->will($this->returnValue(false)); $config->expects($this->at(1)) ->method('get') ->with('cafile') ->will($this->returnValue(null)); $config->expects($this->at(2)) ->method('get') ->with('capath') ->will($this->returnValue(null)); $config->expects($this->at(3)) ->method('get') ->with('vendor-dir') ->will($this->returnValue($this->testDir)); $downloader = new ZipDownloader($io, $config); try { $downloader->download($packageMock, sys_get_temp_dir().'/composer-zip-test'); $this->fail('Download of invalid zip files should throw an exception'); } catch (\UnexpectedValueException $e) { $this->assertContains('is not a zip archive', $e->getMessage()); } } } composer-1.0.0-beta2/tests/Composer/Test/EventDispatcher/000077500000000000000000000000001267577262200233125ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/EventDispatcher/EventDispatcherTest.php000066400000000000000000000276301267577262200277630ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\EventDispatcher; use Composer\EventDispatcher\Event; use Composer\Installer\InstallerEvents; use Composer\Config; use Composer\Composer; use Composer\TestCase; use Composer\IO\BufferIO; use Composer\Script\ScriptEvents; use Composer\Script\CommandEvent; use Composer\Util\ProcessExecutor; use Symfony\Component\Console\Output\OutputInterface; class EventDispatcherTest extends TestCase { /** * @expectedException RuntimeException */ public function testListenerExceptionsAreCaught() { $io = $this->getMock('Composer\IO\IOInterface'); $dispatcher = $this->getDispatcherStubForListenersTest(array( 'Composer\Test\EventDispatcher\EventDispatcherTest::call', ), $io); $io->expects($this->at(0)) ->method('isVerbose') ->willReturn(0); $io->expects($this->at(1)) ->method('writeError') ->with('> Composer\Test\EventDispatcher\EventDispatcherTest::call'); $io->expects($this->at(2)) ->method('writeError') ->with('Script Composer\Test\EventDispatcher\EventDispatcherTest::call handling the post-install-cmd event terminated with an exception'); $dispatcher->dispatchScript(ScriptEvents::POST_INSTALL_CMD, false); } public function testDispatcherCanConvertScriptEventToCommandEventForListener() { $io = $this->getMock('Composer\IO\IOInterface'); $dispatcher = $this->getDispatcherStubForListenersTest(array( 'Composer\Test\EventDispatcher\EventDispatcherTest::expectsCommandEvent', ), $io); $this->assertEquals(1, $dispatcher->dispatchScript(ScriptEvents::POST_INSTALL_CMD, false)); } public function testDispatcherDoesNotAttemptConversionForListenerWithoutTypehint() { $io = $this->getMock('Composer\IO\IOInterface'); $dispatcher = $this->getDispatcherStubForListenersTest(array( 'Composer\Test\EventDispatcher\EventDispatcherTest::expectsVariableEvent', ), $io); $this->assertEquals(1, $dispatcher->dispatchScript(ScriptEvents::POST_INSTALL_CMD, false)); } /** * @dataProvider getValidCommands * @param string $command */ public function testDispatcherCanExecuteSingleCommandLineScript($command) { $process = $this->getMock('Composer\Util\ProcessExecutor'); $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') ->setConstructorArgs(array( $this->createComposerInstance(), $this->getMock('Composer\IO\IOInterface'), $process, )) ->setMethods(array('getListeners')) ->getMock(); $listener = array($command); $dispatcher->expects($this->atLeastOnce()) ->method('getListeners') ->will($this->returnValue($listener)); $process->expects($this->once()) ->method('execute') ->with($command) ->will($this->returnValue(0)); $dispatcher->dispatchScript(ScriptEvents::POST_INSTALL_CMD, false); } public function testDispatcherCanExecuteCliAndPhpInSameEventScriptStack() { $process = $this->getMock('Composer\Util\ProcessExecutor'); $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') ->setConstructorArgs(array( $this->createComposerInstance(), $io = new BufferIO('', OutputInterface::VERBOSITY_VERBOSE), $process, )) ->setMethods(array( 'getListeners', )) ->getMock(); $process->expects($this->exactly(2)) ->method('execute') ->will($this->returnValue(0)); $listeners = array( 'echo -n foo', 'Composer\\Test\\EventDispatcher\\EventDispatcherTest::someMethod', 'echo -n bar', ); $dispatcher->expects($this->atLeastOnce()) ->method('getListeners') ->will($this->returnValue($listeners)); $dispatcher->dispatchScript(ScriptEvents::POST_INSTALL_CMD, false); $expected = '> post-install-cmd: echo -n foo'.PHP_EOL. '> post-install-cmd: Composer\Test\EventDispatcher\EventDispatcherTest::someMethod'.PHP_EOL. '> post-install-cmd: echo -n bar'.PHP_EOL; $this->assertEquals($expected, $io->getOutput()); } public function testDispatcherCanExecuteComposerScriptGroups() { $process = $this->getMock('Composer\Util\ProcessExecutor'); $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') ->setConstructorArgs(array( $composer = $this->createComposerInstance(), $io = new BufferIO('', OutputInterface::VERBOSITY_VERBOSE), $process, )) ->setMethods(array( 'getListeners', )) ->getMock(); $process->expects($this->exactly(3)) ->method('execute') ->will($this->returnValue(0)); $dispatcher->expects($this->atLeastOnce()) ->method('getListeners') ->will($this->returnCallback(function (Event $event) { if ($event->getName() === 'root') { return array('@group'); } elseif ($event->getName() === 'group') { return array('echo -n foo', '@subgroup', 'echo -n bar'); } elseif ($event->getName() === 'subgroup') { return array('echo -n baz'); } return array(); })); $dispatcher->dispatch('root', new CommandEvent('root', $composer, $io)); $expected = '> root: @group'.PHP_EOL. '> group: echo -n foo'.PHP_EOL. '> group: @subgroup'.PHP_EOL. '> subgroup: echo -n baz'.PHP_EOL. '> group: echo -n bar'.PHP_EOL; $this->assertEquals($expected, $io->getOutput()); } /** * @expectedException RuntimeException */ public function testDispatcherDetectInfiniteRecursion() { $process = $this->getMock('Composer\Util\ProcessExecutor'); $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') ->setConstructorArgs(array( $composer = $this->createComposerInstance(), $io = $this->getMock('Composer\IO\IOInterface'), $process, )) ->setMethods(array( 'getListeners', )) ->getMock(); $dispatcher->expects($this->atLeastOnce()) ->method('getListeners') ->will($this->returnCallback(function (Event $event) { if ($event->getName() === 'root') { return array('@recurse'); } elseif ($event->getName() === 'recurse') { return array('@root'); } return array(); })); $dispatcher->dispatch('root', new CommandEvent('root', $composer, $io)); } private function getDispatcherStubForListenersTest($listeners, $io) { $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') ->setConstructorArgs(array( $this->createComposerInstance(), $io, )) ->setMethods(array('getListeners')) ->getMock(); $dispatcher->expects($this->atLeastOnce()) ->method('getListeners') ->will($this->returnValue($listeners)); return $dispatcher; } public function getValidCommands() { return array( array('phpunit'), array('echo foo'), array('echo -n foo'), ); } public function testDispatcherOutputsCommand() { $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') ->setConstructorArgs(array( $this->createComposerInstance(), $io = $this->getMock('Composer\IO\IOInterface'), new ProcessExecutor, )) ->setMethods(array('getListeners')) ->getMock(); $listener = array('echo foo'); $dispatcher->expects($this->atLeastOnce()) ->method('getListeners') ->will($this->returnValue($listener)); $io->expects($this->once()) ->method('writeError') ->with($this->equalTo('> echo foo')); ob_start(); $dispatcher->dispatchScript(ScriptEvents::POST_INSTALL_CMD, false); $this->assertEquals('foo', trim(ob_get_clean())); } public function testDispatcherOutputsErrorOnFailedCommand() { $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') ->setConstructorArgs(array( $this->createComposerInstance(), $io = $this->getMock('Composer\IO\IOInterface'), new ProcessExecutor, )) ->setMethods(array('getListeners')) ->getMock(); $code = 'exit 1'; $listener = array($code); $dispatcher->expects($this->atLeastOnce()) ->method('getListeners') ->will($this->returnValue($listener)); $io->expects($this->at(0)) ->method('isVerbose') ->willReturn(0); $io->expects($this->at(1)) ->method('writeError') ->willReturn('> exit 1'); $io->expects($this->at(2)) ->method('writeError') ->with($this->equalTo('Script '.$code.' handling the post-install-cmd event returned with an error')); $this->setExpectedException('RuntimeException'); $dispatcher->dispatchScript(ScriptEvents::POST_INSTALL_CMD, false); } public function testDispatcherInstallerEvents() { $process = $this->getMock('Composer\Util\ProcessExecutor'); $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') ->setConstructorArgs(array( $this->createComposerInstance(), $this->getMock('Composer\IO\IOInterface'), $process, )) ->setMethods(array('getListeners')) ->getMock(); $dispatcher->expects($this->atLeastOnce()) ->method('getListeners') ->will($this->returnValue(array())); $policy = $this->getMock('Composer\DependencyResolver\PolicyInterface'); $pool = $this->getMockBuilder('Composer\DependencyResolver\Pool')->disableOriginalConstructor()->getMock(); $installedRepo = $this->getMockBuilder('Composer\Repository\CompositeRepository')->disableOriginalConstructor()->getMock(); $request = $this->getMockBuilder('Composer\DependencyResolver\Request')->disableOriginalConstructor()->getMock(); $dispatcher->dispatchInstallerEvent(InstallerEvents::PRE_DEPENDENCIES_SOLVING, true, $policy, $pool, $installedRepo, $request); $dispatcher->dispatchInstallerEvent(InstallerEvents::POST_DEPENDENCIES_SOLVING, true, $policy, $pool, $installedRepo, $request, array()); } public static function call() { throw new \RuntimeException(); } public static function expectsCommandEvent(CommandEvent $event) { return false; } public static function expectsVariableEvent($event) { return false; } public static function someMethod() { return true; } private function createComposerInstance() { $composer = new Composer; $config = new Config; $composer->setConfig($config); return $composer; } } composer-1.0.0-beta2/tests/Composer/Test/Fixtures/000077500000000000000000000000001267577262200220335ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Fixtures/functional/000077500000000000000000000000001267577262200241755ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Fixtures/functional/create-project-command.test000066400000000000000000000006401267577262200314210ustar00rootroot00000000000000--RUN-- create-project seld/jsonlint %testDir% 1.0.0 --prefer-source -n --EXPECT-ERROR-- Installing seld/jsonlint (1.0.0) - Installing seld/jsonlint (1.0.0) Cloning 3b4bc2a96ff5d3fe6866bfe9dd0c845246705791 Created project in %testDir% Loading composer repositories with package information Updating dependencies (including require-dev) Nothing to install or update Writing lock file Generating autoload files create-project-shows-full-hash-for-dev-packages.test000066400000000000000000000002471267577262200360670ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Fixtures/functional--RUN-- create-project --repository=packages.json -v seld/jsonlint %testDir% dev-master --EXPECT-ERROR-REGEX-- {^Installing seld/jsonlint \(dev-master [a-f0-9]{40}\)} composer-1.0.0-beta2/tests/Composer/Test/Fixtures/functional/packages.json000066400000000000000000000020601267577262200266440ustar00rootroot00000000000000[ { "name": "seld/jsonlint", "description": "JSON Linter", "keywords": [ "json", "parser", "linter", "validator" ], "homepage": "", "version": "dev-master", "version_normalized": "9999999-dev", "license": [ "MIT" ], "authors": [ { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", "homepage": "http://seld.be", "role": "Developer" } ], "source": { "type": "git", "url": "https://github.com/Seldaek/jsonlint", "reference": "4451f2066efdc53f3fa954c44a47ead73f6838d2" }, "type": "library", "time": "2012-08-13T07:00:11+00:00", "autoload": { "psr-0": { "Seld\\JsonLint": "src/" } }, "bin": [ "bin/jsonlint" ], "require": { "php": ">=5.3.0" } } ]composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/000077500000000000000000000000001267577262200240305ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/SAMPLE000066400000000000000000000006231267577262200247350ustar00rootroot00000000000000--TEST-- --CONDITION-- --COMPOSER-- --LOCK-- --INSTALLED-- --INSTALLED-DEV-- --RUN-- install --EXPECT-LOCK-- --EXPECT-- composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/abandoned-listed.test000066400000000000000000000016201267577262200301250ustar00rootroot00000000000000--TEST-- Abandoned packages are flagged --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "1.0.0", "abandoned": true } ] }, { "type": "package", "package": [ { "name": "c/c", "version": "1.0.0", "abandoned": "b/b" } ] } ], "require": { "a/a": "1.0.0", "c/c": "1.0.0" } } --RUN-- install --EXPECT-OUTPUT-- Loading composer repositories with package information Updating dependencies (including require-dev) Package a/a is abandoned, you should avoid using it. No replacement was suggested. Package c/c is abandoned, you should avoid using it. Use b/b instead. Writing lock file Generating autoload files --EXPECT-- Installing a/a (1.0.0) Installing c/c (1.0.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/alias-with-reference.test000066400000000000000000000015471267577262200307360ustar00rootroot00000000000000--TEST-- Aliases of referenced packages work --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/aliased", "version": "dev-master", "source": { "reference": "orig", "type": "git", "url": "" } }, { "name": "b/requirer", "version": "1.0.0", "require": { "a/aliased": "1.0.0" }, "source": { "reference": "1.0.0", "type": "git", "url": "" } } ] } ], "require": { "a/aliased": "dev-master#abcd as 1.0.0", "b/requirer": "*" } } --RUN-- install --EXPECT-- Installing a/aliased (dev-master abcd) Marking a/aliased (1.0.0) as installed, alias of a/aliased (dev-master abcd) Installing b/requirer (1.0.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/aliased-priority-conflicting.test000066400000000000000000000032421267577262200325100ustar00rootroot00000000000000--TEST-- Aliases take precedence over default package even if default is selected --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/req", "version": "dev-feature-foo", "source": { "reference": "feat.f", "type": "git", "url": "" } }, { "name": "a/req", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "source": { "reference": "forked", "type": "git", "url": "" } } ] }, { "type": "package", "package": [ { "name": "a/a", "version": "dev-master", "require": { "a/req": "dev-master" } }, { "name": "a/b", "version": "dev-master", "require": { "a/req": "dev-master" } }, { "name": "a/req", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "source": { "reference": "master", "type": "git", "url": "" } } ] } ], "require": { "a/a": "dev-master", "a/b": "dev-master", "a/req": "dev-feature-foo as dev-master" }, "minimum-stability": "dev" } --RUN-- install --EXPECT-- Installing a/req (dev-feature-foo feat.f) Marking a/req (dev-master feat.f) as installed, alias of a/req (dev-feature-foo feat.f) Installing a/a (dev-master) Installing a/b (dev-master) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/aliased-priority.test000066400000000000000000000036601267577262200302170ustar00rootroot00000000000000--TEST-- Aliases take precedence over default package --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/c", "version": "dev-feature-foo", "source": { "reference": "feat.f", "type": "git", "url": "" } }, { "name": "a/b", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "source": { "reference": "forked", "type": "git", "url": "" } } ] }, { "type": "package", "package": [ { "name": "a/a", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "source": { "reference": "master", "type": "git", "url": "" }, "require": { "a/b": "dev-master", "a/c": "dev-master" } }, { "name": "a/b", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "source": { "reference": "master", "type": "git", "url": "" } }, { "name": "a/c", "version": "dev-master" } ] } ], "require": { "a/a": "1.*", "a/b": "1.*", "a/c": "dev-feature-foo as dev-master" }, "minimum-stability": "dev" } --RUN-- install --EXPECT-- Installing a/c (dev-feature-foo feat.f) Marking a/c (dev-master feat.f) as installed, alias of a/c (dev-feature-foo feat.f) Installing a/b (dev-master forked) Installing a/a (dev-master master) Marking a/a (1.0.x-dev master) as installed, alias of a/a (dev-master master) Marking a/b (1.0.x-dev forked) as installed, alias of a/b (dev-master forked) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/broken-deps-do-not-replace.test000066400000000000000000000026341267577262200317560ustar00rootroot00000000000000--TEST-- Broken dependencies should not lead to a replacer being installed which is not mentioned by name --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "1.0.0" }, { "name": "b/b", "version": "1.0.0", "require": {"c/c": "1.*"} }, { "name": "c/c", "version": "1.0.0", "replace": {"a/a": "1.0.0" },"require":{"x/x": "1.0"}}, { "name": "d/d", "version": "1.0.0", "replace": {"a/a": "1.0.0", "c/c":"1.0.0" }} ] } ], "require": { "a/a": "1.*", "b/b": "1.*" } } --RUN-- install --EXPECT-OUTPUT-- Loading composer repositories with package information Updating dependencies (including require-dev) Your requirements could not be resolved to an installable set of packages. Problem 1 - c/c 1.0.0 requires x/x 1.0 -> no matching package found. - b/b 1.0.0 requires c/c 1.* -> satisfiable by c/c[1.0.0]. - Installation request for b/b 1.* -> satisfiable by b/b[1.0.0]. Potential causes: - A typo in the package name - The package is not available in a stable-enough version according to your minimum-stability setting see for more details. Read for further common problems. --EXPECT-EXIT-CODE-- 2 --EXPECT-- composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/circular-dependency.test000066400000000000000000000025751267577262200306620ustar00rootroot00000000000000--TEST-- Circular dependencies are possible between packages --COMPOSER-- { "name": "root/package", "type": "library", "minimum-stability": "dev", "version": "dev-master", "require": { "required/package": "1.0" }, "replace": { "provided/dependency": "self.version" }, "extra": { "branch-alias": { "dev-master": "2.0-dev" } }, "repositories": [ { "type": "package", "package": [ { "name": "required/package", "version": "1.0", "type": "library", "source": { "reference": "some.branch", "type": "git", "url": "" }, "require": { "provided/dependency": "2.*" } } ] }, { "type": "package", "package": [ { "name": "root/package", "version": "2.0-dev", "type": "library", "source": { "reference": "other.branch", "type": "git", "url": "" }, "replace": { "provided/dependency": "self.version" } } ] } ] } --RUN-- update --EXPECT-- Installing required/package (1.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/circular-dependency2.test000066400000000000000000000016671267577262200307450ustar00rootroot00000000000000--TEST-- Circular dependencies are possible between packages --COMPOSER-- { "name": "root", "version": "dev-master", "require": { "require/itself": "1.0.0", "regular/pkg": "1.0.0" }, "repositories": [ { "type": "package", "package": [ { "name": "require/itself", "version": "1.0.0", "source": { "reference": "some.branch", "type": "git", "url": "" }, "require": { "require/itself": "1.0.0" } }, { "name": "regular/pkg", "version": "1.0.0", "source": { "reference": "some.branch", "type": "git", "url": "" } } ] } ] } --RUN-- update -v --EXPECT-- Installing require/itself (1.0.0) Installing regular/pkg (1.0.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/disjunctive-multi-constraints.test000066400000000000000000000010121267577262200327470ustar00rootroot00000000000000--TEST-- Disjunctive multi constraints work --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "foo", "version": "1.1.0" }, { "name": "foo", "version": "1.0.0" }, { "name": "bar", "version": "1.1.0", "require": { "foo": "1.0.*" } } ] } ], "require": { "bar": "1.*", "foo": "1.0.*|1.1.*" } } --RUN-- install --EXPECT-- Installing foo (1.0.0) Installing bar (1.1.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/github-issues-4319.test000066400000000000000000000017731267577262200301320ustar00rootroot00000000000000--TEST-- See Github issue #4319 ( github.com/composer/composer/issues/4319 ). Present a clear error message when config.platform.php version results in a conflict rule. --CONDITION-- !defined('HHVM_VERSION') --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a", "version": "1.0.0", "require": { "php": "5.5" } } ] } ], "require": { "a": "~1.0" }, "config": { "platform": { "php": "5.3" } } } --RUN-- install --EXPECT-OUTPUT-- Loading composer repositories with package information Updating dependencies (including require-dev) Your requirements could not be resolved to an installable set of packages. Problem 1 - Installation request for a ~1.0 -> satisfiable by a[1.0.0]. - a 1.0.0 requires php 5.5 -> your PHP version (%s) overriden by "config.platform.php" version (5.3) does not satisfy that requirement. --EXPECT-- --EXPECT-EXIT-CODE-- 2 composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/github-issues-4795-2.test000066400000000000000000000022061267577262200302710ustar00rootroot00000000000000--TEST-- See Github issue #4795 ( github.com/composer/composer/issues/4795 ). Composer\Installer::whitelistUpdateDependencies should not output a warning for dependencies that need to be updated that are also a root package, when that root package is also explicitly whitelisted. --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a", "version": "1.0.0" }, { "name": "a", "version": "1.1.0" }, { "name": "b", "version": "1.0.0", "require": { "a": "~1.0" } }, { "name": "b", "version": "1.1.0", "require": { "a": "~1.1" } } ] } ], "require": { "a": "~1.0", "b": "~1.0" } } --INSTALLED-- [ { "name": "a", "version": "1.0.0" }, { "name": "b", "version": "1.0.0", "require": { "a": "~1.0" } } ] --RUN-- update a b --with-dependencies --EXPECT-OUTPUT-- Loading composer repositories with package information Updating dependencies (including require-dev) Writing lock file Generating autoload files --EXPECT-- Updating a (1.0.0) to a (1.1.0) Updating b (1.0.0) to b (1.1.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/github-issues-4795.test000066400000000000000000000022741267577262200301370ustar00rootroot00000000000000--TEST-- See Github issue #4795 ( github.com/composer/composer/issues/4795 ). Composer\Installer::whitelistUpdateDependencies intentionally ignores root requirements even if said package is also a dependency of one the requirements that is whitelisted for update. --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a", "version": "1.0.0" }, { "name": "a", "version": "1.1.0" }, { "name": "b", "version": "1.0.0", "require": { "a": "~1.0" } }, { "name": "b", "version": "1.1.0", "require": { "a": "~1.1" } } ] } ], "require": { "a": "~1.0", "b": "~1.0" } } --INSTALLED-- [ { "name": "a", "version": "1.0.0" }, { "name": "b", "version": "1.0.0", "require": { "a": "~1.0" } } ] --RUN-- update b --with-dependencies --EXPECT-OUTPUT-- Dependency "a" is also a root requirement, but is not explicitly whitelisted. Ignoring. Loading composer repositories with package information Updating dependencies (including require-dev) Nothing to install or update Writing lock file Generating autoload files --EXPECT-- composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/install-aliased-alias.test000066400000000000000000000017361267577262200310750ustar00rootroot00000000000000--TEST-- Installing double aliased package --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "dev-master", "dist": { "type": "file", "url": "" }, "require": { "b/b": "dev-master" } }, { "name": "b/b", "version": "dev-foo", "extra": { "branch-alias": { "dev-foo": "1.0.x-dev" } }, "dist": { "type": "file", "url": "" } } ] } ], "require": { "a/a": "dev-master", "b/b": "1.0.x-dev as dev-master" }, "minimum-stability": "dev" } --RUN-- install --EXPECT-- Installing b/b (dev-foo) Marking b/b (dev-master) as installed, alias of b/b (dev-foo) Installing a/a (dev-master) Marking b/b (1.0.x-dev) as installed, alias of b/b (dev-foo) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/install-branch-alias-composer-repo.test000066400000000000000000000006511267577262200335130ustar00rootroot00000000000000--TEST-- Installing branch aliased package from a Composer repository. --COMPOSER-- { "repositories": [ { "type": "composer", "url": "file://install-branch-alias-composer-repo" } ], "require": { "a/a": "3.2.*@dev" } } --RUN-- install --EXPECT-- Installing a/a (dev-foobar abcdef0) Marking a/a (3.2.x-dev abcdef0) as installed, alias of a/a (dev-foobar abcdef0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/install-branch-alias-composer-repo/000077500000000000000000000000001267577262200326105ustar00rootroot00000000000000packages.json000066400000000000000000000012371267577262200352050ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/install-branch-alias-composer-repo{ "packages": { "a/a": { "dev-foobar": { "name": "a/a", "version": "dev-foobar", "version_normalized": "dev-foobar", "source": { "type": "git", "url": "git@example.com:repo.git", "reference": "abcdef0000000000000000000000000000000000" }, "time": "2014-11-13 11:52:12", "type": "library", "extra": { "branch-alias": { "dev-foobar": "3.2.x-dev" } } } } } } composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/install-dev-using-dist.test000066400000000000000000000025241267577262200312420ustar00rootroot00000000000000--TEST-- Installs a dev package from lock using dist --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "dev-master", "version_normalized": "9999999-dev", "dist": { "type": "zip", "url": "http://www.example.com/dist.zip", "reference": "459720ff3b74ee0c0d159277c6f2f5df89d8a4f6" } } ] } ], "require": { "a/a": "dev-master" }, "minimum-stability": "dev" } --RUN-- install --prefer-dist --EXPECT-LOCK-- { "packages": [ { "name": "a/a", "version": "dev-master", "dist": { "type": "zip", "url": "http://www.example.com/dist.zip", "reference": "459720ff3b74ee0c0d159277c6f2f5df89d8a4f6", "shasum": null }, "type": "library" } ], "packages-dev": [], "aliases": [], "minimum-stability": "dev", "stability-flags": { "a/a": 20 }, "prefer-stable": false, "prefer-lowest": false, "platform": [], "platform-dev": [] } --EXPECT-- Installing a/a (dev-master) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/install-dev.test000066400000000000000000000007061267577262200271560ustar00rootroot00000000000000--TEST-- Installs a package in dev env --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "1.0.0" }, { "name": "a/b", "version": "1.0.0" } ] } ], "require": { "a/a": "1.0.0" }, "require-dev": { "a/b": "1.0.0" } } --RUN-- install --EXPECT-- Installing a/a (1.0.0) Installing a/b (1.0.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/install-from-empty-lock.test000066400000000000000000000013471267577262200314270ustar00rootroot00000000000000--TEST-- Requirements from the composer file are not installed if the lock file is present --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "required", "version": "1.0.0" }, { "name": "newly-required", "version": "1.0.0" } ] } ], "require": { "required": "1.0.0", "newly-required": "1.0.0" } } --LOCK-- { "packages": [ { "name": "required", "version": "1.0.0" } ], "packages-dev": null, "aliases": [], "minimum-stability": "stable", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false } --RUN-- install --EXPECT-- Installing required (1.0.0)composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/install-from-lock-removes-package.test000066400000000000000000000024551267577262200333430ustar00rootroot00000000000000--TEST-- Install from a lock file that deleted a package --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "whitelisted", "version": "1.1.0" }, { "name": "whitelisted", "version": "1.0.0", "require": { "fixed-dependency": "1.0.0", "old-dependency": "1.0.0" } }, { "name": "fixed-dependency", "version": "1.1.0" }, { "name": "fixed-dependency", "version": "1.0.0" }, { "name": "old-dependency", "version": "1.0.0" } ] } ], "require": { "whitelisted": "1.*", "fixed-dependency": "1.*" } } --LOCK-- { "packages": [ { "name": "whitelisted", "version": "1.1.0" }, { "name": "fixed-dependency", "version": "1.0.0" } ], "packages-dev": null, "aliases": [], "minimum-stability": "dev", "stability-flags": [], "prefer-stable": false } --INSTALLED-- [ { "name": "whitelisted", "version": "1.0.0", "require": { "old-dependency": "1.0.0", "fixed-dependency": "1.0.0" } }, { "name": "fixed-dependency", "version": "1.0.0" }, { "name": "old-dependency", "version": "1.0.0" } ] --RUN-- install --EXPECT-- Uninstalling old-dependency (1.0.0) Updating whitelisted (1.0.0) to whitelisted (1.1.0) install-ignore-platform-package-requirements.test000066400000000000000000000007071267577262200355410ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer--TEST-- Install in ignore-platform-reqs mode --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "1.0.0", "require": { "ext-testdummy": "*", "php": "98" } } ] } ], "require": { "a/a": "1.0.0", "php": "99.9", "ext-dummy2": "3" } } --RUN-- install --ignore-platform-reqs --EXPECT-- Installing a/a (1.0.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/install-missing-alias-from-lock.test000066400000000000000000000022471267577262200330310ustar00rootroot00000000000000--TEST-- Installing an old alias that doesn't exist anymore from a lock is possible --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "2.2.x-dev" } }, "source": { "reference": "master", "type": "git", "url": "" } } ] } ], "require": { "a/a": "2.1.*" }, "minimum-stability": "dev" } --LOCK-- { "packages": [ { "name": "a/a", "version": "dev-master", "version_normalized": "9999999-dev", "extra": { "branch-alias": { "dev-master": "2.1.x-dev" } }, "source": { "reference": "oldmaster", "type": "git", "url": "" }, "type": "library" } ], "packages-dev": null, "aliases": [], "minimum-stability": "dev", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false } --RUN-- install --EXPECT-- Installing a/a (dev-master oldmaster) Marking a/a (2.1.x-dev oldmaster) as installed, alias of a/a (dev-master oldmaster) install-overridden-platform-packages.test000066400000000000000000000011001267577262200340450ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer--TEST-- Install overridden platform requirements works --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "1.0.0", "require": { "ext-dummy2": "1.*" } } ] } ], "require": { "a/a": "*", "ext-dummy": "~1.0", "php": "1.0" }, "config": { "platform": { "php": "1.0.0", "ext-dummy": "1.2.3", "ext-dummy2": "1.2.3" } } } --RUN-- install --EXPECT-- Installing a/a (1.0.0) install-package-and-its-provider-skips-original.test000066400000000000000000000007611267577262200360330ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer--TEST-- Install package and it's replacer skips the original --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "ext-foo", "version": "1.0.0" }, { "name": "ext-foo/fork", "version": "0.5.0", "replace": { "ext-foo": "1.0.*" } } ] } ], "require": { "ext-foo": "1.0.0", "ext-foo/fork": "0.5.*" } } --RUN-- install --EXPECT-- Installing ext-foo/fork (0.5.0) install-prefers-repos-over-package-versions.test000066400000000000000000000012401267577262200353170ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer--TEST-- Install prefers higher priority repositories over higher priority package versions --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "1.0.0" } ] }, { "type": "package", "package": [ { "name": "a/a", "version": "1.1.0" }, { "name": "b/b", "version": "1.1.0" }, { "name": "b/b", "version": "1.0.0" } ] } ], "require": { "a/a": "*", "b/b": "*" } } --RUN-- install --EXPECT-- Installing a/a (1.0.0) Installing b/b (1.1.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/install-reference.test000066400000000000000000000007511267577262200303360ustar00rootroot00000000000000--TEST-- Installs a dev package forcing it's reference --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "dev-master", "source": { "reference": "abc123", "url": "", "type": "git" } } ] } ], "require": { "a/a": "dev-master#def000" } } --RUN-- install --EXPECT-- Installing a/a (dev-master def000) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/install-self-from-root.test000066400000000000000000000005661267577262200312570ustar00rootroot00000000000000--TEST-- Tries to require a package with the same name as the root package --COMPOSER-- { "name": "foo/bar", "require": { "foo/bar": "@dev" } } --RUN-- install --EXPECT-EXCEPTION-- InvalidArgumentException --EXPECT-- Root package 'foo/bar' cannot require itself in its composer.json Did you accidentally name your root package after an external package? composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/install-simple.test000066400000000000000000000005351267577262200276710ustar00rootroot00000000000000--TEST-- Installs a simple package with exact match requirement --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "1.0.0" } ] } ], "require": { "a/a": "1.0.0" } } --RUN-- install --EXPECT-- Installing a/a (1.0.0)partial-update-downgrades-non-whitelisted-unstable.test000066400000000000000000000036601267577262200366540ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer--TEST-- Partial update from lock file should apply lock file and downgrade unstable packages even if not whitelisted --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/old", "version": "1.0.0" }, { "name": "a/old", "version": "2.0.0" }, { "name": "b/unstable", "version": "1.0.0" }, { "name": "b/unstable", "version": "1.1.0-alpha" }, { "name": "c/uptodate", "version": "1.0.0" }, { "name": "d/removed", "version": "1.0.0" } ] } ], "require": { "a/old": "*", "b/unstable": "*", "c/uptodate": "*" } } --LOCK-- { "packages": [ { "name": "a/old", "version": "1.0.0" }, { "name": "b/unstable", "version": "1.1.0-alpha" }, { "name": "c/uptodate", "version": "1.0.0" }, { "name": "d/removed", "version": "1.0.0" } ], "packages-dev": [], "aliases": [], "minimum-stability": "stable", "stability-flags": { "b/unstable": 15 }, "prefer-stable": false, "prefer-lowest": false, "platform": [], "platform-dev": [] } --INSTALLED-- [ { "name": "a/old", "version": "0.9.0" }, { "name": "b/unstable", "version": "1.1.0-alpha" }, { "name": "c/uptodate", "version": "2.0.0" } ] --RUN-- update c/uptodate --EXPECT-LOCK-- { "packages": [ { "name": "a/old", "version": "1.0.0", "type": "library" }, { "name": "b/unstable", "version": "1.0.0", "type": "library" }, { "name": "c/uptodate", "version": "2.0.0", "type": "library" } ], "packages-dev": [], "aliases": [], "minimum-stability": "stable", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": [], "platform-dev": [] } --EXPECT-- Updating b/unstable (1.1.0-alpha) to b/unstable (1.0.0) Updating a/old (0.9.0) to a/old (1.0.0) partial-update-forces-dev-reference-from-lock-for-non-updated-packages.test000066400000000000000000000060221267577262200422200ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer--TEST-- Partial update forces updates dev reference from lock file for non whitelisted packages --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "2.1.x-dev" } }, "source": { "reference": "newmaster-a2", "type": "git", "url": "" } }, { "name": "b/b", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "2.1.x-dev" } }, "source": { "reference": "newmaster-b2", "type": "git", "url": "" } } ] } ], "require": { "a/a": "~2.1", "b/b": "~2.1" }, "minimum-stability": "dev" } --INSTALLED-- [ { "name": "a/a", "version": "dev-master", "version_normalized": "9999999-dev", "extra": { "branch-alias": { "dev-master": "2.1.x-dev" } }, "source": { "reference": "oldmaster-a", "type": "git", "url": "" }, "type": "library" }, { "name": "b/b", "version": "dev-master", "version_normalized": "9999999-dev", "extra": { "branch-alias": { "dev-master": "2.1.x-dev" } }, "source": { "reference": "oldmaster-b", "type": "git", "url": "" }, "type": "library" } ] --LOCK-- { "packages": [ { "name": "a/a", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "2.1.x-dev" } }, "source": { "reference": "newmaster-a", "type": "git", "url": "" }, "type": "library" }, { "name": "b/b", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "2.1.x-dev" } }, "source": { "reference": "oldmaster-b", "type": "git", "url": "" }, "type": "library" } ], "packages-dev": [], "aliases": [], "minimum-stability": "dev", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": [], "platform-dev": [] } --RUN-- update b/b --EXPECT-LOCK-- { "packages": [ { "name": "a/a", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "2.1.x-dev" } }, "source": { "reference": "newmaster-a", "type": "git", "url": "" }, "type": "library" }, { "name": "b/b", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "2.1.x-dev" } }, "source": { "reference": "newmaster-b2", "type": "git", "url": "" }, "type": "library" } ], "packages-dev": [], "aliases": [], "minimum-stability": "dev", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": [], "platform-dev": [] } --EXPECT-- Updating a/a (dev-master oldmaster-a) to a/a (dev-master newmaster-a) Updating b/b (dev-master oldmaster-b) to b/b (dev-master newmaster-b2) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/partial-update-from-lock.test000066400000000000000000000037461267577262200315460ustar00rootroot00000000000000--TEST-- Partial update from lock file should update everything to the state of the lock, remove overly unstable packages --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/old", "version": "1.0.0" }, { "name": "a/old", "version": "2.0.0" }, { "name": "b/unstable", "version": "1.0.0" }, { "name": "b/unstable", "version": "1.1.0-alpha" }, { "name": "c/uptodate", "version": "1.0.0" }, { "name": "d/removed", "version": "1.0.0" } ] } ], "require": { "a/old": "*", "b/unstable": "*", "c/uptodate": "*" } } --LOCK-- { "packages": [ { "name": "a/old", "version": "1.0.0" }, { "name": "b/unstable", "version": "1.1.0-alpha" }, { "name": "c/uptodate", "version": "1.0.0" }, { "name": "d/removed", "version": "1.0.0" } ], "packages-dev": [], "aliases": [], "minimum-stability": "stable", "stability-flags": { "b/unstable": 15 }, "prefer-stable": false, "prefer-lowest": false, "platform": [], "platform-dev": [] } --INSTALLED-- [ { "name": "a/old", "version": "0.9.0" }, { "name": "b/unstable", "version": "1.1.0-alpha" }, { "name": "c/uptodate", "version": "2.0.0" } ] --RUN-- update b/unstable --EXPECT-LOCK-- { "packages": [ { "name": "a/old", "version": "1.0.0", "type": "library" }, { "name": "b/unstable", "version": "1.0.0", "type": "library" }, { "name": "c/uptodate", "version": "1.0.0", "type": "library" } ], "packages-dev": [], "aliases": [], "minimum-stability": "stable", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": [], "platform-dev": [] } --EXPECT-- Updating b/unstable (1.1.0-alpha) to b/unstable (1.0.0) Updating a/old (0.9.0) to a/old (1.0.0) Updating c/uptodate (2.0.0) to c/uptodate (1.0.0) partial-update-installs-from-lock-even-missing.test000066400000000000000000000070711267577262200357130ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer--TEST-- Partial update installs from lock even if package don't exist in public repo anymore --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "2.3.x-dev" } }, "source": { "reference": "newmaster-a2", "type": "git", "url": "" } }, { "name": "b/b", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "2.3.x-dev" } }, "source": { "reference": "newmaster-b2", "type": "git", "url": "" }, "require": { "a/a": "dev-master" } } ] } ], "require": { "a/a": "~2.1", "b/b": "~2.1" }, "minimum-stability": "dev" } --INSTALLED-- [ { "name": "a/a", "version": "dev-master", "version_normalized": "9999999-dev", "extra": { "branch-alias": { "dev-master": "2.1.x-dev" } }, "source": { "reference": "oldmaster-a", "type": "git", "url": "" }, "type": "library" }, { "name": "b/b", "version": "dev-master", "version_normalized": "9999999-dev", "extra": { "branch-alias": { "dev-master": "2.1.x-dev" } }, "source": { "reference": "oldmaster-b", "type": "git", "url": "" }, "require": { "a/a": "dev-master" }, "type": "library" } ] --LOCK-- { "packages": [ { "name": "a/a", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "2.2.x-dev" } }, "source": { "reference": "newmaster-a", "type": "git", "url": "" }, "type": "library" }, { "name": "b/b", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "2.1.x-dev" } }, "source": { "reference": "oldmaster-b", "type": "git", "url": "" }, "require": { "a/a": "dev-master" }, "type": "library" } ], "packages-dev": [], "aliases": [], "minimum-stability": "dev", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": [], "platform-dev": [] } --RUN-- update b/b --EXPECT-LOCK-- { "packages": [ { "name": "a/a", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "2.2.x-dev" } }, "source": { "reference": "newmaster-a", "type": "git", "url": "" }, "type": "library" }, { "name": "b/b", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "2.3.x-dev" } }, "source": { "reference": "newmaster-b2", "type": "git", "url": "" }, "require": { "a/a": "dev-master" }, "type": "library" } ], "packages-dev": [], "aliases": [], "minimum-stability": "dev", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": [], "platform-dev": [] } --EXPECT-- Updating a/a (dev-master oldmaster-a) to a/a (dev-master newmaster-a) Updating b/b (dev-master oldmaster-b) to b/b (dev-master newmaster-b2) Marking a/a (2.2.x-dev newmaster-a) as installed, alias of a/a (dev-master newmaster-a) Marking b/b (2.3.x-dev newmaster-b2) as installed, alias of b/b (dev-master newmaster-b2) Marking b/b (2.1.x-dev oldmaster-b) as uninstalled, alias of b/b (dev-master oldmaster-b) Marking a/a (2.1.x-dev oldmaster-a) as uninstalled, alias of a/a (dev-master oldmaster-a) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/partial-update-without-lock.test000066400000000000000000000030241267577262200322730ustar00rootroot00000000000000--TEST-- Partial update without lock file should update everything whitelisted, remove overly unstable packages --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/old", "version": "1.0.0" }, { "name": "a/old", "version": "2.0.0" }, { "name": "b/unstable", "version": "1.0.0" }, { "name": "b/unstable", "version": "1.1.0-alpha" }, { "name": "c/uptodate", "version": "1.0.0" }, { "name": "d/removed", "version": "1.0.0" } ] } ], "require": { "a/old": "*", "b/unstable": "*", "c/uptodate": "*" } } --INSTALLED-- [ { "name": "a/old", "version": "1.0.0" }, { "name": "b/unstable", "version": "1.1.0-alpha" }, { "name": "c/uptodate", "version": "1.0.0" }, { "name": "d/removed", "version": "1.0.0" } ] --RUN-- update b/unstable --EXPECT-LOCK-- { "packages": [ { "name": "a/old", "version": "1.0.0", "type": "library" }, { "name": "b/unstable", "version": "1.0.0", "type": "library" }, { "name": "c/uptodate", "version": "1.0.0", "type": "library" }, { "name": "d/removed", "version": "1.0.0", "type": "library" } ], "packages-dev": [], "aliases": [], "minimum-stability": "stable", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": [], "platform-dev": [] } --EXPECT-- Updating b/unstable (1.1.0-alpha) to b/unstable (1.0.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/plugins-are-installed-first.test000066400000000000000000000017621267577262200322670ustar00rootroot00000000000000--TEST-- Composer installers are installed first if they have no meaningful requirements --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "pkg", "version": "1.0.0" }, { "name": "pkg2", "version": "1.0.0" }, { "name": "inst", "version": "1.0.0", "type": "composer-plugin" }, { "name": "inst-with-req", "version": "1.0.0", "type": "composer-plugin", "require": { "php": ">=5", "ext-json": "*", "composer-plugin-api": "*" } }, { "name": "inst-with-req2", "version": "1.0.0", "type": "composer-plugin", "require": { "pkg2": "*" } } ] } ], "require": { "pkg": "1.0.0", "inst": "1.0.0", "inst-with-req2": "1.0.0", "inst-with-req": "1.0.0" } } --RUN-- install --EXPECT-- Installing inst (1.0.0) Installing inst-with-req (1.0.0) Installing pkg (1.0.0) Installing pkg2 (1.0.0) Installing inst-with-req2 (1.0.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/replace-alias.test000066400000000000000000000013761267577262200274420ustar00rootroot00000000000000--TEST-- Ensure a replacer package deals with branch aliases --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "dev-master", "replace": {"c/c": "self.version" }, "extra": { "branch-alias": {"dev-master": "1.0.x-dev"} } }, { "name": "b/b", "version": "1.0.0", "require": {"c/c": "1.*"} }, { "name": "c/c", "version": "dev-master", "extra": { "branch-alias": {"dev-master": "1.0.x-dev"} } } ] } ], "require": { "a/a": "dev-master", "b/b": "1.*" } } --RUN-- install --EXPECT-- Installing a/a (dev-master) Marking a/a (1.0.x-dev) as installed, alias of a/a (dev-master) Installing b/b (1.0.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/replace-priorities.test000066400000000000000000000016431267577262200305370ustar00rootroot00000000000000--TEST-- Replace takes precedence only in higher priority repositories and if explicitly required --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "forked", "version": "1.1.0", "replace": { "package2": "1.1.0" } } ] }, { "type": "package", "package": [ { "name": "package", "version": "1.0.0" }, { "name": "package2", "version": "1.0.0" }, { "name": "package3", "version": "1.0.0", "require": { "forked": "*" } }, { "name": "hijacker", "version": "1.1.0", "replace": { "package": "1.1.0" } } ] } ], "require": { "package": "1.*", "package2": "1.*", "package3": "1.*" } } --RUN-- install --EXPECT-- Installing package (1.0.0) Installing forked (1.1.0) Installing package3 (1.0.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/replace-root-require.test000066400000000000000000000010751267577262200310020ustar00rootroot00000000000000--TEST-- Ensure a transiently required replacer can replace root requirements --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "1.0.0" }, { "name": "b/b", "version": "1.0.0", "require": {"c/c": "1.*"} }, { "name": "c/c", "version": "1.0.0", "replace": {"a/a": "1.0.0" }} ] } ], "require": { "a/a": "1.*", "b/b": "1.*" } } --RUN-- install --EXPECT-- Installing c/c (1.0.0) Installing b/b (1.0.0) replaced-packages-wrong-version-install-from-lock.test000066400000000000000000000022501267577262200363540ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer--TEST-- Requiring a replaced package in a version, that is not provided by the replacing package, should install correctly (although that is not a very smart idea) also when installing from lock --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "foo/original", "version": "1.0.0", "replace": {"foo/replaced": "1.0.0"} }, { "name": "foo/replaced", "version": "1.0.0" }, { "name": "foo/replaced", "version": "2.0.0" } ] } ], "require": { "foo/original": "1.0.0", "foo/replaced": "2.0.0" } } --LOCK-- { "packages": [ { "name": "foo/original", "version": "1.0.0", "replace": {"foo/replaced": "1.0.0"}, "type": "library" }, { "name": "foo/replaced", "version": "2.0.0", "type": "library" } ], "packages-dev": [], "aliases": [], "minimum-stability": "stable", "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, "platform": [], "platform-dev": [] } --RUN-- install --EXPECT-EXIT-CODE-- 0 --EXPECT-- Installing foo/original (1.0.0) Installing foo/replaced (2.0.0) replaced-packages-wrong-version-install.test000066400000000000000000000022201267577262200344620ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer--TEST-- Requiring a replaced package in a version, that is not provided by the replacing package, should install correctly (although that is not a very smart idea) --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "foo/original", "version": "1.0.0", "replace": {"foo/replaced": "1.0.0"} }, { "name": "foo/replaced", "version": "1.0.0" }, { "name": "foo/replaced", "version": "2.0.0" } ] } ], "require": { "foo/original": "1.0.0", "foo/replaced": "2.0.0" } } --RUN-- install --EXPECT-LOCK-- { "packages": [ { "name": "foo/original", "version": "1.0.0", "replace": {"foo/replaced": "1.0.0"}, "type": "library" }, { "name": "foo/replaced", "version": "2.0.0", "type": "library" } ], "packages-dev": [], "aliases": [], "minimum-stability": "stable", "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, "platform": [], "platform-dev": [] } --EXPECT-EXIT-CODE-- 0 --EXPECT-- Installing foo/original (1.0.0) Installing foo/replaced (2.0.0) root-requirements-do-not-affect-locked-versions.test000066400000000000000000000016541267577262200361150ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer--TEST-- The locked version will not get overwritten by an install --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "foo/bar", "version": "1.0.0" }, { "name": "foo/baz", "version": "1.0.0" }, { "name": "foo/baz", "version": "2.0.0" } ] } ], "require": { "foo/bar": "2.0.0", "foo/baz": "2.0.0" } } --LOCK-- { "packages": [ { "name": "foo/bar", "version": "1.0.0" }, { "name": "foo/baz", "version": "2.0.0" } ], "packages-dev": null, "aliases": [], "minimum-stability": "stable", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false } --INSTALLED-- [ { "name": "foo/bar", "version": "1.0.0" }, { "name": "foo/baz", "version": "1.0.0" } ] --RUN-- install --EXPECT-- Updating foo/baz (1.0.0) to foo/baz (2.0.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/suggest-installed.test000066400000000000000000000012211267577262200303630ustar00rootroot00000000000000--TEST-- Suggestions are not displayed for installed packages --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "1.0.0", "suggest": { "b/b": "an obscure reason" } }, { "name": "b/b", "version": "1.0.0" } ] } ], "require": { "a/a": "1.0.0", "b/b": "1.0.0" } } --RUN-- install --EXPECT-OUTPUT-- Loading composer repositories with package information Updating dependencies (including require-dev) Writing lock file Generating autoload files --EXPECT-- Installing a/a (1.0.0) Installing b/b (1.0.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/suggest-prod.test000066400000000000000000000010251267577262200273520ustar00rootroot00000000000000--TEST-- Suggestions are not displayed in non-dev mode --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "1.0.0", "suggest": { "b/b": "an obscure reason" } } ] } ], "require": { "a/a": "1.0.0" } } --RUN-- install --no-dev --EXPECT-OUTPUT-- Loading composer repositories with package information Updating dependencies Writing lock file Generating autoload files --EXPECT-- Installing a/a (1.0.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/suggest-replaced.test000066400000000000000000000013261267577262200301710ustar00rootroot00000000000000--TEST-- Suggestions are not displayed for packages if they are replaced --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "1.0.0", "suggest": { "b/b": "an obscure reason" }, "require": { "c/c": "*" } }, { "name": "c/c", "version": "1.0.0", "replace": { "b/b": "1.0.0" } } ] } ], "require": { "a/a": "1.0.0", "b/b": "1.0.0" } } --RUN-- install --EXPECT-OUTPUT-- Loading composer repositories with package information Updating dependencies (including require-dev) Writing lock file Generating autoload files --EXPECT-- Installing c/c (1.0.0) Installing a/a (1.0.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/suggest-uninstalled.test000066400000000000000000000011001267577262200307220ustar00rootroot00000000000000--TEST-- Suggestions are displayed --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "1.0.0", "suggest": { "b/b": "an obscure reason" } } ] } ], "require": { "a/a": "1.0.0" } } --RUN-- install --EXPECT-OUTPUT-- Loading composer repositories with package information Updating dependencies (including require-dev) a/a suggests installing b/b (an obscure reason) Writing lock file Generating autoload files --EXPECT-- Installing a/a (1.0.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/update-alias-lock.test000066400000000000000000000041731267577262200302350ustar00rootroot00000000000000--TEST-- Update aliased package does not mess up the lock file --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "source": { "reference": "master", "type": "git", "url": "" } } ] }, { "type": "package", "package": [ { "name": "a/a", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "source": { "reference": "lowpriomaster", "type": "git", "url": "" } } ] } ], "require": { "a/a": "1.*" }, "minimum-stability": "dev" } --LOCK-- { "_": "outdated lock file, should not have to be loaded in an update", "packages": [ { "package": "a/a", "version": "dev-master", "source-reference": "1234" }, { "package": "a/a", "version": "dev-master", "alias-pretty-version": "1.0.x-dev", "alias-version": "1.0.9999999.9999999-dev" } ], "packages-dev": null, "aliases": [], "minimum-stability": "dev", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false } --INSTALLED-- [ { "name": "a/a", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "source": { "reference": "1234", "type": "git", "url": "" } } ] --RUN-- update --EXPECT-LOCK-- { "packages": [ { "name": "a/a", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "source": { "reference": "master", "type": "git", "url": "" }, "type": "library" } ], "packages-dev": [], "aliases": [], "minimum-stability": "dev", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": [], "platform-dev": [] } --EXPECT-- Updating a/a (dev-master 1234) to a/a (dev-master master) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/update-alias.test000066400000000000000000000020251267577262200273010ustar00rootroot00000000000000--TEST-- Update aliased package to non-aliased version --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "source": { "reference": "master", "type": "git", "url": "" } }, { "name": "a/a", "version": "dev-foo", "source": { "reference": "foo", "type": "git", "url": "" } } ] } ], "require": { "a/a": "dev-foo" } } --INSTALLED-- [ { "name": "a/a", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "source": { "reference": "master", "type": "git", "url": "" } } ] --RUN-- update --EXPECT-- Updating a/a (dev-master master) to a/a (dev-foo foo) Marking a/a (1.0.x-dev master) as uninstalled, alias of a/a (dev-master master)composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/update-all-dry-run.test000066400000000000000000000017471267577262200303700ustar00rootroot00000000000000--TEST-- Updates updateable packages in dry-run mode --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "1.0.0" }, { "name": "a/a", "version": "1.0.1" }, { "name": "a/a", "version": "1.1.0" }, { "name": "a/b", "version": "1.0.0" }, { "name": "a/b", "version": "1.0.1" }, { "name": "a/b", "version": "2.0.0" }, { "name": "a/c", "version": "1.0.0" }, { "name": "a/c", "version": "2.0.0" } ] } ], "require": { "a/a": "1.0.*", "a/c": "1.*" }, "require-dev": { "a/b": "*" } } --INSTALLED-- [ { "name": "a/a", "version": "1.0.0" }, { "name": "a/c", "version": "1.0.0" }, { "name": "a/b", "version": "1.0.0" } ] --RUN-- update --dry-run --EXPECT-- Updating a/a (1.0.0) to a/a (1.0.1) Updating a/b (1.0.0) to a/b (2.0.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/update-all.test000066400000000000000000000017151267577262200267650ustar00rootroot00000000000000--TEST-- Updates updateable packages --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "1.0.0" }, { "name": "a/a", "version": "1.0.1" }, { "name": "a/a", "version": "1.1.0" }, { "name": "a/b", "version": "1.0.0" }, { "name": "a/b", "version": "1.0.1" }, { "name": "a/b", "version": "2.0.0" }, { "name": "a/c", "version": "1.0.0" }, { "name": "a/c", "version": "2.0.0" } ] } ], "require": { "a/a": "1.0.*", "a/c": "1.*" }, "require-dev": { "a/b": "*" } } --INSTALLED-- [ { "name": "a/a", "version": "1.0.0" }, { "name": "a/c", "version": "1.0.0" }, { "name": "a/b", "version": "1.0.0" } ] --RUN-- update --EXPECT-- Updating a/a (1.0.0) to a/a (1.0.1) Updating a/b (1.0.0) to a/b (2.0.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/update-dev-ignores-providers.test000066400000000000000000000020201267577262200324400ustar00rootroot00000000000000--TEST-- Updating a dev package selects its newest version but no providers --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/replacer", "version": "dev-master", "source": { "reference": "wrong", "url": "", "type": "git" }, "replace": { "a/installed": "dev-master" } }, { "name": "a/installed", "version": "dev-master", "source": { "reference": "newref", "url": "", "type": "git" } } ] } ], "require": { "a/installed": "dev-master" }, "minimum-stability": "dev" } --INSTALLED-- [ { "name": "a/installed", "version": "dev-master", "source": { "reference": "oldref", "url": "", "type": "git" } } ] --RUN-- update --EXPECT-- Updating a/installed (dev-master oldref) to a/installed (dev-master newref) update-dev-packages-updates-repo-url.test000066400000000000000000000057201267577262200336760ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer--TEST-- Updating dev packages where no reference change happened triggers a repo url change --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "2.1.x-dev" } }, "source": { "reference": "newmaster", "type": "git", "url": "newurl" } }, { "name": "b/b", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "2.1.x-dev" } }, "source": { "reference": "master", "type": "git", "url": "newurl" } } ] } ], "require": { "a/a": "~2.1", "b/b": "~2.1" }, "minimum-stability": "dev" } --INSTALLED-- [ { "name": "a/a", "version": "dev-master", "version_normalized": "9999999-dev", "extra": { "branch-alias": { "dev-master": "2.1.x-dev" } }, "source": { "reference": "oldmaster", "type": "git", "url": "oldurl" }, "type": "library" }, { "name": "b/b", "version": "dev-master", "version_normalized": "9999999-dev", "extra": { "branch-alias": { "dev-master": "2.1.x-dev" } }, "source": { "reference": "master", "type": "git", "url": "oldurl" }, "type": "library" } ] --LOCK-- { "packages": [ { "name": "a/a", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "2.1.x-dev" } }, "source": { "reference": "newmaster", "type": "git", "url": "oldurl" }, "type": "library" }, { "name": "b/b", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "2.1.x-dev" } }, "source": { "reference": "master", "type": "git", "url": "oldurl" }, "type": "library" } ], "packages-dev": [], "aliases": [], "minimum-stability": "dev", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": [], "platform-dev": [] } --RUN-- update --EXPECT-LOCK-- { "packages": [ { "name": "a/a", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "2.1.x-dev" } }, "source": { "reference": "newmaster", "type": "git", "url": "newurl" }, "type": "library" }, { "name": "b/b", "version": "dev-master", "extra": { "branch-alias": { "dev-master": "2.1.x-dev" } }, "source": { "reference": "master", "type": "git", "url": "newurl" }, "type": "library" } ], "packages-dev": [], "aliases": [], "minimum-stability": "dev", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": [], "platform-dev": [] } --EXPECT-- Updating a/a (dev-master oldmaster) to a/a (dev-master newmaster) update-dev-to-new-ref-picks-up-changes.test000066400000000000000000000021661267577262200340350ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer--TEST-- Updating a dev package to its latest ref should pick up new dependencies --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/devpackage", "version": "dev-master", "source": { "reference": "newref", "url": "", "type": "git" }, "require": { "a/dependency": "*" } }, { "name": "a/dependency", "version": "dev-master", "source": { "reference": "ref", "url": "", "type": "git" }, "require": {} } ] } ], "require": { "a/devpackage": "dev-master" }, "minimum-stability": "dev" } --INSTALLED-- [ { "name": "a/devpackage", "version": "dev-master", "source": { "reference": "oldref", "url": "", "type": "git" }, "require": {} } ] --RUN-- update --EXPECT-- Installing a/dependency (dev-master ref) Updating a/devpackage (dev-master oldref) to a/devpackage (dev-master newref) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/update-downgrades-unstable-packages.test000066400000000000000000000027741267577262200337470ustar00rootroot00000000000000--TEST-- Downgrading from unstable to more stable package should work even if already installed --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "dev-master", "source": { "reference": "abcd", "url": "", "type": "git" } }, { "name": "a/a", "version": "1.0.0", "source": { "reference": "1.0.0", "url": "", "type": "git" }, "dist": { "reference": "1.0.0", "url": "", "type": "zip", "shasum": "" } }, { "name": "b/b", "version": "dev-master", "source": { "reference": "abcd", "url": "", "type": "git" } }, { "name": "b/b", "version": "1.0.0", "source": { "reference": "1.0.0", "url": "", "type": "git" }, "dist": { "reference": "1.0.0", "url": "", "type": "zip", "shasum": "" } } ] } ], "require": { "a/a": "*", "b/b": "*@dev" } } --INSTALLED-- [ { "name": "a/a", "version": "dev-master", "source": { "reference": "abcd", "url": "", "type": "git" } }, { "name": "b/b", "version": "dev-master", "source": { "reference": "abcd", "url": "", "type": "git" } } ] --RUN-- update --EXPECT-- Updating a/a (dev-master abcd) to a/a (1.0.0) update-ignore-platform-package-requirements.test000066400000000000000000000010011267577262200353410ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer--TEST-- Update in ignore-platform-reqs mode --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "1.0.1", "require": { "ext-testdummy": "*" } } ] } ], "require": { "a/a": "1.0.*", "php": "99.9", "ext-dummy2": "9" } } --INSTALLED-- [ { "name": "a/a", "version": "1.0.0" } ] --RUN-- update --ignore-platform-reqs --EXPECT-- Updating a/a (1.0.0) to a/a (1.0.1) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/update-installed-alias-dry-run.test000066400000000000000000000024541267577262200326620ustar00rootroot00000000000000--TEST-- Updates installed alias packages in dry-run mode --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "dev-master", "require": { "b/b": "2.0.*" }, "source": { "reference": "abcdef", "url": "", "type": "git" }, "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } } }, { "name": "b/b", "version": "dev-master", "source": { "reference": "123456", "url": "", "type": "git" }, "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } } } ] } ], "require": { "a/a": "~1.0@dev", "b/b": "@dev" } } --INSTALLED-- [ { "name": "a/a", "version": "dev-master", "require": { "b/b": "2.0.*" }, "source": { "reference": "abcdef", "url": "", "type": "git" }, "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } } }, { "name": "b/b", "version": "dev-master", "source": { "reference": "123456", "url": "", "type": "git" }, "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } } } ] --RUN-- update --dry-run --EXPECT-- composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/update-installed-alias.test000066400000000000000000000024221267577262200312570ustar00rootroot00000000000000--TEST-- Updates installed alias packages --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "dev-master", "require": { "b/b": "2.0.*" }, "source": { "reference": "abcdef", "url": "", "type": "git" }, "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } } }, { "name": "b/b", "version": "dev-master", "source": { "reference": "123456", "url": "", "type": "git" }, "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } } } ] } ], "require": { "a/a": "~1.0@dev", "b/b": "@dev" } } --INSTALLED-- [ { "name": "a/a", "version": "dev-master", "require": { "b/b": "2.0.*" }, "source": { "reference": "abcdef", "url": "", "type": "git" }, "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } } }, { "name": "b/b", "version": "dev-master", "source": { "reference": "123456", "url": "", "type": "git" }, "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } } } ] --RUN-- update --EXPECT-- composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/update-installed-reference-dry-run.test000066400000000000000000000014141267577262200335220ustar00rootroot00000000000000--TEST-- Updating a dev package forcing it's reference, using dry run, should not do anything if the referenced version is the installed one --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "dev-master", "source": { "reference": "abc123", "url": "", "type": "git" } } ] } ], "require": { "a/a": "dev-master#def000" } } --INSTALLED-- [ { "name": "a/a", "version": "dev-master", "source": { "reference": "def000", "url": "", "type": "git" }, "dist": { "reference": "def000", "url": "", "type": "zip", "shasum": "" } } ] --RUN-- update --dry-run --EXPECT-- composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/update-installed-reference.test000066400000000000000000000013621267577262200321260ustar00rootroot00000000000000--TEST-- Updating a dev package forcing it's reference should not do anything if the referenced version is the installed one --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "dev-master", "source": { "reference": "abc123", "url": "", "type": "git" } } ] } ], "require": { "a/a": "dev-master#def000" } } --INSTALLED-- [ { "name": "a/a", "version": "dev-master", "source": { "reference": "def000", "url": "", "type": "git" }, "dist": { "reference": "def000", "url": "", "type": "zip", "shasum": "" } } ] --RUN-- update --EXPECT-- composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/update-picks-up-change-of-vcs-type.test000066400000000000000000000024061267577262200333430ustar00rootroot00000000000000--TEST-- Converting from one VCS type to another (including an URL change) should update the lock file. --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "1.0.0", "source": { "reference": "new-git-ref", "type": "git", "url": "new-git-url" } } ] } ], "require": { "a/a": "1.0.0" } } --INSTALLED-- [ { "name": "a/a", "version": "1.0.0", "source": { "reference": "old-hg-ref", "type": "hg", "url": "old-hg-url" } } ] --LOCK-- { "packages": [ { "name": "a/a", "version": "1.0.0", "source": { "reference": "old-hg-ref", "type": "hg", "url": "old-hg-url" } } ] } --RUN-- update --EXPECT-LOCK-- { "packages": [ { "name": "a/a", "version": "1.0.0", "source": { "reference": "new-git-ref", "type": "git", "url": "new-git-url" }, "type": "library" } ], "packages-dev": [], "aliases": [], "minimum-stability": "stable", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": [], "platform-dev": [] } --EXPECT-- composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/update-prefer-lowest-stable.test000066400000000000000000000020201267577262200322510ustar00rootroot00000000000000--TEST-- Updates packages to their lowest stable version --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "1.0.0-rc1" }, { "name": "a/a", "version": "1.0.1" }, { "name": "a/a", "version": "1.1.0" }, { "name": "a/b", "version": "1.0.0" }, { "name": "a/b", "version": "1.0.1" }, { "name": "a/b", "version": "2.0.0" }, { "name": "a/c", "version": "1.0.0" }, { "name": "a/c", "version": "2.0.0" } ] } ], "require": { "a/a": "~1.0@dev", "a/c": "2.*" }, "require-dev": { "a/b": "*" } } --INSTALLED-- [ { "name": "a/a", "version": "1.0.0-rc1" }, { "name": "a/c", "version": "2.0.0" }, { "name": "a/b", "version": "1.0.1" } ] --RUN-- update --prefer-lowest --prefer-stable --EXPECT-- Updating a/a (1.0.0-rc1) to a/a (1.0.1) Updating a/b (1.0.1) to a/b (1.0.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/update-reference.test000066400000000000000000000012251267577262200301470ustar00rootroot00000000000000--TEST-- Updates a dev package forcing it's reference --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "dev-master", "source": { "reference": "abc123", "url": "", "type": "git" } } ] } ], "require": { "a/a": "dev-master#def000" } } --INSTALLED-- [ { "name": "a/a", "version": "dev-master", "source": { "reference": "abc123", "url": "", "type": "git" } } ] --RUN-- install --EXPECT-- Updating a/a (dev-master abc123) to a/a (dev-master def000) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/update-whitelist-locked-require.test000066400000000000000000000030541267577262200331400ustar00rootroot00000000000000--TEST-- Update with a package whitelist only updates those packages if they are not present in composer.json --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "whitelisted", "version": "1.1.0", "require": { "dependency": "1.1.0", "fixed-dependency": "1.*" } }, { "name": "whitelisted", "version": "1.0.0", "require": { "dependency": "1.0.0", "fixed-dependency": "1.*" } }, { "name": "dependency", "version": "1.1.0" }, { "name": "dependency", "version": "1.0.0" }, { "name": "fixed-dependency", "version": "1.1.0", "require": { "fixed-sub-dependency": "1.*" } }, { "name": "fixed-dependency", "version": "1.0.0", "require": { "fixed-sub-dependency": "1.*" } }, { "name": "fixed-sub-dependency", "version": "1.1.0" }, { "name": "fixed-sub-dependency", "version": "1.0.0" } ] } ], "require": { "whitelisted": "1.*", "fixed-dependency": "1.*" } } --INSTALLED-- [ { "name": "whitelisted", "version": "1.0.0", "require": { "dependency": "1.0.0", "fixed-dependency": "1.*" } }, { "name": "dependency", "version": "1.0.0" }, { "name": "fixed-dependency", "version": "1.0.0", "require": { "fixed-sub-dependency": "1.*" } }, { "name": "fixed-sub-dependency", "version": "1.0.0" } ] --RUN-- update whitelisted dependency --EXPECT-- Updating dependency (1.0.0) to dependency (1.1.0) Updating whitelisted (1.0.0) to whitelisted (1.1.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/update-whitelist-patterns.test000066400000000000000000000033701267577262200320660ustar00rootroot00000000000000--TEST-- Update with a package whitelist only updates those corresponding to the pattern --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "vendor/Test-Package", "version": "2.0" }, { "name": "vendor/NotMe", "version": "2.0" }, { "name": "exact/Test-Package", "version": "2.0" }, { "name": "notexact/TestPackage", "version": "2.0" }, { "name": "all/Package1", "version": "2.0" }, { "name": "all/Package2", "version": "2.0" }, { "name": "another/another", "version": "2.0" }, { "name": "no/regexp", "version": "2.0" } ] } ], "require": { "vendor/Test-Package": "*.*", "vendor/NotMe": "*.*", "exact/Test-Package": "*.*", "notexact/TestPackage": "*.*", "all/Package1": "*.*", "all/Package2": "*.*", "another/another": "*.*", "no/regexp": "*.*" } } --INSTALLED-- [ { "name": "vendor/Test-Package", "version": "1.0" }, { "name": "vendor/NotMe", "version": "1.0" }, { "name": "exact/Test-Package", "version": "1.0" }, { "name": "notexact/TestPackage", "version": "1.0" }, { "name": "all/Package1", "version": "1.0" }, { "name": "all/Package2", "version": "1.0" }, { "name": "another/another", "version": "1.0" }, { "name": "no/regexp", "version": "1.0" } ] --RUN-- update vendor/Test* exact/Test-Package notexact/Test all/* no/reg?xp --EXPECT-- Updating vendor/Test-Package (1.0) to vendor/Test-Package (2.0) Updating exact/Test-Package (1.0) to exact/Test-Package (2.0) Updating all/Package1 (1.0) to all/Package1 (2.0) Updating all/Package2 (1.0) to all/Package2 (2.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/update-whitelist-reads-lock.test000066400000000000000000000027431267577262200322550ustar00rootroot00000000000000--TEST-- Limited update takes rules from lock if available, and not from the installed repo + composer.json --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "toupdate/installed", "version": "1.1.0" }, { "name": "toupdate/installed", "version": "1.0.0" }, { "name": "toupdate/notinstalled", "version": "1.1.0" }, { "name": "toupdate/notinstalled", "version": "1.0.0" }, { "name": "old/installed", "version": "0.9.0" }, { "name": "old/installed", "version": "1.0.0" } ] } ], "require": { "toupdate/installed": "1.*", "toupdate/notinstalled": "1.*", "old/installed": "*" } } --LOCK-- { "packages": [ { "name": "old/installed", "version": "1.0.0" }, { "name": "toupdate/installed", "version": "1.0.0" }, { "name": "toupdate/notinstalled", "version": "1.0.0" } ], "packages-dev": null, "aliases": [], "minimum-stability": "stable", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false } --INSTALLED-- [ { "name": "toupdate/installed", "version": "1.0.0" }, { "name": "old/installed", "version": "0.9.0" } ] --RUN-- update toupdate/installed --EXPECT-- Updating toupdate/installed (1.0.0) to toupdate/installed (1.1.0) Updating old/installed (0.9.0) to old/installed (1.0.0) Installing toupdate/notinstalled (1.0.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/update-whitelist-removes-unused.test000066400000000000000000000020711267577262200332040ustar00rootroot00000000000000--TEST-- Update with a package whitelist removes unused packages --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "whitelisted", "version": "1.1.0" }, { "name": "whitelisted", "version": "1.0.0", "require": { "fixed-dependency": "1.0.0", "old-dependency": "1.0.0" } }, { "name": "fixed-dependency", "version": "1.1.0" }, { "name": "fixed-dependency", "version": "1.0.0" }, { "name": "old-dependency", "version": "1.0.0" } ] } ], "require": { "whitelisted": "1.*", "fixed-dependency": "1.*" } } --INSTALLED-- [ { "name": "whitelisted", "version": "1.0.0", "require": { "old-dependency": "1.0.0", "fixed-dependency": "1.0.0" } }, { "name": "fixed-dependency", "version": "1.0.0" }, { "name": "old-dependency", "version": "1.0.0" } ] --RUN-- update --with-dependencies whitelisted --EXPECT-- Uninstalling old-dependency (1.0.0) Updating whitelisted (1.0.0) to whitelisted (1.1.0) composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/update-whitelist-with-dependencies.test000066400000000000000000000032131267577262200336210ustar00rootroot00000000000000--TEST-- Update with a package whitelist only updates those packages and their dependencies listed as command arguments --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "fixed", "version": "1.1.0" }, { "name": "fixed", "version": "1.0.0" }, { "name": "whitelisted", "version": "1.1.0", "require": { "dependency": "1.1.0" } }, { "name": "whitelisted", "version": "1.0.0", "require": { "dependency": "1.0.0" } }, { "name": "dependency", "version": "1.1.0" }, { "name": "dependency", "version": "1.0.0" }, { "name": "unrelated", "version": "1.1.0", "require": { "unrelated-dependency": "1.*" } }, { "name": "unrelated", "version": "1.0.0", "require": { "unrelated-dependency": "1.*" } }, { "name": "unrelated-dependency", "version": "1.1.0" }, { "name": "unrelated-dependency", "version": "1.0.0" } ] } ], "require": { "fixed": "1.*", "whitelisted": "1.*", "unrelated": "1.*" } } --INSTALLED-- [ { "name": "fixed", "version": "1.0.0" }, { "name": "whitelisted", "version": "1.0.0", "require": { "dependency": "1.0.0" } }, { "name": "dependency", "version": "1.0.0" }, { "name": "unrelated", "version": "1.0.0", "require": { "unrelated-dependency": "1.*" } }, { "name": "unrelated-dependency", "version": "1.0.0" } ] --RUN-- update whitelisted --with-dependencies --EXPECT-- Updating dependency (1.0.0) to dependency (1.1.0) Updating whitelisted (1.0.0) to whitelisted (1.1.0) update-whitelist-with-dependency-conflict.test000066400000000000000000000027771267577262200350470ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer--TEST-- Update with a package whitelist only updates whitelisted packages if no dependency conflicts --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "fixed", "version": "1.1.0" }, { "name": "fixed", "version": "1.0.0" }, { "name": "whitelisted", "version": "1.1.0", "require": { "dependency": "1.1.0" } }, { "name": "whitelisted", "version": "1.0.0", "require": { "dependency": "1.0.0" } }, { "name": "dependency", "version": "1.1.0" }, { "name": "dependency", "version": "1.0.0" }, { "name": "unrelated", "version": "1.1.0", "require": { "unrelated-dependency": "1.*" } }, { "name": "unrelated", "version": "1.0.0", "require": { "unrelated-dependency": "1.*" } }, { "name": "unrelated-dependency", "version": "1.1.0" }, { "name": "unrelated-dependency", "version": "1.0.0" } ] } ], "require": { "fixed": "1.*", "whitelisted": "1.*", "unrelated": "1.*" } } --INSTALLED-- [ { "name": "fixed", "version": "1.0.0" }, { "name": "whitelisted", "version": "1.0.0", "require": { "dependency": "1.0.0" } }, { "name": "dependency", "version": "1.0.0" }, { "name": "unrelated", "version": "1.0.0", "require": { "unrelated-dependency": "1.*" } }, { "name": "unrelated-dependency", "version": "1.0.0" } ] --RUN-- update whitelisted --EXPECT-- composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer/update-whitelist.test000066400000000000000000000030501267577262200302230ustar00rootroot00000000000000--TEST-- Update with a package whitelist only updates those packages listed as command arguments --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "fixed", "version": "1.1.0" }, { "name": "fixed", "version": "1.0.0" }, { "name": "whitelisted", "version": "1.1.0", "require": { "dependency": "1.*" } }, { "name": "whitelisted", "version": "1.0.0", "require": { "dependency": "1.*" } }, { "name": "dependency", "version": "1.1.0" }, { "name": "dependency", "version": "1.0.0" }, { "name": "unrelated", "version": "1.1.0", "require": { "unrelated-dependency": "1.*" } }, { "name": "unrelated", "version": "1.0.0", "require": { "unrelated-dependency": "1.*" } }, { "name": "unrelated-dependency", "version": "1.1.0" }, { "name": "unrelated-dependency", "version": "1.0.0" } ] } ], "require": { "fixed": "1.*", "whitelisted": "1.*", "unrelated": "1.*" } } --INSTALLED-- [ { "name": "fixed", "version": "1.0.0" }, { "name": "whitelisted", "version": "1.0.0", "require": { "dependency": "1.*" } }, { "name": "dependency", "version": "1.0.0" }, { "name": "unrelated", "version": "1.0.0", "require": { "unrelated-dependency": "1.*" } }, { "name": "unrelated-dependency", "version": "1.0.0" } ] --RUN-- update whitelisted --EXPECT-- Updating whitelisted (1.0.0) to whitelisted (1.1.0) updating-dev-from-lock-removes-old-deps.test000066400000000000000000000021001267577262200343040ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer--TEST-- Installing locked dev packages should remove old dependencies --COMPOSER-- { "require": { "a/devpackage": "dev-master" }, "minimum-stability": "dev" } --LOCK-- { "packages": [ { "name": "a/devpackage", "version": "dev-master", "source": { "reference": "newref", "url": "", "type": "git" }, "require": {} } ], "packages-dev": null, "aliases": [], "minimum-stability": "dev", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false } --INSTALLED-- [ { "name": "a/devpackage", "version": "dev-master", "source": { "reference": "oldref", "url": "", "type": "git" }, "require": { "a/dependency": "*" } }, { "name": "a/dependency", "version": "dev-master", "source": { "reference": "ref", "url": "", "type": "git" }, "require": {} } ] --RUN-- install --EXPECT-- Uninstalling a/dependency (dev-master ref) Updating a/devpackage (dev-master oldref) to a/devpackage (dev-master newref) updating-dev-updates-url-and-reference.test000066400000000000000000000035451267577262200342070ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Fixtures/installer--TEST-- Updating a dev package for new reference updates the url and reference --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "a/a", "version": "dev-master", "source": { "reference": "newref", "url": "newurl", "type": "git" }, "dist": { "reference": "newref", "url": "newurl", "type": "zip", "shasum": "" } } ] } ], "minimum-stability": "dev", "require": { "a/a": "dev-master" } } --LOCK-- { "packages": [ { "name": "a/a", "version": "dev-master", "source": { "reference": "oldref", "url": "oldurl", "type": "git" }, "dist": { "reference": "oldref", "url": "oldurl", "type": "zip", "shasum": "" } } ], "packages-dev": null, "aliases": [], "minimum-stability": "dev", "stability-flags": {"a/a":20}, "prefer-stable": false, "prefer-lowest": false } --INSTALLED-- [ { "name": "a/a", "version": "dev-master", "source": { "reference": "oldref", "url": "oldurl", "type": "git" }, "dist": { "reference": "oldref", "url": "oldurl", "type": "zip", "shasum": "" } } ] --RUN-- update --EXPECT-LOCK-- { "packages": [ { "name": "a/a", "version": "dev-master", "type": "library", "source": { "reference": "newref", "url": "newurl", "type": "git" }, "dist": { "reference": "newref", "url": "newurl", "type": "zip", "shasum": "" } } ], "packages-dev": [], "aliases": [], "minimum-stability": "dev", "stability-flags": {"a/a":20}, "prefer-stable": false, "prefer-lowest": false, "platform": [], "platform-dev": [] } --EXPECT-- Updating a/a (dev-master oldref) to a/a (dev-master newref) composer-1.0.0-beta2/tests/Composer/Test/IO/000077500000000000000000000000001267577262200205315ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/IO/ConsoleIOTest.php000066400000000000000000000300751267577262200237410ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\IO; use Composer\IO\ConsoleIO; use Composer\TestCase; use Symfony\Component\Console\Output\OutputInterface; class ConsoleIOTest extends TestCase { public function testIsInteractive() { $inputMock = $this->getMock('Symfony\Component\Console\Input\InputInterface'); $inputMock->expects($this->at(0)) ->method('isInteractive') ->will($this->returnValue(true)); $inputMock->expects($this->at(1)) ->method('isInteractive') ->will($this->returnValue(false)); $outputMock = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); $helperMock = $this->getMock('Symfony\Component\Console\Helper\HelperSet'); $consoleIO = new ConsoleIO($inputMock, $outputMock, $helperMock); $this->assertTrue($consoleIO->isInteractive()); $this->assertFalse($consoleIO->isInteractive()); } public function testWrite() { $inputMock = $this->getMock('Symfony\Component\Console\Input\InputInterface'); $outputMock = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); $outputMock->expects($this->once()) ->method('getVerbosity') ->willReturn(OutputInterface::VERBOSITY_NORMAL); $outputMock->expects($this->once()) ->method('write') ->with($this->equalTo('some information about something'), $this->equalTo(false)); $helperMock = $this->getMock('Symfony\Component\Console\Helper\HelperSet'); $consoleIO = new ConsoleIO($inputMock, $outputMock, $helperMock); $consoleIO->write('some information about something', false); } public function testWriteError() { $inputMock = $this->getMock('Symfony\Component\Console\Input\InputInterface'); $outputMock = $this->getMock('Symfony\Component\Console\Output\ConsoleOutputInterface'); $outputMock->expects($this->once()) ->method('getVerbosity') ->willReturn(OutputInterface::VERBOSITY_NORMAL); $outputMock->expects($this->once()) ->method('getErrorOutput') ->willReturn($outputMock); $outputMock->expects($this->once()) ->method('write') ->with($this->equalTo('some information about something'), $this->equalTo(false)); $helperMock = $this->getMock('Symfony\Component\Console\Helper\HelperSet'); $consoleIO = new ConsoleIO($inputMock, $outputMock, $helperMock); $consoleIO->writeError('some information about something', false); } public function testWriteWithMultipleLineStringWhenDebugging() { $inputMock = $this->getMock('Symfony\Component\Console\Input\InputInterface'); $outputMock = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); $outputMock->expects($this->once()) ->method('getVerbosity') ->willReturn(OutputInterface::VERBOSITY_NORMAL); $outputMock->expects($this->once()) ->method('write') ->with( $this->callback(function ($messages) { $result = preg_match("[(.*)/(.*) First line]", $messages[0]) > 0; $result &= preg_match("[(.*)/(.*) Second line]", $messages[1]) > 0; return $result; }), $this->equalTo(false) ); $helperMock = $this->getMock('Symfony\Component\Console\Helper\HelperSet'); $consoleIO = new ConsoleIO($inputMock, $outputMock, $helperMock); $startTime = microtime(true); $consoleIO->enableDebugging($startTime); $example = explode('\n', 'First line\nSecond lines'); $consoleIO->write($example, false); } public function testOverwrite() { $inputMock = $this->getMock('Symfony\Component\Console\Input\InputInterface'); $outputMock = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); $outputMock->expects($this->any()) ->method('getVerbosity') ->willReturn(OutputInterface::VERBOSITY_NORMAL); $outputMock->expects($this->at(1)) ->method('write') ->with($this->equalTo('something (strlen = 23)')); $outputMock->expects($this->at(3)) ->method('write') ->with($this->equalTo(str_repeat("\x08", 23)), $this->equalTo(false)); $outputMock->expects($this->at(5)) ->method('write') ->with($this->equalTo('shorter (12)'), $this->equalTo(false)); $outputMock->expects($this->at(7)) ->method('write') ->with($this->equalTo(str_repeat(' ', 11)), $this->equalTo(false)); $outputMock->expects($this->at(9)) ->method('write') ->with($this->equalTo(str_repeat("\x08", 11)), $this->equalTo(false)); $outputMock->expects($this->at(11)) ->method('write') ->with($this->equalTo(str_repeat("\x08", 12)), $this->equalTo(false)); $outputMock->expects($this->at(13)) ->method('write') ->with($this->equalTo('something longer than initial (34)')); $helperMock = $this->getMock('Symfony\Component\Console\Helper\HelperSet'); $consoleIO = new ConsoleIO($inputMock, $outputMock, $helperMock); $consoleIO->write('something (strlen = 23)'); $consoleIO->overwrite('shorter (12)', false); $consoleIO->overwrite('something longer than initial (34)'); } public function testAsk() { $inputMock = $this->getMock('Symfony\Component\Console\Input\InputInterface'); $outputMock = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); $helperMock = $this->getMock('Symfony\Component\Console\Helper\QuestionHelper'); $setMock = $this->getMock('Symfony\Component\Console\Helper\HelperSet'); $helperMock ->expects($this->once()) ->method('ask') ->with( $this->isInstanceOf('Symfony\Component\Console\Input\InputInterface'), $this->isInstanceOf('Symfony\Component\Console\Output\OutputInterface'), $this->isInstanceOf('Symfony\Component\Console\Question\Question') ) ; $setMock ->expects($this->once()) ->method('get') ->with($this->equalTo('question')) ->will($this->returnValue($helperMock)) ; $consoleIO = new ConsoleIO($inputMock, $outputMock, $setMock); $consoleIO->ask('Why?', 'default'); } public function testAskConfirmation() { $inputMock = $this->getMock('Symfony\Component\Console\Input\InputInterface'); $outputMock = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); $helperMock = $this->getMock('Symfony\Component\Console\Helper\QuestionHelper'); $setMock = $this->getMock('Symfony\Component\Console\Helper\HelperSet'); $helperMock ->expects($this->once()) ->method('ask') ->with( $this->isInstanceOf('Symfony\Component\Console\Input\InputInterface'), $this->isInstanceOf('Symfony\Component\Console\Output\OutputInterface'), $this->isInstanceOf('Symfony\Component\Console\Question\ConfirmationQuestion') ) ; $setMock ->expects($this->once()) ->method('get') ->with($this->equalTo('question')) ->will($this->returnValue($helperMock)) ; $consoleIO = new ConsoleIO($inputMock, $outputMock, $setMock); $consoleIO->askConfirmation('Why?', 'default'); } public function testAskAndValidate() { $inputMock = $this->getMock('Symfony\Component\Console\Input\InputInterface'); $outputMock = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); $helperMock = $this->getMock('Symfony\Component\Console\Helper\QuestionHelper'); $setMock = $this->getMock('Symfony\Component\Console\Helper\HelperSet'); $helperMock ->expects($this->once()) ->method('ask') ->with( $this->isInstanceOf('Symfony\Component\Console\Input\InputInterface'), $this->isInstanceOf('Symfony\Component\Console\Output\OutputInterface'), $this->isInstanceOf('Symfony\Component\Console\Question\Question') ) ; $setMock ->expects($this->once()) ->method('get') ->with($this->equalTo('question')) ->will($this->returnValue($helperMock)) ; $consoleIO = new ConsoleIO($inputMock, $outputMock, $setMock); $consoleIO->askAndValidate('Why?', 'validator', 10, 'default'); } public function testSelect() { $inputMock = $this->getMock('Symfony\Component\Console\Input\InputInterface'); $outputMock = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); $dialogMock = $this->getMock('Symfony\Component\Console\Helper\DialogHelper'); $helperMock = $this->getMock('Symfony\Component\Console\Helper\HelperSet'); $inputMock->expects($this->once()) ->method('isInteractive') ->will($this->returnValue(true)); $dialogMock->expects($this->once()) ->method('select') ->with($this->isInstanceOf('Symfony\Component\Console\Output\OutputInterface'), $this->equalTo('Select item'), $this->equalTo(array("item1", "item2")), $this->equalTo(null), $this->equalTo(false), $this->equalTo("Error message"), $this->equalTo(true)); $helperMock->expects($this->once()) ->method('get') ->with($this->equalTo('dialog')) ->will($this->returnValue($dialogMock)); $consoleIO = new ConsoleIO($inputMock, $outputMock, $helperMock); $consoleIO->select('Select item', array("item1", "item2"), null, false, "Error message", true); } public function testSetAndgetAuthentication() { $inputMock = $this->getMock('Symfony\Component\Console\Input\InputInterface'); $outputMock = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); $helperMock = $this->getMock('Symfony\Component\Console\Helper\HelperSet'); $consoleIO = new ConsoleIO($inputMock, $outputMock, $helperMock); $consoleIO->setAuthentication('repoName', 'l3l0', 'passwd'); $this->assertEquals( array('username' => 'l3l0', 'password' => 'passwd'), $consoleIO->getAuthentication('repoName') ); } public function testGetAuthenticationWhenDidNotSet() { $inputMock = $this->getMock('Symfony\Component\Console\Input\InputInterface'); $outputMock = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); $helperMock = $this->getMock('Symfony\Component\Console\Helper\HelperSet'); $consoleIO = new ConsoleIO($inputMock, $outputMock, $helperMock); $this->assertEquals( array('username' => null, 'password' => null), $consoleIO->getAuthentication('repoName') ); } public function testHasAuthentication() { $inputMock = $this->getMock('Symfony\Component\Console\Input\InputInterface'); $outputMock = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); $helperMock = $this->getMock('Symfony\Component\Console\Helper\HelperSet'); $consoleIO = new ConsoleIO($inputMock, $outputMock, $helperMock); $consoleIO->setAuthentication('repoName', 'l3l0', 'passwd'); $this->assertTrue($consoleIO->hasAuthentication('repoName')); $this->assertFalse($consoleIO->hasAuthentication('repoName2')); } } composer-1.0.0-beta2/tests/Composer/Test/IO/NullIOTest.php000066400000000000000000000033511267577262200232460ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\IO; use Composer\IO\NullIO; use Composer\TestCase; class NullIOTest extends TestCase { public function testIsInteractive() { $io = new NullIO(); $this->assertFalse($io->isInteractive()); } public function testhasAuthentication() { $io = new NullIO(); $this->assertFalse($io->hasAuthentication('foo')); } public function testAskAndHideAnswer() { $io = new NullIO(); $this->assertNull($io->askAndHideAnswer('foo')); } public function testgetAuthentications() { $io = new NullIO(); $this->assertInternalType('array', $io->getAuthentications()); $this->assertEmpty($io->getAuthentications()); $this->assertEquals(array('username' => null, 'password' => null), $io->getAuthentication('foo')); } public function testAsk() { $io = new NullIO(); $this->assertEquals('foo', $io->ask('bar', 'foo')); } public function testAskConfirmation() { $io = new NullIO(); $this->assertEquals('foo', $io->askConfirmation('bar', 'foo')); } public function testAskAndValidate() { $io = new NullIO(); $this->assertEquals('foo', $io->askAndValidate('question', 'validator', false, 'foo')); } public function testSelect() { $io = new NullIO(); $this->assertEquals('1', $io->select('question', array('item1', 'item2'), '1', 2, 'foo', true)); } } composer-1.0.0-beta2/tests/Composer/Test/Installer/000077500000000000000000000000001267577262200221575ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Installer/InstallationManagerTest.php000066400000000000000000000173301267577262200274700ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Installer; use Composer\Installer\InstallationManager; use Composer\DependencyResolver\Operation\InstallOperation; use Composer\DependencyResolver\Operation\UpdateOperation; use Composer\DependencyResolver\Operation\UninstallOperation; class InstallationManagerTest extends \PHPUnit_Framework_TestCase { public function setUp() { $this->repository = $this->getMock('Composer\Repository\InstalledRepositoryInterface'); } public function testAddGetInstaller() { $installer = $this->createInstallerMock(); $installer ->expects($this->exactly(2)) ->method('supports') ->will($this->returnCallback(function ($arg) { return $arg === 'vendor'; })); $manager = new InstallationManager(); $manager->addInstaller($installer); $this->assertSame($installer, $manager->getInstaller('vendor')); $this->setExpectedException('InvalidArgumentException'); $manager->getInstaller('unregistered'); } public function testAddRemoveInstaller() { $installer = $this->createInstallerMock(); $installer ->expects($this->exactly(2)) ->method('supports') ->will($this->returnCallback(function ($arg) { return $arg === 'vendor'; })); $installer2 = $this->createInstallerMock(); $installer2 ->expects($this->exactly(1)) ->method('supports') ->will($this->returnCallback(function ($arg) { return $arg === 'vendor'; })); $manager = new InstallationManager(); $manager->addInstaller($installer); $this->assertSame($installer, $manager->getInstaller('vendor')); $manager->addInstaller($installer2); $this->assertSame($installer2, $manager->getInstaller('vendor')); $manager->removeInstaller($installer2); $this->assertSame($installer, $manager->getInstaller('vendor')); } public function testExecute() { $manager = $this->getMockBuilder('Composer\Installer\InstallationManager') ->setMethods(array('install', 'update', 'uninstall')) ->getMock(); $installOperation = new InstallOperation($this->createPackageMock()); $removeOperation = new UninstallOperation($this->createPackageMock()); $updateOperation = new UpdateOperation( $this->createPackageMock(), $this->createPackageMock() ); $manager ->expects($this->once()) ->method('install') ->with($this->repository, $installOperation); $manager ->expects($this->once()) ->method('uninstall') ->with($this->repository, $removeOperation); $manager ->expects($this->once()) ->method('update') ->with($this->repository, $updateOperation); $manager->execute($this->repository, $installOperation); $manager->execute($this->repository, $removeOperation); $manager->execute($this->repository, $updateOperation); } public function testInstall() { $installer = $this->createInstallerMock(); $manager = new InstallationManager(); $manager->addInstaller($installer); $package = $this->createPackageMock(); $operation = new InstallOperation($package, 'test'); $package ->expects($this->once()) ->method('getType') ->will($this->returnValue('library')); $installer ->expects($this->once()) ->method('supports') ->with('library') ->will($this->returnValue(true)); $installer ->expects($this->once()) ->method('install') ->with($this->repository, $package); $manager->install($this->repository, $operation); } public function testUpdateWithEqualTypes() { $installer = $this->createInstallerMock(); $manager = new InstallationManager(); $manager->addInstaller($installer); $initial = $this->createPackageMock(); $target = $this->createPackageMock(); $operation = new UpdateOperation($initial, $target, 'test'); $initial ->expects($this->once()) ->method('getType') ->will($this->returnValue('library')); $target ->expects($this->once()) ->method('getType') ->will($this->returnValue('library')); $installer ->expects($this->once()) ->method('supports') ->with('library') ->will($this->returnValue(true)); $installer ->expects($this->once()) ->method('update') ->with($this->repository, $initial, $target); $manager->update($this->repository, $operation); } public function testUpdateWithNotEqualTypes() { $libInstaller = $this->createInstallerMock(); $bundleInstaller = $this->createInstallerMock(); $manager = new InstallationManager(); $manager->addInstaller($libInstaller); $manager->addInstaller($bundleInstaller); $initial = $this->createPackageMock(); $target = $this->createPackageMock(); $operation = new UpdateOperation($initial, $target, 'test'); $initial ->expects($this->once()) ->method('getType') ->will($this->returnValue('library')); $target ->expects($this->once()) ->method('getType') ->will($this->returnValue('bundles')); $bundleInstaller ->expects($this->exactly(2)) ->method('supports') ->will($this->returnCallback(function ($arg) { return $arg === 'bundles'; })); $libInstaller ->expects($this->once()) ->method('supports') ->with('library') ->will($this->returnValue(true)); $libInstaller ->expects($this->once()) ->method('uninstall') ->with($this->repository, $initial); $bundleInstaller ->expects($this->once()) ->method('install') ->with($this->repository, $target); $manager->update($this->repository, $operation); } public function testUninstall() { $installer = $this->createInstallerMock(); $manager = new InstallationManager(); $manager->addInstaller($installer); $package = $this->createPackageMock(); $operation = new UninstallOperation($package, 'test'); $package ->expects($this->once()) ->method('getType') ->will($this->returnValue('library')); $installer ->expects($this->once()) ->method('uninstall') ->with($this->repository, $package); $installer ->expects($this->once()) ->method('supports') ->with('library') ->will($this->returnValue(true)); $manager->uninstall($this->repository, $operation); } private function createInstallerMock() { return $this->getMockBuilder('Composer\Installer\InstallerInterface') ->getMock(); } private function createPackageMock() { return $this->getMockBuilder('Composer\Package\PackageInterface') ->getMock(); } } composer-1.0.0-beta2/tests/Composer/Test/Installer/InstallerEventTest.php000066400000000000000000000036471267577262200265010ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Installer; use Composer\Installer\InstallerEvent; class InstallerEventTest extends \PHPUnit_Framework_TestCase { public function testGetter() { $composer = $this->getMock('Composer\Composer'); $io = $this->getMock('Composer\IO\IOInterface'); $policy = $this->getMock('Composer\DependencyResolver\PolicyInterface'); $pool = $this->getMockBuilder('Composer\DependencyResolver\Pool')->disableOriginalConstructor()->getMock(); $installedRepo = $this->getMockBuilder('Composer\Repository\CompositeRepository')->disableOriginalConstructor()->getMock(); $request = $this->getMockBuilder('Composer\DependencyResolver\Request')->disableOriginalConstructor()->getMock(); $operations = array($this->getMock('Composer\DependencyResolver\Operation\OperationInterface')); $event = new InstallerEvent('EVENT_NAME', $composer, $io, true, $policy, $pool, $installedRepo, $request, $operations); $this->assertSame('EVENT_NAME', $event->getName()); $this->assertInstanceOf('Composer\Composer', $event->getComposer()); $this->assertInstanceOf('Composer\IO\IOInterface', $event->getIO()); $this->assertTrue($event->isDevMode()); $this->assertInstanceOf('Composer\DependencyResolver\PolicyInterface', $event->getPolicy()); $this->assertInstanceOf('Composer\DependencyResolver\Pool', $event->getPool()); $this->assertInstanceOf('Composer\Repository\CompositeRepository', $event->getInstalledRepo()); $this->assertInstanceOf('Composer\DependencyResolver\Request', $event->getRequest()); $this->assertCount(1, $event->getOperations()); } } composer-1.0.0-beta2/tests/Composer/Test/Installer/LibraryInstallerTest.php000066400000000000000000000200671267577262200270170ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Installer; use Composer\Installer\LibraryInstaller; use Composer\Util\Filesystem; use Composer\TestCase; use Composer\Composer; use Composer\Config; class LibraryInstallerTest extends TestCase { protected $composer; protected $config; protected $rootDir; protected $vendorDir; protected $binDir; protected $dm; protected $repository; protected $io; protected $fs; protected function setUp() { $this->fs = new Filesystem; $this->composer = new Composer(); $this->config = new Config(); $this->composer->setConfig($this->config); $this->rootDir = $this->getUniqueTmpDirectory(); $this->vendorDir = $this->rootDir.DIRECTORY_SEPARATOR.'vendor'; $this->ensureDirectoryExistsAndClear($this->vendorDir); $this->binDir = $this->rootDir.DIRECTORY_SEPARATOR.'bin'; $this->ensureDirectoryExistsAndClear($this->binDir); $this->config->merge(array( 'config' => array( 'vendor-dir' => $this->vendorDir, 'bin-dir' => $this->binDir, ), )); $this->dm = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->disableOriginalConstructor() ->getMock(); $this->composer->setDownloadManager($this->dm); $this->repository = $this->getMock('Composer\Repository\InstalledRepositoryInterface'); $this->io = $this->getMock('Composer\IO\IOInterface'); } protected function tearDown() { $this->fs->removeDirectory($this->rootDir); } public function testInstallerCreationShouldNotCreateVendorDirectory() { $this->fs->removeDirectory($this->vendorDir); new LibraryInstaller($this->io, $this->composer); $this->assertFileNotExists($this->vendorDir); } public function testInstallerCreationShouldNotCreateBinDirectory() { $this->fs->removeDirectory($this->binDir); new LibraryInstaller($this->io, $this->composer); $this->assertFileNotExists($this->binDir); } public function testIsInstalled() { $library = new LibraryInstaller($this->io, $this->composer); $package = $this->createPackageMock(); $this->repository ->expects($this->exactly(2)) ->method('hasPackage') ->with($package) ->will($this->onConsecutiveCalls(true, false)); $this->assertTrue($library->isInstalled($this->repository, $package)); $this->assertFalse($library->isInstalled($this->repository, $package)); } /** * @depends testInstallerCreationShouldNotCreateVendorDirectory * @depends testInstallerCreationShouldNotCreateBinDirectory */ public function testInstall() { $library = new LibraryInstaller($this->io, $this->composer); $package = $this->createPackageMock(); $package ->expects($this->any()) ->method('getPrettyName') ->will($this->returnValue('some/package')); $this->dm ->expects($this->once()) ->method('download') ->with($package, $this->vendorDir.'/some/package'); $this->repository ->expects($this->once()) ->method('addPackage') ->with($package); $library->install($this->repository, $package); $this->assertFileExists($this->vendorDir, 'Vendor dir should be created'); $this->assertFileExists($this->binDir, 'Bin dir should be created'); } /** * @depends testInstallerCreationShouldNotCreateVendorDirectory * @depends testInstallerCreationShouldNotCreateBinDirectory */ public function testUpdate() { $filesystem = $this->getMockBuilder('Composer\Util\Filesystem') ->getMock(); $filesystem ->expects($this->once()) ->method('rename') ->with($this->vendorDir.'/package1/oldtarget', $this->vendorDir.'/package1/newtarget'); $initial = $this->createPackageMock(); $target = $this->createPackageMock(); $initial ->expects($this->any()) ->method('getPrettyName') ->will($this->returnValue('package1')); $initial ->expects($this->any()) ->method('getTargetDir') ->will($this->returnValue('oldtarget')); $target ->expects($this->any()) ->method('getPrettyName') ->will($this->returnValue('package1')); $target ->expects($this->any()) ->method('getTargetDir') ->will($this->returnValue('newtarget')); $this->repository ->expects($this->exactly(3)) ->method('hasPackage') ->will($this->onConsecutiveCalls(true, false, false)); $this->dm ->expects($this->once()) ->method('update') ->with($initial, $target, $this->vendorDir.'/package1/newtarget'); $this->repository ->expects($this->once()) ->method('removePackage') ->with($initial); $this->repository ->expects($this->once()) ->method('addPackage') ->with($target); $library = new LibraryInstaller($this->io, $this->composer, 'library', $filesystem); $library->update($this->repository, $initial, $target); $this->assertFileExists($this->vendorDir, 'Vendor dir should be created'); $this->assertFileExists($this->binDir, 'Bin dir should be created'); $this->setExpectedException('InvalidArgumentException'); $library->update($this->repository, $initial, $target); } public function testUninstall() { $library = new LibraryInstaller($this->io, $this->composer); $package = $this->createPackageMock(); $package ->expects($this->any()) ->method('getPrettyName') ->will($this->returnValue('pkg')); $this->repository ->expects($this->exactly(2)) ->method('hasPackage') ->with($package) ->will($this->onConsecutiveCalls(true, false)); $this->dm ->expects($this->once()) ->method('remove') ->with($package, $this->vendorDir.'/pkg'); $this->repository ->expects($this->once()) ->method('removePackage') ->with($package); $library->uninstall($this->repository, $package); $this->setExpectedException('InvalidArgumentException'); $library->uninstall($this->repository, $package); } public function testGetInstallPath() { $library = new LibraryInstaller($this->io, $this->composer); $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getTargetDir') ->will($this->returnValue(null)); $this->assertEquals($this->vendorDir.'/'.$package->getName(), $library->getInstallPath($package)); } public function testGetInstallPathWithTargetDir() { $library = new LibraryInstaller($this->io, $this->composer); $package = $this->createPackageMock(); $package ->expects($this->once()) ->method('getTargetDir') ->will($this->returnValue('Some/Namespace')); $package ->expects($this->any()) ->method('getPrettyName') ->will($this->returnValue('foo/bar')); $this->assertEquals($this->vendorDir.'/'.$package->getPrettyName().'/Some/Namespace', $library->getInstallPath($package)); } protected function createPackageMock() { return $this->getMockBuilder('Composer\Package\Package') ->setConstructorArgs(array(md5(mt_rand()), '1.0.0.0', '1.0.0')) ->getMock(); } } composer-1.0.0-beta2/tests/Composer/Test/Installer/MetapackageInstallerTest.php000066400000000000000000000051701267577262200276130ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Installer; use Composer\Installer\MetapackageInstaller; class MetapackageInstallerTest extends \PHPUnit_Framework_TestCase { private $repository; private $installer; private $io; protected function setUp() { $this->repository = $this->getMock('Composer\Repository\InstalledRepositoryInterface'); $this->io = $this->getMock('Composer\IO\IOInterface'); $this->installer = new MetapackageInstaller(); } public function testInstall() { $package = $this->createPackageMock(); $this->repository ->expects($this->once()) ->method('addPackage') ->with($package); $this->installer->install($this->repository, $package); } public function testUpdate() { $initial = $this->createPackageMock(); $target = $this->createPackageMock(); $this->repository ->expects($this->exactly(2)) ->method('hasPackage') ->with($initial) ->will($this->onConsecutiveCalls(true, false)); $this->repository ->expects($this->once()) ->method('removePackage') ->with($initial); $this->repository ->expects($this->once()) ->method('addPackage') ->with($target); $this->installer->update($this->repository, $initial, $target); $this->setExpectedException('InvalidArgumentException'); $this->installer->update($this->repository, $initial, $target); } public function testUninstall() { $package = $this->createPackageMock(); $this->repository ->expects($this->exactly(2)) ->method('hasPackage') ->with($package) ->will($this->onConsecutiveCalls(true, false)); $this->repository ->expects($this->once()) ->method('removePackage') ->with($package); $this->installer->uninstall($this->repository, $package); $this->setExpectedException('InvalidArgumentException'); $this->installer->uninstall($this->repository, $package); } private function createPackageMock() { return $this->getMockBuilder('Composer\Package\Package') ->setConstructorArgs(array(md5(mt_rand()), '1.0.0.0', '1.0.0')) ->getMock(); } } composer-1.0.0-beta2/tests/Composer/Test/Installer/SuggestedPackagesReporterTest.php000066400000000000000000000151671267577262200306560ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Installer; use Composer\Installer\SuggestedPackagesReporter; /** * @coversDefaultClass Composer\Installer\SuggestedPackagesReporter */ class SuggestedPackagesReporterTest extends \PHPUnit_Framework_TestCase { private $io; private $suggestedPackagesReporter; protected function setUp() { $this->io = $this->getMock('Composer\IO\IOInterface'); $this->suggestedPackagesReporter = new SuggestedPackagesReporter($this->io); } /** * @covers ::__construct */ public function testContrsuctor() { $this->io->expects($this->once()) ->method('writeError'); $suggestedPackagesReporter = new SuggestedPackagesReporter($this->io); $suggestedPackagesReporter->addPackage('a', 'b', 'c'); $suggestedPackagesReporter->output(); } /** * @covers ::getPackages */ public function testGetPackagesEmptyByDefault() { $this->assertSame( array(), $this->suggestedPackagesReporter->getPackages() ); } /** * @covers ::getPackages * @covers ::addPackage */ public function testGetPackages() { $suggestedPackage = $this->getSuggestedPackageArray(); $this->suggestedPackagesReporter->addPackage( $suggestedPackage['source'], $suggestedPackage['target'], $suggestedPackage['reason'] ); $this->assertSame( array($suggestedPackage), $this->suggestedPackagesReporter->getPackages() ); } /** * Test addPackage appends packages. * Also test targets can be duplicated. * * @covers ::addPackage */ public function testAddPackageAppends() { $suggestedPackageA = $this->getSuggestedPackageArray(); $suggestedPackageB = $this->getSuggestedPackageArray(); $suggestedPackageB['source'] = 'different source'; $suggestedPackageB['reason'] = 'different reason'; $this->suggestedPackagesReporter->addPackage( $suggestedPackageA['source'], $suggestedPackageA['target'], $suggestedPackageA['reason'] ); $this->suggestedPackagesReporter->addPackage( $suggestedPackageB['source'], $suggestedPackageB['target'], $suggestedPackageB['reason'] ); $this->assertSame( array($suggestedPackageA, $suggestedPackageB), $this->suggestedPackagesReporter->getPackages() ); } /** * @covers ::addSuggestionsFromPackage */ public function testAddSuggestionsFromPackage() { $package = $this->createPackageMock(); $package->expects($this->once()) ->method('getSuggests') ->will($this->returnValue(array( 'target-a' => 'reason-a', 'target-b' => 'reason-b', ))); $package->expects($this->once()) ->method('getPrettyName') ->will($this->returnValue('package-pretty-name')); $this->suggestedPackagesReporter->addSuggestionsFromPackage($package); $this->assertSame(array( array( 'source' => 'package-pretty-name', 'target' => 'target-a', 'reason' => 'reason-a', ), array( 'source' => 'package-pretty-name', 'target' => 'target-b', 'reason' => 'reason-b', ), ), $this->suggestedPackagesReporter->getPackages()); } /** * @covers ::output */ public function testOutput() { $this->suggestedPackagesReporter->addPackage('a', 'b', 'c'); $this->io->expects($this->once()) ->method('writeError') ->with('a suggests installing b (c)'); $this->suggestedPackagesReporter->output(); } /** * @covers ::output */ public function testOutputMultiplePackages() { $this->suggestedPackagesReporter->addPackage('a', 'b', 'c'); $this->suggestedPackagesReporter->addPackage('source package', 'target', 'because reasons'); $this->io->expects($this->at(0)) ->method('writeError') ->with('a suggests installing b (c)'); $this->io->expects($this->at(1)) ->method('writeError') ->with('source package suggests installing target (because reasons)'); $this->suggestedPackagesReporter->output(); } /** * @covers ::output */ public function testOutputSkipInstalledPackages() { $repository = $this->getMock('Composer\Repository\RepositoryInterface'); $package1 = $this->getMock('Composer\Package\PackageInterface'); $package2 = $this->getMock('Composer\Package\PackageInterface'); $package1->expects($this->once()) ->method('getNames') ->will($this->returnValue(array('x', 'y'))); $package2->expects($this->once()) ->method('getNames') ->will($this->returnValue(array('b'))); $repository->expects($this->once()) ->method('getPackages') ->will($this->returnValue(array( $package1, $package2, ))); $this->suggestedPackagesReporter->addPackage('a', 'b', 'c'); $this->suggestedPackagesReporter->addPackage('source package', 'target', 'because reasons'); $this->io->expects($this->once()) ->method('writeError') ->with('source package suggests installing target (because reasons)'); $this->suggestedPackagesReporter->output($repository); } /** * @covers ::output */ public function testOutputNotGettingInstalledPackagesWhenNoSuggestions() { $repository = $this->getMock('Composer\Repository\RepositoryInterface'); $repository->expects($this->exactly(0)) ->method('getPackages'); $this->suggestedPackagesReporter->output($repository); } private function getSuggestedPackageArray() { return array( 'source' => 'a', 'target' => 'b', 'reason' => 'c', ); } private function createPackageMock() { return $this->getMockBuilder('Composer\Package\Package') ->setConstructorArgs(array(md5(mt_rand()), '1.0.0.0', '1.0.0')) ->getMock(); } } composer-1.0.0-beta2/tests/Composer/Test/InstallerTest.php000066400000000000000000000352161267577262200235370ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test; use Composer\Installer; use Composer\Console\Application; use Composer\Json\JsonFile; use Composer\Repository\ArrayRepository; use Composer\Repository\RepositoryManager; use Composer\Repository\InstalledArrayRepository; use Composer\Package\RootPackageInterface; use Composer\Package\Link; use Composer\Package\Locker; use Composer\Test\Mock\FactoryMock; use Composer\Test\Mock\InstalledFilesystemRepositoryMock; use Composer\Test\Mock\InstallationManagerMock; use Symfony\Component\Console\Input\StringInput; use Symfony\Component\Console\Output\StreamOutput; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Formatter\OutputFormatter; use Composer\TestCase; use Composer\IO\BufferIO; class InstallerTest extends TestCase { protected $prevCwd; public function setUp() { $this->prevCwd = getcwd(); chdir(__DIR__); } public function tearDown() { chdir($this->prevCwd); } /** * @dataProvider provideInstaller */ public function testInstaller(RootPackageInterface $rootPackage, $repositories, array $options) { $io = $this->getMock('Composer\IO\IOInterface'); $downloadManager = $this->getMock('Composer\Downloader\DownloadManager', array(), array($io)); $config = $this->getMock('Composer\Config'); $repositoryManager = new RepositoryManager($io, $config); $repositoryManager->setLocalRepository(new InstalledArrayRepository()); if (!is_array($repositories)) { $repositories = array($repositories); } foreach ($repositories as $repository) { $repositoryManager->addRepository($repository); } $locker = $this->getMockBuilder('Composer\Package\Locker')->disableOriginalConstructor()->getMock(); $installationManager = new InstallationManagerMock(); $eventDispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher')->disableOriginalConstructor()->getMock(); $autoloadGenerator = $this->getMockBuilder('Composer\Autoload\AutoloadGenerator')->disableOriginalConstructor()->getMock(); $installer = new Installer($io, $config, clone $rootPackage, $downloadManager, $repositoryManager, $locker, $installationManager, $eventDispatcher, $autoloadGenerator); $result = $installer->run(); $this->assertSame(0, $result); $expectedInstalled = isset($options['install']) ? $options['install'] : array(); $expectedUpdated = isset($options['update']) ? $options['update'] : array(); $expectedUninstalled = isset($options['uninstall']) ? $options['uninstall'] : array(); $installed = $installationManager->getInstalledPackages(); $this->assertSame($expectedInstalled, $installed); $updated = $installationManager->getUpdatedPackages(); $this->assertSame($expectedUpdated, $updated); $uninstalled = $installationManager->getUninstalledPackages(); $this->assertSame($expectedUninstalled, $uninstalled); } public function provideInstaller() { $cases = array(); // when A requires B and B requires A, and A is a non-published root package // the install of B should succeed $a = $this->getPackage('A', '1.0.0', 'Composer\Package\RootPackage'); $a->setRequires(array( new Link('A', 'B', $this->getVersionConstraint('=', '1.0.0')), )); $b = $this->getPackage('B', '1.0.0'); $b->setRequires(array( new Link('B', 'A', $this->getVersionConstraint('=', '1.0.0')), )); $cases[] = array( $a, new ArrayRepository(array($b)), array( 'install' => array($b), ), ); // #480: when A requires B and B requires A, and A is a published root package // only B should be installed, as A is the root $a = $this->getPackage('A', '1.0.0', 'Composer\Package\RootPackage'); $a->setRequires(array( new Link('A', 'B', $this->getVersionConstraint('=', '1.0.0')), )); $b = $this->getPackage('B', '1.0.0'); $b->setRequires(array( new Link('B', 'A', $this->getVersionConstraint('=', '1.0.0')), )); $cases[] = array( $a, new ArrayRepository(array($a, $b)), array( 'install' => array($b), ), ); return $cases; } /** * @dataProvider getIntegrationTests */ public function testIntegration($file, $message, $condition, $composerConfig, $lock, $installed, $run, $expectLock, $expectOutput, $expect, $expectResult) { if ($condition) { eval('$res = '.$condition.';'); if (!$res) { $this->markTestSkipped($condition); } } $io = new BufferIO('', OutputInterface::VERBOSITY_NORMAL, new OutputFormatter(false)); // Prepare for exceptions if (!is_int($expectResult)) { $normalizedOutput = rtrim(str_replace("\n", PHP_EOL, $expect)); $this->setExpectedException($expectResult, $normalizedOutput); } // Create Composer mock object according to configuration $composer = FactoryMock::create($io, $composerConfig); $jsonMock = $this->getMockBuilder('Composer\Json\JsonFile')->disableOriginalConstructor()->getMock(); $jsonMock->expects($this->any()) ->method('read') ->will($this->returnValue($installed)); $jsonMock->expects($this->any()) ->method('exists') ->will($this->returnValue(true)); $repositoryManager = $composer->getRepositoryManager(); $repositoryManager->setLocalRepository(new InstalledFilesystemRepositoryMock($jsonMock)); $lockJsonMock = $this->getMockBuilder('Composer\Json\JsonFile')->disableOriginalConstructor()->getMock(); $lockJsonMock->expects($this->any()) ->method('read') ->will($this->returnValue($lock)); $lockJsonMock->expects($this->any()) ->method('exists') ->will($this->returnValue(true)); if ($expectLock) { $actualLock = array(); $lockJsonMock->expects($this->atLeastOnce()) ->method('write') ->will($this->returnCallback(function ($hash, $options) use (&$actualLock) { // need to do assertion outside of mock for nice phpunit output // so store value temporarily in reference for later assetion $actualLock = $hash; })); } $contents = json_encode($composerConfig); $locker = new Locker($io, $lockJsonMock, $repositoryManager, $composer->getInstallationManager(), $contents); $composer->setLocker($locker); $eventDispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher')->disableOriginalConstructor()->getMock(); $autoloadGenerator = $this->getMock('Composer\Autoload\AutoloadGenerator', array(), array($eventDispatcher)); $composer->setAutoloadGenerator($autoloadGenerator); $composer->setEventDispatcher($eventDispatcher); $installer = Installer::create($io, $composer); $application = new Application; $application->get('install')->setCode(function ($input, $output) use ($installer) { $installer ->setDevMode(!$input->getOption('no-dev')) ->setDryRun($input->getOption('dry-run')) ->setIgnorePlatformRequirements($input->getOption('ignore-platform-reqs')); return $installer->run(); }); $application->get('update')->setCode(function ($input, $output) use ($installer) { $installer ->setDevMode(!$input->getOption('no-dev')) ->setUpdate(true) ->setDryRun($input->getOption('dry-run')) ->setUpdateWhitelist($input->getArgument('packages')) ->setWhitelistDependencies($input->getOption('with-dependencies')) ->setPreferStable($input->getOption('prefer-stable')) ->setPreferLowest($input->getOption('prefer-lowest')) ->setIgnorePlatformRequirements($input->getOption('ignore-platform-reqs')); return $installer->run(); }); if (!preg_match('{^(install|update)\b}', $run)) { throw new \UnexpectedValueException('The run command only supports install and update'); } $application->setAutoExit(false); $appOutput = fopen('php://memory', 'w+'); $result = $application->run(new StringInput($run), new StreamOutput($appOutput)); fseek($appOutput, 0); // Shouldn't check output and results if an exception was expected by this point if (!is_int($expectResult)) { return; } $output = str_replace("\r", '', $io->getOutput()); $this->assertEquals($expectResult, $result, $output . stream_get_contents($appOutput)); if ($expectLock) { unset($actualLock['hash']); unset($actualLock['content-hash']); unset($actualLock['_readme']); $this->assertEquals($expectLock, $actualLock); } $installationManager = $composer->getInstallationManager(); $this->assertSame(rtrim($expect), implode("\n", $installationManager->getTrace())); if ($expectOutput) { $this->assertStringMatchesFormat(rtrim($expectOutput), rtrim($output)); } } public function getIntegrationTests() { $fixturesDir = realpath(__DIR__.'/Fixtures/installer/'); $tests = array(); foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($fixturesDir), \RecursiveIteratorIterator::LEAVES_ONLY) as $file) { if (!preg_match('/\.test$/', $file)) { continue; } $testData = $this->readTestFile($file, $fixturesDir); $installed = array(); $installedDev = array(); $lock = array(); $expectLock = array(); $expectResult = 0; try { $message = $testData['TEST']; $condition = !empty($testData['CONDITION']) ? $testData['CONDITION'] : null; $composer = JsonFile::parseJson($testData['COMPOSER']); if (isset($composer['repositories'])) { foreach ($composer['repositories'] as &$repo) { if ($repo['type'] !== 'composer') { continue; } // Change paths like file://foobar to file:///path/to/fixtures if (preg_match('{^file://[^/]}', $repo['url'])) { $repo['url'] = 'file://' . strtr($fixturesDir, '\\', '/') . '/' . substr($repo['url'], 7); } unset($repo); } } if (!empty($testData['LOCK'])) { $lock = JsonFile::parseJson($testData['LOCK']); if (!isset($lock['hash'])) { $lock['hash'] = md5(json_encode($composer)); } } if (!empty($testData['INSTALLED'])) { $installed = JsonFile::parseJson($testData['INSTALLED']); } $run = $testData['RUN']; if (!empty($testData['EXPECT-LOCK'])) { $expectLock = JsonFile::parseJson($testData['EXPECT-LOCK']); } $expectOutput = isset($testData['EXPECT-OUTPUT']) ? $testData['EXPECT-OUTPUT'] : null; $expect = $testData['EXPECT']; if (!empty($testData['EXPECT-EXCEPTION'])) { $expectResult = $testData['EXPECT-EXCEPTION']; if (!empty($testData['EXPECT-EXIT-CODE'])) { throw new \LogicException('EXPECT-EXCEPTION and EXPECT-EXIT-CODE are mutually exclusive'); } } elseif (!empty($testData['EXPECT-EXIT-CODE'])) { $expectResult = (int) $testData['EXPECT-EXIT-CODE']; } else { $expectResult = 0; } } catch (\Exception $e) { die(sprintf('Test "%s" is not valid: '.$e->getMessage(), str_replace($fixturesDir.'/', '', $file))); } $tests[basename($file)] = array(str_replace($fixturesDir.'/', '', $file), $message, $condition, $composer, $lock, $installed, $run, $expectLock, $expectOutput, $expect, $expectResult); } return $tests; } protected function readTestFile(\SplFileInfo $file, $fixturesDir) { $tokens = preg_split('#(?:^|\n*)--([A-Z-]+)--\n#', file_get_contents($file->getRealPath()), null, PREG_SPLIT_DELIM_CAPTURE); $sectionInfo = array( 'TEST' => true, 'CONDITION' => false, 'COMPOSER' => true, 'LOCK' => false, 'INSTALLED' => false, 'RUN' => true, 'EXPECT-LOCK' => false, 'EXPECT-OUTPUT' => false, 'EXPECT-EXIT-CODE' => false, 'EXPECT-EXCEPTION' => false, 'EXPECT' => true, ); $section = null; foreach ($tokens as $i => $token) { if (null === $section && empty($token)) { continue; // skip leading blank } if (null === $section) { if (!isset($sectionInfo[$token])) { throw new \RuntimeException(sprintf( 'The test file "%s" must not contain a section named "%s".', str_replace($fixturesDir.'/', '', $file), $token )); } $section = $token; continue; } $sectionData = $token; $data[$section] = $sectionData; $section = $sectionData = null; } foreach ($sectionInfo as $section => $required) { if ($required && !isset($data[$section])) { throw new \RuntimeException(sprintf( 'The test file "%s" must have a section named "%s".', str_replace($fixturesDir.'/', '', $file), $section )); } } return $data; } } composer-1.0.0-beta2/tests/Composer/Test/Json/000077500000000000000000000000001267577262200211335ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Json/ComposerSchemaTest.php000066400000000000000000000075531267577262200254260ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Json; use JsonSchema\Validator; /** * @author Rob Bast */ class ComposerSchemaTest extends \PHPUnit_Framework_TestCase { public function testRequiredProperties() { $json = '{ }'; $this->assertEquals(array( array('property' => 'name', 'message' => 'The property name is required', 'constraint' => 'required'), array('property' => 'description', 'message' => 'The property description is required', 'constraint' => 'required'), ), $this->check($json)); $json = '{ "name": "vendor/package" }'; $this->assertEquals(array( array('property' => 'description', 'message' => 'The property description is required', 'constraint' => 'required'), ), $this->check($json)); $json = '{ "description": "generic description" }'; $this->assertEquals(array( array('property' => 'name', 'message' => 'The property name is required', 'constraint' => 'required'), ), $this->check($json)); } public function testOptionalAbandonedProperty() { $json = '{"name": "name", "description": "description", "abandoned": true}'; $this->assertTrue($this->check($json)); } public function testMinimumStabilityValues() { $json = '{ "name": "vendor/package", "description": "generic description", "minimum-stability": "" }'; $this->assertEquals(array( array( 'property' => 'minimum-stability', 'message' => 'Does not match the regex pattern ^dev|alpha|beta|rc|RC|stable$', 'constraint' => 'pattern', 'pattern' => '^dev|alpha|beta|rc|RC|stable$', ), ), $this->check($json), 'empty string'); $json = '{ "name": "vendor/package", "description": "generic description", "minimum-stability": "dummy" }'; $this->assertEquals(array( array( 'property' => 'minimum-stability', 'message' => 'Does not match the regex pattern ^dev|alpha|beta|rc|RC|stable$', 'constraint' => 'pattern', 'pattern' => '^dev|alpha|beta|rc|RC|stable$', ), ), $this->check($json), 'dummy'); $json = '{ "name": "vendor/package", "description": "generic description", "minimum-stability": "dev" }'; $this->assertTrue($this->check($json), 'dev'); $json = '{ "name": "vendor/package", "description": "generic description", "minimum-stability": "alpha" }'; $this->assertTrue($this->check($json), 'alpha'); $json = '{ "name": "vendor/package", "description": "generic description", "minimum-stability": "beta" }'; $this->assertTrue($this->check($json), 'beta'); $json = '{ "name": "vendor/package", "description": "generic description", "minimum-stability": "rc" }'; $this->assertTrue($this->check($json), 'rc lowercase'); $json = '{ "name": "vendor/package", "description": "generic description", "minimum-stability": "RC" }'; $this->assertTrue($this->check($json), 'rc uppercase'); $json = '{ "name": "vendor/package", "description": "generic description", "minimum-stability": "stable" }'; $this->assertTrue($this->check($json), 'stable'); } private function check($json) { $schema = json_decode(file_get_contents(__DIR__ . '/../../../../res/composer-schema.json')); $validator = new Validator(); $validator->check(json_decode($json), $schema); if (!$validator->isValid()) { return $validator->getErrors(); } return true; } } composer-1.0.0-beta2/tests/Composer/Test/Json/Fixtures/000077500000000000000000000000001267577262200227445ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Json/Fixtures/composer.json000066400000000000000000000032031267577262200254640ustar00rootroot00000000000000{ "name": "composer/schema-test", "description": "Dummy file to test the schema verification", "keywords": ["package", "dependency", "autoload"], "homepage": "https://getcomposer.org/", "type": "library", "license": "MIT", "authors": [ { "name": "Nils Adermann", "email": "naderman@naderman.de", "homepage": "http://www.naderman.de" }, { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", "homepage": "http://seld.be" } ], "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/composer/issues" }, "require": { "php": ">=5.3.2", "justinrainbow/json-schema": "~1.4", "seld/jsonlint": "~1.0", "symfony/console": "~2.5", "symfony/finder": "~2.2", "symfony/process": "~2.1" }, "require-dev": { "phpunit/phpunit": "~4.5" }, "config": { "platform": { "php": "5.3.3" } }, "suggest": { "ext-zip": "Enabling the zip extension allows you to unzip archives, and allows gzip compression of all internet traffic", "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages" }, "autoload": { "psr-0": { "Composer": "src/" } }, "autoload-dev": { "psr-0": { "Composer\\Test": "tests/" } }, "bin": ["bin/composer"], "extra": { "branch-alias": { "dev-master": "1.0-dev" } }, "scripts": { "test": "phpunit" } } composer-1.0.0-beta2/tests/Composer/Test/Json/JsonFileTest.php000066400000000000000000000136101267577262200242160ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Json; use Seld\JsonLint\ParsingException; use Composer\Json\JsonFile; class JsonFileTest extends \PHPUnit_Framework_TestCase { public function testParseErrorDetectExtraComma() { $json = '{ "foo": "bar", }'; $this->expectParseException('Parse error on line 2', $json); } public function testParseErrorDetectExtraCommaInArray() { $json = '{ "foo": [ "bar", ] }'; $this->expectParseException('Parse error on line 3', $json); } public function testParseErrorDetectUnescapedBackslash() { $json = '{ "fo\o": "bar" }'; $this->expectParseException('Parse error on line 1', $json); } public function testParseErrorSkipsEscapedBackslash() { $json = '{ "fo\\\\o": "bar" "a": "b" }'; $this->expectParseException('Parse error on line 2', $json); } public function testParseErrorDetectSingleQuotes() { if (defined('JSON_PARSER_NOTSTRICT') && version_compare(phpversion('json'), '1.3.9', '<')) { $this->markTestSkipped('jsonc issue, see https://github.com/remicollet/pecl-json-c/issues/23'); } $json = '{ \'foo\': "bar" }'; $this->expectParseException('Parse error on line 1', $json); } public function testParseErrorDetectMissingQuotes() { $json = '{ foo: "bar" }'; $this->expectParseException('Parse error on line 1', $json); } public function testParseErrorDetectArrayAsHash() { $json = '{ "foo": ["bar": "baz"] }'; $this->expectParseException('Parse error on line 2', $json); } public function testParseErrorDetectMissingComma() { $json = '{ "foo": "bar" "bar": "foo" }'; $this->expectParseException('Parse error on line 2', $json); } public function testSchemaValidation() { $json = new JsonFile(__DIR__.'/Fixtures/composer.json'); $this->assertTrue($json->validateSchema()); } public function testParseErrorDetectMissingCommaMultiline() { $json = '{ "foo": "barbar" "bar": "foo" }'; $this->expectParseException('Parse error on line 2', $json); } public function testParseErrorDetectMissingColon() { $json = '{ "foo": "bar", "bar" "foo" }'; $this->expectParseException('Parse error on line 3', $json); } public function testSimpleJsonString() { $data = array('name' => 'composer/composer'); $json = '{ "name": "composer/composer" }'; $this->assertJsonFormat($json, $data); } public function testTrailingBackslash() { $data = array('Metadata\\' => 'src/'); $json = '{ "Metadata\\\\": "src/" }'; $this->assertJsonFormat($json, $data); } public function testFormatEmptyArray() { $data = array('test' => array(), 'test2' => new \stdClass); $json = '{ "test": [], "test2": {} }'; $this->assertJsonFormat($json, $data); } public function testEscape() { $data = array("Metadata\\\"" => 'src/'); $json = '{ "Metadata\\\\\\"": "src/" }'; $this->assertJsonFormat($json, $data); } public function testUnicode() { if (!function_exists('mb_convert_encoding') && PHP_VERSION_ID < 50400) { $this->markTestSkipped('Test requires the mbstring extension'); } $data = array("ŽluÅ¥ouÄký \" kůň" => "úpÄ›l Äábelské ódy za €"); $json = '{ "ŽluÅ¥ouÄký \" kůň": "úpÄ›l Äábelské ódy za €" }'; $this->assertJsonFormat($json, $data); } public function testOnlyUnicode() { if (!function_exists('mb_convert_encoding') && PHP_VERSION_ID < 50400) { $this->markTestSkipped('Test requires the mbstring extension'); } $data = "\\/ÆŒ"; $this->assertJsonFormat('"\\\\\\/ÆŒ"', $data, JsonFile::JSON_UNESCAPED_UNICODE); } public function testEscapedSlashes() { $data = "\\/foo"; $this->assertJsonFormat('"\\\\\\/foo"', $data, 0); } public function testEscapedBackslashes() { $data = "a\\b"; $this->assertJsonFormat('"a\\\\b"', $data, 0); } public function testEscapedUnicode() { $data = "ÆŒ"; $this->assertJsonFormat('"\\u018c"', $data, 0); } public function testDoubleEscapedUnicode() { $jsonFile = new JsonFile('composer.json'); $data = array("ZdjÄ™cia","hjkjhl\\u0119kkjk"); $encodedData = $jsonFile->encode($data); $doubleEncodedData = $jsonFile->encode(array('t' => $encodedData)); $decodedData = json_decode($doubleEncodedData, true); $doubleData = json_decode($decodedData['t'], true); $this->assertEquals($data, $doubleData); } private function expectParseException($text, $json) { try { $result = JsonFile::parseJson($json); $this->fail(sprintf("Parsing should have failed but didn't.\nExpected:\n\"%s\"\nFor:\n\"%s\"\nGot:\n\"%s\"", $text, $json, var_export($result, true))); } catch (ParsingException $e) { $this->assertContains($text, $e->getMessage()); } } private function assertJsonFormat($json, $data, $options = null) { $file = new JsonFile('composer.json'); $json = str_replace("\r", '', $json); if (null === $options) { $this->assertEquals($json, $file->encode($data)); } else { $this->assertEquals($json, $file->encode($data, $options)); } } } composer-1.0.0-beta2/tests/Composer/Test/Json/JsonFormatterTest.php000066400000000000000000000024301267577262200253000ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Json; use Composer\Json\JsonFormatter; class JsonFormatterTest extends \PHPUnit_Framework_TestCase { /** * Test if \u0119 (196+153) will get correctly formatted * See ticket #2613 */ public function testUnicodeWithPrependedSlash() { if (!extension_loaded('mbstring')) { $this->markTestSkipped('Test requires the mbstring extension'); } $data = '"' . chr(92) . chr(92) . chr(92) . 'u0119"'; $encodedData = JsonFormatter::format($data, true, true); $expected = '34+92+92+196+153+34'; $this->assertEquals($expected, $this->getCharacterCodes($encodedData)); } /** * Convert string to character codes split by a plus sign * @param string $string * @return string */ protected function getCharacterCodes($string) { $codes = array(); for ($i = 0; $i < strlen($string); $i++) { $codes[] = ord($string[$i]); } return implode('+', $codes); } } composer-1.0.0-beta2/tests/Composer/Test/Json/JsonManipulatorTest.php000066400000000000000000001606071267577262200256430ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Json; use Composer\Json\JsonManipulator; class JsonManipulatorTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider linkProvider */ public function testAddLink($json, $type, $package, $constraint, $expected) { $manipulator = new JsonManipulator($json); $this->assertTrue($manipulator->addLink($type, $package, $constraint)); $this->assertEquals($expected, $manipulator->getContents()); } public function linkProvider() { return array( array( '{}', 'require', 'vendor/baz', 'qux', "{\n". " \"require\": {\n". " \"vendor/baz\": \"qux\"\n". " }\n". "}\n", ), array( '{ "foo": "bar" }', 'require', 'vendor/baz', 'qux', '{ "foo": "bar", "require": { "vendor/baz": "qux" } } ', ), array( '{ "require": { } }', 'require', 'vendor/baz', 'qux', '{ "require": { "vendor/baz": "qux" } } ', ), array( '{ "empty": "", "require": { "foo": "bar" } }', 'require', 'vendor/baz', 'qux', '{ "empty": "", "require": { "foo": "bar", "vendor/baz": "qux" } } ', ), array( '{ "require": { "foo": "bar", "vendor/baz": "baz" } }', 'require', 'vendor/baz', 'qux', '{ "require": { "foo": "bar", "vendor/baz": "qux" } } ', ), array( '{ "require": { "foo": "bar", "vendor\/baz": "baz" } }', 'require', 'vendor/baz', 'qux', '{ "require": { "foo": "bar", "vendor/baz": "qux" } } ', ), array( '{ "require": { "foo": "bar" }, "repositories": [{ "type": "package", "package": { "require": { "foo": "bar" } } }] }', 'require', 'foo', 'qux', '{ "require": { "foo": "qux" }, "repositories": [{ "type": "package", "package": { "require": { "foo": "bar" } } }] } ', ), array( '{ "repositories": [{ "type": "package", "package": { "require": { "foo": "bar" } } }] }', 'require', 'foo', 'qux', '{ "repositories": [{ "type": "package", "package": { "require": { "foo": "bar" } } }], "require": { "foo": "qux" } } ', ), array( '{ "require": { "php": "5.*" } }', 'require-dev', 'foo', 'qux', '{ "require": { "php": "5.*" }, "require-dev": { "foo": "qux" } } ', ), array( '{ "require": { "php": "5.*" }, "require-dev": { "foo": "bar" } }', 'require-dev', 'foo', 'qux', '{ "require": { "php": "5.*" }, "require-dev": { "foo": "qux" } } ', ), array( '{ "repositories": [{ "type": "package", "package": { "bar": "ba[z", "dist": { "url": "http...", "type": "zip" }, "autoload": { "classmap": [ "foo/bar" ] } } }], "require": { "php": "5.*" }, "require-dev": { "foo": "bar" } }', 'require-dev', 'foo', 'qux', '{ "repositories": [{ "type": "package", "package": { "bar": "ba[z", "dist": { "url": "http...", "type": "zip" }, "autoload": { "classmap": [ "foo/bar" ] } } }], "require": { "php": "5.*" }, "require-dev": { "foo": "qux" } } ', ), array( '{ "config": { "cache-files-ttl": 0, "discard-changes": true }, "minimum-stability": "stable", "prefer-stable": false, "provide": { "heroku-sys/cedar": "14.2016.03.22" }, "repositories": [ { "packagist": false }, { "type": "package", "package": [ { "type": "metapackage", "name": "anthonymartin/geo-location", "version": "v1.0.0", "require": { "heroku-sys/php": ">=5.3.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "aws/aws-sdk-php", "version": "3.9.4", "require": { "heroku-sys/php": ">=5.5" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "cloudinary/cloudinary_php", "version": "dev-master", "require": { "heroku-sys/ext-curl": "*", "heroku-sys/ext-json": "*", "heroku-sys/php": ">=5.3.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "doctrine/annotations", "version": "v1.2.7", "require": { "heroku-sys/php": ">=5.3.2" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "doctrine/cache", "version": "v1.6.0", "require": { "heroku-sys/php": "~5.5|~7.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "doctrine/collections", "version": "v1.3.0", "require": { "heroku-sys/php": ">=5.3.2" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "doctrine/common", "version": "v2.6.1", "require": { "heroku-sys/php": "~5.5|~7.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "doctrine/inflector", "version": "v1.1.0", "require": { "heroku-sys/php": ">=5.3.2" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "doctrine/lexer", "version": "v1.0.1", "require": { "heroku-sys/php": ">=5.3.2" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "geoip/geoip", "version": "v1.16", "require": [], "replace": [], "provide": [], "conflict": { "heroku-sys/ext-geoip": "*" } }, { "type": "metapackage", "name": "giggsey/libphonenumber-for-php", "version": "7.2.5", "require": { "heroku-sys/ext-mbstring": "*" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "guzzlehttp/guzzle", "version": "5.3.0", "require": { "heroku-sys/php": ">=5.4.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "guzzlehttp/promises", "version": "1.0.3", "require": { "heroku-sys/php": ">=5.5.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "guzzlehttp/psr7", "version": "1.2.3", "require": { "heroku-sys/php": ">=5.4.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "guzzlehttp/ringphp", "version": "1.1.0", "require": { "heroku-sys/php": ">=5.4.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "guzzlehttp/streams", "version": "3.0.0", "require": { "heroku-sys/php": ">=5.4.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "hipchat/hipchat-php", "version": "v1.4", "require": { "heroku-sys/php": ">=5.3.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "kriswallsmith/buzz", "version": "v0.15", "require": { "heroku-sys/php": ">=5.3.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "league/csv", "version": "8.0.0", "require": { "heroku-sys/ext-mbstring": "*", "heroku-sys/php": ">=5.5.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "league/fractal", "version": "0.13.0", "require": { "heroku-sys/php": ">=5.4" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "mashape/unirest-php", "version": "1.2.1", "require": { "heroku-sys/ext-curl": "*", "heroku-sys/ext-json": "*", "heroku-sys/php": ">=5.3.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "mtdowling/jmespath.php", "version": "2.3.0", "require": { "heroku-sys/php": ">=5.4.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "palex/phpstructureddata", "version": "v2.0.1", "require": { "heroku-sys/php": ">=5.3.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "psr/http-message", "version": "1.0", "require": { "heroku-sys/php": ">=5.3.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "react/promise", "version": "v2.2.1", "require": { "heroku-sys/php": ">=5.4.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "rollbar/rollbar", "version": "v0.15.0", "require": { "heroku-sys/ext-curl": "*" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "ronanguilloux/isocodes", "version": "1.2.0", "require": { "heroku-sys/ext-bcmath": "*", "heroku-sys/php": ">=5.4.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "sendgrid/sendgrid", "version": "2.1.1", "require": { "heroku-sys/php": ">=5.3" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "sendgrid/smtpapi", "version": "0.0.1", "require": { "heroku-sys/php": ">=5.3" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "symfony/css-selector", "version": "v2.8.2", "require": { "heroku-sys/php": ">=5.3.9" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "symfony/http-foundation", "version": "v2.8.2", "require": { "heroku-sys/php": ">=5.3.9" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "symfony/polyfill-php54", "version": "v1.1.0", "require": { "heroku-sys/php": ">=5.3.3" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "symfony/polyfill-php55", "version": "v1.1.0", "require": { "heroku-sys/php": ">=5.3.3" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "thepixeldeveloper/sitemap", "version": "3.0.0", "require": { "heroku-sys/php": ">=5.3.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "tijsverkoyen/css-to-inline-styles", "version": "1.5.5", "require": { "heroku-sys/php": ">=5.3.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "yiisoft/yii", "version": "1.1.17", "require": { "heroku-sys/php": ">=5.1.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "composer.json/composer.lock", "version": "dev-597511d6d51b96e4a8afeba2c79982e5", "require": { "heroku-sys/php": "~5.6.0", "heroku-sys/ext-newrelic": "*", "heroku-sys/ext-gd": "*", "heroku-sys/ext-redis": "*" }, "replace": [], "provide": [], "conflict": [] } ] } ], "require": { "composer.json/composer.lock": "dev-597511d6d51b96e4a8afeba2c79982e5", "anthonymartin/geo-location": "v1.0.0", "aws/aws-sdk-php": "3.9.4", "cloudinary/cloudinary_php": "dev-master", "doctrine/annotations": "v1.2.7", "doctrine/cache": "v1.6.0", "doctrine/collections": "v1.3.0", "doctrine/common": "v2.6.1", "doctrine/inflector": "v1.1.0", "doctrine/lexer": "v1.0.1", "geoip/geoip": "v1.16", "giggsey/libphonenumber-for-php": "7.2.5", "guzzlehttp/guzzle": "5.3.0", "guzzlehttp/promises": "1.0.3", "guzzlehttp/psr7": "1.2.3", "guzzlehttp/ringphp": "1.1.0", "guzzlehttp/streams": "3.0.0", "hipchat/hipchat-php": "v1.4", "kriswallsmith/buzz": "v0.15", "league/csv": "8.0.0", "league/fractal": "0.13.0", "mashape/unirest-php": "1.2.1", "mtdowling/jmespath.php": "2.3.0", "palex/phpstructureddata": "v2.0.1", "psr/http-message": "1.0", "react/promise": "v2.2.1", "rollbar/rollbar": "v0.15.0", "ronanguilloux/isocodes": "1.2.0", "sendgrid/sendgrid": "2.1.1", "sendgrid/smtpapi": "0.0.1", "symfony/css-selector": "v2.8.2", "symfony/http-foundation": "v2.8.2", "symfony/polyfill-php54": "v1.1.0", "symfony/polyfill-php55": "v1.1.0", "thepixeldeveloper/sitemap": "3.0.0", "tijsverkoyen/css-to-inline-styles": "1.5.5", "yiisoft/yii": "1.1.17", "heroku-sys/apache": "^2.4.10", "heroku-sys/nginx": "~1.8.0" } }', 'require', 'foo', 'qux', '{ "config": { "cache-files-ttl": 0, "discard-changes": true }, "minimum-stability": "stable", "prefer-stable": false, "provide": { "heroku-sys/cedar": "14.2016.03.22" }, "repositories": [ { "packagist": false }, { "type": "package", "package": [ { "type": "metapackage", "name": "anthonymartin/geo-location", "version": "v1.0.0", "require": { "heroku-sys/php": ">=5.3.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "aws/aws-sdk-php", "version": "3.9.4", "require": { "heroku-sys/php": ">=5.5" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "cloudinary/cloudinary_php", "version": "dev-master", "require": { "heroku-sys/ext-curl": "*", "heroku-sys/ext-json": "*", "heroku-sys/php": ">=5.3.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "doctrine/annotations", "version": "v1.2.7", "require": { "heroku-sys/php": ">=5.3.2" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "doctrine/cache", "version": "v1.6.0", "require": { "heroku-sys/php": "~5.5|~7.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "doctrine/collections", "version": "v1.3.0", "require": { "heroku-sys/php": ">=5.3.2" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "doctrine/common", "version": "v2.6.1", "require": { "heroku-sys/php": "~5.5|~7.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "doctrine/inflector", "version": "v1.1.0", "require": { "heroku-sys/php": ">=5.3.2" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "doctrine/lexer", "version": "v1.0.1", "require": { "heroku-sys/php": ">=5.3.2" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "geoip/geoip", "version": "v1.16", "require": [], "replace": [], "provide": [], "conflict": { "heroku-sys/ext-geoip": "*" } }, { "type": "metapackage", "name": "giggsey/libphonenumber-for-php", "version": "7.2.5", "require": { "heroku-sys/ext-mbstring": "*" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "guzzlehttp/guzzle", "version": "5.3.0", "require": { "heroku-sys/php": ">=5.4.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "guzzlehttp/promises", "version": "1.0.3", "require": { "heroku-sys/php": ">=5.5.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "guzzlehttp/psr7", "version": "1.2.3", "require": { "heroku-sys/php": ">=5.4.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "guzzlehttp/ringphp", "version": "1.1.0", "require": { "heroku-sys/php": ">=5.4.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "guzzlehttp/streams", "version": "3.0.0", "require": { "heroku-sys/php": ">=5.4.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "hipchat/hipchat-php", "version": "v1.4", "require": { "heroku-sys/php": ">=5.3.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "kriswallsmith/buzz", "version": "v0.15", "require": { "heroku-sys/php": ">=5.3.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "league/csv", "version": "8.0.0", "require": { "heroku-sys/ext-mbstring": "*", "heroku-sys/php": ">=5.5.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "league/fractal", "version": "0.13.0", "require": { "heroku-sys/php": ">=5.4" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "mashape/unirest-php", "version": "1.2.1", "require": { "heroku-sys/ext-curl": "*", "heroku-sys/ext-json": "*", "heroku-sys/php": ">=5.3.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "mtdowling/jmespath.php", "version": "2.3.0", "require": { "heroku-sys/php": ">=5.4.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "palex/phpstructureddata", "version": "v2.0.1", "require": { "heroku-sys/php": ">=5.3.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "psr/http-message", "version": "1.0", "require": { "heroku-sys/php": ">=5.3.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "react/promise", "version": "v2.2.1", "require": { "heroku-sys/php": ">=5.4.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "rollbar/rollbar", "version": "v0.15.0", "require": { "heroku-sys/ext-curl": "*" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "ronanguilloux/isocodes", "version": "1.2.0", "require": { "heroku-sys/ext-bcmath": "*", "heroku-sys/php": ">=5.4.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "sendgrid/sendgrid", "version": "2.1.1", "require": { "heroku-sys/php": ">=5.3" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "sendgrid/smtpapi", "version": "0.0.1", "require": { "heroku-sys/php": ">=5.3" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "symfony/css-selector", "version": "v2.8.2", "require": { "heroku-sys/php": ">=5.3.9" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "symfony/http-foundation", "version": "v2.8.2", "require": { "heroku-sys/php": ">=5.3.9" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "symfony/polyfill-php54", "version": "v1.1.0", "require": { "heroku-sys/php": ">=5.3.3" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "symfony/polyfill-php55", "version": "v1.1.0", "require": { "heroku-sys/php": ">=5.3.3" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "thepixeldeveloper/sitemap", "version": "3.0.0", "require": { "heroku-sys/php": ">=5.3.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "tijsverkoyen/css-to-inline-styles", "version": "1.5.5", "require": { "heroku-sys/php": ">=5.3.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "yiisoft/yii", "version": "1.1.17", "require": { "heroku-sys/php": ">=5.1.0" }, "replace": [], "provide": [], "conflict": [] }, { "type": "metapackage", "name": "composer.json/composer.lock", "version": "dev-597511d6d51b96e4a8afeba2c79982e5", "require": { "heroku-sys/php": "~5.6.0", "heroku-sys/ext-newrelic": "*", "heroku-sys/ext-gd": "*", "heroku-sys/ext-redis": "*" }, "replace": [], "provide": [], "conflict": [] } ] } ], "require": { "composer.json/composer.lock": "dev-597511d6d51b96e4a8afeba2c79982e5", "anthonymartin/geo-location": "v1.0.0", "aws/aws-sdk-php": "3.9.4", "cloudinary/cloudinary_php": "dev-master", "doctrine/annotations": "v1.2.7", "doctrine/cache": "v1.6.0", "doctrine/collections": "v1.3.0", "doctrine/common": "v2.6.1", "doctrine/inflector": "v1.1.0", "doctrine/lexer": "v1.0.1", "geoip/geoip": "v1.16", "giggsey/libphonenumber-for-php": "7.2.5", "guzzlehttp/guzzle": "5.3.0", "guzzlehttp/promises": "1.0.3", "guzzlehttp/psr7": "1.2.3", "guzzlehttp/ringphp": "1.1.0", "guzzlehttp/streams": "3.0.0", "hipchat/hipchat-php": "v1.4", "kriswallsmith/buzz": "v0.15", "league/csv": "8.0.0", "league/fractal": "0.13.0", "mashape/unirest-php": "1.2.1", "mtdowling/jmespath.php": "2.3.0", "palex/phpstructureddata": "v2.0.1", "psr/http-message": "1.0", "react/promise": "v2.2.1", "rollbar/rollbar": "v0.15.0", "ronanguilloux/isocodes": "1.2.0", "sendgrid/sendgrid": "2.1.1", "sendgrid/smtpapi": "0.0.1", "symfony/css-selector": "v2.8.2", "symfony/http-foundation": "v2.8.2", "symfony/polyfill-php54": "v1.1.0", "symfony/polyfill-php55": "v1.1.0", "thepixeldeveloper/sitemap": "3.0.0", "tijsverkoyen/css-to-inline-styles": "1.5.5", "yiisoft/yii": "1.1.17", "heroku-sys/apache": "^2.4.10", "heroku-sys/nginx": "~1.8.0", "foo": "qux" } } ', ), ); } /** * @dataProvider providerAddLinkAndSortPackages */ public function testAddLinkAndSortPackages($json, $type, $package, $constraint, $sortPackages, $expected) { $manipulator = new JsonManipulator($json); $this->assertTrue($manipulator->addLink($type, $package, $constraint, $sortPackages)); $this->assertEquals($expected, $manipulator->getContents()); } public function providerAddLinkAndSortPackages() { return array( array( '{ "require": { "vendor/baz": "qux" } }', 'require', 'foo', 'bar', true, '{ "require": { "foo": "bar", "vendor/baz": "qux" } } ', ), array( '{ "require": { "vendor/baz": "qux" } }', 'require', 'foo', 'bar', false, '{ "require": { "vendor/baz": "qux", "foo": "bar" } } ', ), array( '{ "require": { "foo": "baz", "ext-10gd": "*", "ext-2mcrypt": "*", "lib-foo": "*", "hhvm": "*", "php": ">=5.5" } }', 'require', 'igorw/retry', '*', true, '{ "require": { "php": ">=5.5", "hhvm": "*", "ext-2mcrypt": "*", "ext-10gd": "*", "lib-foo": "*", "foo": "baz", "igorw/retry": "*" } } ', ), ); } /** * @dataProvider removeSubNodeProvider */ public function testRemoveSubNode($json, $name, $expected, $expectedContent = null) { $manipulator = new JsonManipulator($json); $this->assertEquals($expected, $manipulator->removeSubNode('repositories', $name)); if (null !== $expectedContent) { $this->assertEquals($expectedContent, $manipulator->getContents()); } } public function removeSubNodeProvider() { return array( 'works on simple ones first' => array( '{ "repositories": { "foo": { "foo": "bar", "bar": "baz" }, "bar": { "foo": "bar", "bar": "baz" } } }', 'foo', true, '{ "repositories": { "bar": { "foo": "bar", "bar": "baz" } } } ', ), 'works on simple ones last' => array( '{ "repositories": { "foo": { "foo": "bar", "bar": "baz" }, "bar": { "foo": "bar", "bar": "baz" } } }', 'bar', true, '{ "repositories": { "foo": { "foo": "bar", "bar": "baz" } } } ', ), 'works on simple ones unique' => array( '{ "repositories": { "foo": { "foo": "bar", "bar": "baz" } } }', 'foo', true, '{ "repositories": { } } ', ), 'works on simple ones middle' => array( '{ "repositories": { "foo": { "foo": "bar", "bar": "baz" }, "bar": { "foo": "bar", "bar": "baz" }, "baz": { "foo": "bar", "bar": "baz" } } }', 'bar', true, '{ "repositories": { "foo": { "foo": "bar", "bar": "baz" }, "baz": { "foo": "bar", "bar": "baz" } } } ', ), 'works on undefined ones' => array( '{ "repositories": { "main": { "foo": "bar", "bar": "baz" } } }', 'removenotthere', true, '{ "repositories": { "main": { "foo": "bar", "bar": "baz" } } } ', ), 'works on child having unmatched name' => array( '{ "repositories": { "baz": { "foo": "bar", "bar": "baz" } } }', 'bar', true, '{ "repositories": { "baz": { "foo": "bar", "bar": "baz" } } } ', ), 'works on child having duplicate name' => array( '{ "repositories": { "foo": { "baz": "qux" }, "baz": { "foo": "bar", "bar": "baz" } } }', 'baz', true, '{ "repositories": { "foo": { "baz": "qux" } } } ', ), 'works on empty repos' => array( '{ "repositories": { } }', 'bar', true, ), 'works on empty repos2' => array( '{ "repositories": {} }', 'bar', true, ), 'works on missing repos' => array( "{\n}", 'bar', true, ), 'works on deep repos' => array( '{ "repositories": { "foo": { "package": { "bar": "baz" } } } }', 'foo', true, '{ "repositories": { } } ', ), 'fails on deep repos with borked texts' => array( '{ "repositories": { "foo": { "package": { "bar": "ba{z" } } } }', 'bar', false, ), 'fails on deep repos with borked texts2' => array( '{ "repositories": { "foo": { "package": { "bar": "ba}z" } } } }', 'bar', false, ), 'fails on deep arrays with borked texts' => array( '{ "repositories": [ { "package": { "bar": "ba[z" } } ] }', 'bar', false, ), 'fails on deep arrays with borked texts2' => array( '{ "repositories": [ { "package": { "bar": "ba]z" } } ] }', 'bar', false, ), ); } public function testRemoveSubNodeFromRequire() { $manipulator = new JsonManipulator('{ "repositories": [ { "package": { "require": { "this/should-not-end-up-in-root-require": "~2.0" }, "require-dev": { "this/should-not-end-up-in-root-require-dev": "~2.0" } } } ], "require": { "package/a": "*", "package/b": "*", "package/c": "*" }, "require-dev": { "package/d": "*" } }'); $this->assertTrue($manipulator->removeSubNode('require', 'package/c')); $this->assertTrue($manipulator->removeSubNode('require-dev', 'package/d')); $this->assertEquals('{ "repositories": [ { "package": { "require": { "this/should-not-end-up-in-root-require": "~2.0" }, "require-dev": { "this/should-not-end-up-in-root-require-dev": "~2.0" } } } ], "require": { "package/a": "*", "package/b": "*" }, "require-dev": { } } ', $manipulator->getContents()); } public function testAddSubNodeInRequire() { $manipulator = new JsonManipulator('{ "repositories": [ { "package": { "require": { "this/should-not-end-up-in-root-require": "~2.0" }, "require-dev": { "this/should-not-end-up-in-root-require-dev": "~2.0" } } } ], "require": { "package/a": "*", "package/b": "*" }, "require-dev": { "package/d": "*" } }'); $this->assertTrue($manipulator->addSubNode('require', 'package/c', '*')); $this->assertTrue($manipulator->addSubNode('require-dev', 'package/e', '*')); $this->assertEquals('{ "repositories": [ { "package": { "require": { "this/should-not-end-up-in-root-require": "~2.0" }, "require-dev": { "this/should-not-end-up-in-root-require-dev": "~2.0" } } } ], "require": { "package/a": "*", "package/b": "*", "package/c": "*" }, "require-dev": { "package/d": "*", "package/e": "*" } } ', $manipulator->getContents()); } public function testAddRepositoryCanInitializeEmptyRepositories() { $manipulator = new JsonManipulator('{ "repositories": { } }'); $this->assertTrue($manipulator->addRepository('bar', array('type' => 'composer'))); $this->assertEquals('{ "repositories": { "bar": { "type": "composer" } } } ', $manipulator->getContents()); } public function testAddRepositoryCanInitializeFromScratch() { $manipulator = new JsonManipulator("{ \t\"a\": \"b\" }"); $this->assertTrue($manipulator->addRepository('bar2', array('type' => 'composer'))); $this->assertEquals("{ \t\"a\": \"b\", \t\"repositories\": { \t\t\"bar2\": { \t\t\t\"type\": \"composer\" \t\t} \t} } ", $manipulator->getContents()); } public function testAddRepositoryCanAdd() { $manipulator = new JsonManipulator('{ "repositories": { "foo": { "type": "vcs", "url": "lala" } } }'); $this->assertTrue($manipulator->addRepository('bar', array('type' => 'composer'))); $this->assertEquals('{ "repositories": { "foo": { "type": "vcs", "url": "lala" }, "bar": { "type": "composer" } } } ', $manipulator->getContents()); } public function testAddRepositoryCanOverrideDeepRepos() { $manipulator = new JsonManipulator('{ "repositories": { "baz": { "type": "package", "package": {} } } }'); $this->assertTrue($manipulator->addRepository('baz', array('type' => 'composer'))); $this->assertEquals('{ "repositories": { "baz": { "type": "composer" } } } ', $manipulator->getContents()); } public function testAddConfigSettingEscapes() { $manipulator = new JsonManipulator('{ "config": { } }'); $this->assertTrue($manipulator->addConfigSetting('test', 'a\b')); $this->assertTrue($manipulator->addConfigSetting('test2', "a\nb\fa")); $this->assertEquals('{ "config": { "test": "a\\\\b", "test2": "a\nb\fa" } } ', $manipulator->getContents()); } public function testAddConfigSettingWorksFromScratch() { $manipulator = new JsonManipulator('{ }'); $this->assertTrue($manipulator->addConfigSetting('foo.bar', 'baz')); $this->assertEquals('{ "config": { "foo": { "bar": "baz" } } } ', $manipulator->getContents()); } public function testAddConfigSettingCanAdd() { $manipulator = new JsonManipulator('{ "config": { "foo": "bar" } }'); $this->assertTrue($manipulator->addConfigSetting('bar', 'baz')); $this->assertEquals('{ "config": { "foo": "bar", "bar": "baz" } } ', $manipulator->getContents()); } public function testAddConfigSettingCanOverwrite() { $manipulator = new JsonManipulator('{ "config": { "foo": "bar", "bar": "baz" } }'); $this->assertTrue($manipulator->addConfigSetting('foo', 'zomg')); $this->assertEquals('{ "config": { "foo": "zomg", "bar": "baz" } } ', $manipulator->getContents()); } public function testAddConfigSettingCanOverwriteNumbers() { $manipulator = new JsonManipulator('{ "config": { "foo": 500 } }'); $this->assertTrue($manipulator->addConfigSetting('foo', 50)); $this->assertEquals('{ "config": { "foo": 50 } } ', $manipulator->getContents()); } public function testAddConfigSettingCanOverwriteArrays() { $manipulator = new JsonManipulator('{ "config": { "github-oauth": { "github.com": "foo" }, "github-protocols": ["https"] } }'); $this->assertTrue($manipulator->addConfigSetting('github-protocols', array('https', 'http'))); $this->assertEquals('{ "config": { "github-oauth": { "github.com": "foo" }, "github-protocols": ["https", "http"] } } ', $manipulator->getContents()); $this->assertTrue($manipulator->addConfigSetting('github-oauth', array('github.com' => 'bar', 'alt.example.org' => 'baz'))); $this->assertEquals('{ "config": { "github-oauth": { "github.com": "bar", "alt.example.org": "baz" }, "github-protocols": ["https", "http"] } } ', $manipulator->getContents()); } public function testAddConfigSettingCanAddSubKeyInEmptyConfig() { $manipulator = new JsonManipulator('{ "config": { } }'); $this->assertTrue($manipulator->addConfigSetting('github-oauth.bar', 'baz')); $this->assertEquals('{ "config": { "github-oauth": { "bar": "baz" } } } ', $manipulator->getContents()); } public function testAddConfigSettingCanAddSubKeyInEmptyVal() { $manipulator = new JsonManipulator('{ "config": { "github-oauth": {}, "github-oauth2": { } } }'); $this->assertTrue($manipulator->addConfigSetting('github-oauth.bar', 'baz')); $this->assertTrue($manipulator->addConfigSetting('github-oauth2.a.bar', 'baz2')); $this->assertTrue($manipulator->addConfigSetting('github-oauth3.b', 'c')); $this->assertEquals('{ "config": { "github-oauth": { "bar": "baz" }, "github-oauth2": { "a.bar": "baz2" }, "github-oauth3": { "b": "c" } } } ', $manipulator->getContents()); } public function testAddConfigSettingCanAddSubKeyInHash() { $manipulator = new JsonManipulator('{ "config": { "github-oauth": { "github.com": "foo" } } }'); $this->assertTrue($manipulator->addConfigSetting('github-oauth.bar', 'baz')); $this->assertEquals('{ "config": { "github-oauth": { "github.com": "foo", "bar": "baz" } } } ', $manipulator->getContents()); } public function testAddRootSettingDoesNotBreakDots() { $manipulator = new JsonManipulator('{ "github-oauth": { "github.com": "foo" } }'); $this->assertTrue($manipulator->addSubNode('github-oauth', 'bar', 'baz')); $this->assertEquals('{ "github-oauth": { "github.com": "foo", "bar": "baz" } } ', $manipulator->getContents()); } public function testRemoveConfigSettingCanRemoveSubKeyInHash() { $manipulator = new JsonManipulator('{ "config": { "github-oauth": { "github.com": "foo", "bar": "baz" } } }'); $this->assertTrue($manipulator->removeConfigSetting('github-oauth.bar')); $this->assertEquals('{ "config": { "github-oauth": { "github.com": "foo" } } } ', $manipulator->getContents()); } public function testRemoveConfigSettingCanRemoveSubKeyInHashWithSiblings() { $manipulator = new JsonManipulator('{ "config": { "foo": "bar", "github-oauth": { "github.com": "foo", "bar": "baz" } } }'); $this->assertTrue($manipulator->removeConfigSetting('github-oauth.bar')); $this->assertEquals('{ "config": { "foo": "bar", "github-oauth": { "github.com": "foo" } } } ', $manipulator->getContents()); } public function testAddMainKey() { $manipulator = new JsonManipulator('{ "foo": "bar" }'); $this->assertTrue($manipulator->addMainKey('bar', 'baz')); $this->assertEquals('{ "foo": "bar", "bar": "baz" } ', $manipulator->getContents()); } public function testUpdateMainKey() { $manipulator = new JsonManipulator('{ "foo": "bar" }'); $this->assertTrue($manipulator->addMainKey('foo', 'baz')); $this->assertEquals('{ "foo": "baz" } ', $manipulator->getContents()); } public function testUpdateMainKey2() { $manipulator = new JsonManipulator('{ "a": { "foo": "bar", "baz": "qux" }, "foo": "bar", "baz": "bar" }'); $this->assertTrue($manipulator->addMainKey('foo', 'baz')); $this->assertTrue($manipulator->addMainKey('baz', 'quux')); $this->assertEquals('{ "a": { "foo": "bar", "baz": "qux" }, "foo": "baz", "baz": "quux" } ', $manipulator->getContents()); } public function testUpdateMainKey3() { $manipulator = new JsonManipulator('{ "require": { "php": "5.*" }, "require-dev": { "foo": "bar" } }'); $this->assertTrue($manipulator->addMainKey('require-dev', array('foo' => 'qux'))); $this->assertEquals('{ "require": { "php": "5.*" }, "require-dev": { "foo": "qux" } } ', $manipulator->getContents()); } public function testIndentDetection() { $manipulator = new JsonManipulator('{ "require": { "php": "5.*" } }'); $this->assertTrue($manipulator->addMainKey('require-dev', array('foo' => 'qux'))); $this->assertEquals('{ "require": { "php": "5.*" }, "require-dev": { "foo": "qux" } } ', $manipulator->getContents()); } } composer-1.0.0-beta2/tests/Composer/Test/Json/JsonValidationExceptionTest.php000066400000000000000000000020571267577262200273130ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Json; use Composer\Json\JsonValidationException; class JsonValidationExceptionTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider errorProvider */ public function testGetErrors($message, $errors) { $object = new JsonValidationException($message, $errors); $this->assertEquals($message, $object->getMessage()); $this->assertEquals($errors, $object->getErrors()); } public function testGetErrorsWhenNoErrorsProvided() { $object = new JsonValidationException('test message'); $this->assertEquals(array(), $object->getErrors()); } public function errorProvider() { return array( array('test message', array()), array(null, null), ); } } composer-1.0.0-beta2/tests/Composer/Test/Mock/000077500000000000000000000000001267577262200211135ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Mock/FactoryMock.php000066400000000000000000000025141267577262200240470ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Mock; use Composer\Composer; use Composer\Config; use Composer\Factory; use Composer\Repository\RepositoryManager; use Composer\Repository\WritableRepositoryInterface; use Composer\Installer; use Composer\IO\IOInterface; class FactoryMock extends Factory { public static function createConfig(IOInterface $io = null, $cwd = null) { $config = new Config(true, $cwd); $config->merge(array( 'config' => array('home' => sys_get_temp_dir().'/composer-test'), 'repositories' => array('packagist' => false), )); return $config; } protected function addLocalRepository(IOInterface $io, RepositoryManager $rm, $vendorDir) { } protected function createInstallationManager() { return new InstallationManagerMock; } protected function createDefaultInstallers(Installer\InstallationManager $im, Composer $composer, IOInterface $io) { } protected function purgePackages(WritableRepositoryInterface $repo, Installer\InstallationManager $im) { } } composer-1.0.0-beta2/tests/Composer/Test/Mock/InstallationManagerMock.php000066400000000000000000000057751267577262200264100ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Mock; use Composer\Installer\InstallationManager; use Composer\Repository\RepositoryInterface; use Composer\Repository\InstalledRepositoryInterface; use Composer\Package\PackageInterface; use Composer\DependencyResolver\Operation\InstallOperation; use Composer\DependencyResolver\Operation\UpdateOperation; use Composer\DependencyResolver\Operation\UninstallOperation; use Composer\DependencyResolver\Operation\MarkAliasInstalledOperation; use Composer\DependencyResolver\Operation\MarkAliasUninstalledOperation; class InstallationManagerMock extends InstallationManager { private $installed = array(); private $updated = array(); private $uninstalled = array(); private $trace = array(); public function getInstallPath(PackageInterface $package) { return ''; } public function isPackageInstalled(InstalledRepositoryInterface $repo, PackageInterface $package) { return $repo->hasPackage($package); } public function install(RepositoryInterface $repo, InstallOperation $operation) { $this->installed[] = $operation->getPackage(); $this->trace[] = (string) $operation; $repo->addPackage(clone $operation->getPackage()); } public function update(RepositoryInterface $repo, UpdateOperation $operation) { $this->updated[] = array($operation->getInitialPackage(), $operation->getTargetPackage()); $this->trace[] = (string) $operation; $repo->removePackage($operation->getInitialPackage()); $repo->addPackage(clone $operation->getTargetPackage()); } public function uninstall(RepositoryInterface $repo, UninstallOperation $operation) { $this->uninstalled[] = $operation->getPackage(); $this->trace[] = (string) $operation; $repo->removePackage($operation->getPackage()); } public function markAliasInstalled(RepositoryInterface $repo, MarkAliasInstalledOperation $operation) { $package = $operation->getPackage(); $this->installed[] = $package; $this->trace[] = (string) $operation; parent::markAliasInstalled($repo, $operation); } public function markAliasUninstalled(RepositoryInterface $repo, MarkAliasUninstalledOperation $operation) { $this->uninstalled[] = $operation->getPackage(); $this->trace[] = (string) $operation; parent::markAliasUninstalled($repo, $operation); } public function getTrace() { return $this->trace; } public function getInstalledPackages() { return $this->installed; } public function getUpdatedPackages() { return $this->updated; } public function getUninstalledPackages() { return $this->uninstalled; } } composer-1.0.0-beta2/tests/Composer/Test/Mock/InstalledFilesystemRepositoryMock.php000066400000000000000000000010071267577262200305200ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Mock; use Composer\Repository\InstalledFilesystemRepository; class InstalledFilesystemRepositoryMock extends InstalledFilesystemRepository { public function reload() { } public function write() { } } composer-1.0.0-beta2/tests/Composer/Test/Mock/RemoteFilesystemMock.php000066400000000000000000000017331267577262200257420ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Mock; use Composer\Util\RemoteFilesystem; use Composer\Downloader\TransportException; /** * Remote filesystem mock */ class RemoteFilesystemMock extends RemoteFilesystem { /** * @param array $contentMap associative array of locations and content */ public function __construct(array $contentMap) { $this->contentMap = $contentMap; } public function getContents($originUrl, $fileUrl, $progress = true, $options = array()) { if (!empty($this->contentMap[$fileUrl])) { return $this->contentMap[$fileUrl]; } throw new TransportException('The "'.$fileUrl.'" file could not be downloaded (NOT FOUND)', 404); } } composer-1.0.0-beta2/tests/Composer/Test/Package/000077500000000000000000000000001267577262200215555ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Package/Archiver/000077500000000000000000000000001267577262200233205ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Package/Archiver/ArchivableFilesFinderTest.php000066400000000000000000000206011267577262200310430ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Package\Archiver; use Composer\Package\Archiver\ArchivableFilesFinder; use Composer\TestCase; use Composer\Util\Filesystem; use Symfony\Component\Process\Process; use Symfony\Component\Process\ExecutableFinder; class ArchivableFilesFinderTest extends TestCase { protected $sources; protected $finder; protected $fs; protected function setUp() { $fs = new Filesystem; $this->fs = $fs; $this->sources = $fs->normalizePath( $this->getUniqueTmpDirectory() ); $fileTree = array( 'A/prefixA.foo', 'A/prefixB.foo', 'A/prefixC.foo', 'A/prefixD.foo', 'A/prefixE.foo', 'A/prefixF.foo', 'B/sub/prefixA.foo', 'B/sub/prefixB.foo', 'B/sub/prefixC.foo', 'B/sub/prefixD.foo', 'B/sub/prefixE.foo', 'B/sub/prefixF.foo', 'C/prefixA.foo', 'C/prefixB.foo', 'C/prefixC.foo', 'C/prefixD.foo', 'C/prefixE.foo', 'C/prefixF.foo', 'D/prefixA', 'D/prefixB', 'D/prefixC', 'D/prefixD', 'D/prefixE', 'D/prefixF', 'E/subtestA.foo', 'F/subtestA.foo', 'G/subtestA.foo', 'H/subtestA.foo', 'I/J/subtestA.foo', 'K/dirJ/subtestA.foo', 'toplevelA.foo', 'toplevelB.foo', 'prefixA.foo', 'prefixB.foo', 'prefixC.foo', 'prefixD.foo', 'prefixE.foo', 'prefixF.foo', 'parameters.yml', 'parameters.yml.dist', '!important!.txt', '!important_too!.txt', '#weirdfile', ); foreach ($fileTree as $relativePath) { $path = $this->sources.'/'.$relativePath; $fs->ensureDirectoryExists(dirname($path)); file_put_contents($path, ''); } } protected function tearDown() { $fs = new Filesystem; $fs->removeDirectory($this->sources); } public function testManualExcludes() { $excludes = array( 'prefixB.foo', '!/prefixB.foo', '/prefixA.foo', 'prefixC.*', '!*/*/*/prefixC.foo', ); $this->finder = new ArchivableFilesFinder($this->sources, $excludes); $this->assertArchivableFiles(array( '/!important!.txt', '/!important_too!.txt', '/#weirdfile', '/A/prefixA.foo', '/A/prefixD.foo', '/A/prefixE.foo', '/A/prefixF.foo', '/B/sub/prefixA.foo', '/B/sub/prefixC.foo', '/B/sub/prefixD.foo', '/B/sub/prefixE.foo', '/B/sub/prefixF.foo', '/C/prefixA.foo', '/C/prefixD.foo', '/C/prefixE.foo', '/C/prefixF.foo', '/D/prefixA', '/D/prefixB', '/D/prefixC', '/D/prefixD', '/D/prefixE', '/D/prefixF', '/E/subtestA.foo', '/F/subtestA.foo', '/G/subtestA.foo', '/H/subtestA.foo', '/I/J/subtestA.foo', '/K/dirJ/subtestA.foo', '/parameters.yml', '/parameters.yml.dist', '/prefixB.foo', '/prefixD.foo', '/prefixE.foo', '/prefixF.foo', '/toplevelA.foo', '/toplevelB.foo', )); } public function testGitExcludes() { // Ensure that git is available for testing. if (!$this->isProcessAvailable('git')) { return $this->markTestSkipped('git is not available.'); } file_put_contents($this->sources.'/.gitignore', implode("\n", array( '# gitignore rules with comments and blank lines', '', 'prefixE.foo', '# and more', '# comments', '', '!/prefixE.foo', '/prefixD.foo', 'prefixF.*', '!/*/*/prefixF.foo', '', 'refixD.foo', '/C', 'D/prefixA', 'E', 'F/', 'G/*', 'H/**', 'J/', 'parameters.yml', '\!important!.txt', '\#*', ))); // git does not currently support negative git attributes file_put_contents($this->sources.'/.gitattributes', implode("\n", array( '', '# gitattributes rules with comments and blank lines', 'prefixB.foo export-ignore', //'!/prefixB.foo export-ignore', '/prefixA.foo export-ignore', 'prefixC.* export-ignore', //'!/*/*/prefixC.foo export-ignore', ))); $this->finder = new ArchivableFilesFinder($this->sources, array()); $this->assertArchivableFiles($this->getArchivedFiles('git init && '. 'git config user.email "you@example.com" && '. 'git config user.name "Your Name" && '. 'git add .git* && '. 'git commit -m "ignore rules" && '. 'git add . && '. 'git commit -m "init" && '. 'git archive --format=zip --prefix=archive/ -o archive.zip HEAD' )); } public function testHgExcludes() { // Ensure that Mercurial is available for testing. if (!$this->isProcessAvailable('hg')) { return $this->markTestSkipped('Mercurial is not available.'); } file_put_contents($this->sources.'/.hgignore', implode("\n", array( '# hgignore rules with comments, blank lines and syntax changes', '', 'pre*A.foo', 'prefixE.foo', '# and more', '# comments', '', '^prefixD.foo', 'D/prefixA', 'parameters.yml', '\!important!.txt', 'E', 'F/', 'syntax: glob', 'prefixF.*', 'B/*', 'H/**', ))); $this->finder = new ArchivableFilesFinder($this->sources, array()); $expectedFiles = $this->getArchivedFiles('hg init && '. 'hg add && '. 'hg commit -m "init" && '. 'hg archive archive.zip' ); // Remove .hg_archival.txt from the expectedFiles $archiveKey = array_search('/.hg_archival.txt', $expectedFiles); array_splice($expectedFiles, $archiveKey, 1); $this->assertArchivableFiles($expectedFiles); } protected function getArchivableFiles() { $files = array(); foreach ($this->finder as $file) { if (!$file->isDir()) { $files[] = preg_replace('#^'.preg_quote($this->sources, '#').'#', '', $this->fs->normalizePath($file->getRealPath())); } } sort($files); return $files; } protected function getArchivedFiles($command) { $process = new Process($command, $this->sources); $process->run(); $archive = new \PharData($this->sources.'/archive.zip'); $iterator = new \RecursiveIteratorIterator($archive); $files = array(); foreach ($iterator as $file) { $files[] = preg_replace('#^phar://'.preg_quote($this->sources, '#').'/archive\.zip/archive#', '', $this->fs->normalizePath($file)); } unset($archive, $iterator, $file); unlink($this->sources.'/archive.zip'); return $files; } protected function assertArchivableFiles($expectedFiles) { $actualFiles = $this->getArchivableFiles(); $this->assertEquals($expectedFiles, $actualFiles); } /** * Check whether or not the given process is available. * * @param string $process The name of the binary to test. * * @return bool True if the process is available, false otherwise. */ protected function isProcessAvailable($process) { $finder = new ExecutableFinder(); return (bool) $finder->find($process); } } composer-1.0.0-beta2/tests/Composer/Test/Package/Archiver/ArchiveManagerTest.php000066400000000000000000000077441267577262200275610ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Package\Archiver; use Composer\Factory; use Composer\Package\Archiver\ArchiveManager; use Composer\Package\PackageInterface; class ArchiveManagerTest extends ArchiverTest { /** * @var ArchiveManager */ protected $manager; protected $targetDir; public function setUp() { parent::setUp(); $factory = new Factory(); $this->manager = $factory->createArchiveManager($factory->createConfig()); $this->targetDir = $this->testDir.'/composer_archiver_tests'; } public function testUnknownFormat() { $this->setExpectedException('RuntimeException'); $package = $this->setupPackage(); $this->manager->archive($package, '__unknown_format__', $this->targetDir); } public function testArchiveTar() { $this->setupGitRepo(); $package = $this->setupPackage(); $this->manager->archive($package, 'tar', $this->targetDir); $target = $this->getTargetName($package, 'tar'); $this->assertFileExists($target); $tmppath = sys_get_temp_dir().'/composer_archiver/'.$this->manager->getPackageFilename($package); $this->assertFileNotExists($tmppath); unlink($target); } public function testArchiveCustomFileName() { $this->setupGitRepo(); $package = $this->setupPackage(); $fileName = 'testArchiveName'; $this->manager->archive($package, 'tar', $this->targetDir, $fileName); $target = $this->targetDir . '/' . $fileName . '.tar'; $this->assertFileExists($target); $tmppath = sys_get_temp_dir().'/composer_archiver/'.$this->manager->getPackageFilename($package); $this->assertFileNotExists($tmppath); unlink($target); } protected function getTargetName(PackageInterface $package, $format, $fileName = null) { if (null === $fileName) { $packageName = $this->manager->getPackageFilename($package); } else { $packageName = $fileName; } $target = $this->targetDir.'/'.$packageName.'.'.$format; return $target; } /** * Create local git repository to run tests against! */ protected function setupGitRepo() { $currentWorkDir = getcwd(); chdir($this->testDir); $output = null; $result = $this->process->execute('git init -q', $output, $this->testDir); if ($result > 0) { chdir($currentWorkDir); throw new \RuntimeException('Could not init: '.$this->process->getErrorOutput()); } $result = $this->process->execute('git config user.email "you@example.com"', $output, $this->testDir); if ($result > 0) { chdir($currentWorkDir); throw new \RuntimeException('Could not config: '.$this->process->getErrorOutput()); } $result = $this->process->execute('git config user.name "Your Name"', $output, $this->testDir); if ($result > 0) { chdir($currentWorkDir); throw new \RuntimeException('Could not config: '.$this->process->getErrorOutput()); } $result = file_put_contents('composer.json', '{"name":"faker/faker", "description": "description", "license": "MIT"}'); if (false === $result) { chdir($currentWorkDir); throw new \RuntimeException('Could not save file.'); } $result = $this->process->execute('git add composer.json && git commit -m "commit composer.json" -q', $output, $this->testDir); if ($result > 0) { chdir($currentWorkDir); throw new \RuntimeException('Could not commit: '.$this->process->getErrorOutput()); } chdir($currentWorkDir); } } composer-1.0.0-beta2/tests/Composer/Test/Package/Archiver/ArchiverTest.php000066400000000000000000000026521267577262200264410ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Package\Archiver; use Composer\TestCase; use Composer\Util\Filesystem; use Composer\Util\ProcessExecutor; use Composer\Package\Package; abstract class ArchiverTest extends TestCase { /** * @var \Composer\Util\Filesystem */ protected $filesystem; /** * @var \Composer\Util\ProcessExecutor */ protected $process; /** * @var string */ protected $testDir; public function setUp() { $this->filesystem = new Filesystem(); $this->process = new ProcessExecutor(); $this->testDir = $this->getUniqueTmpDirectory(); } public function tearDown() { $this->filesystem->removeDirectory($this->testDir); } /** * Util method to quickly setup a package using the source path built. * * @return \Composer\Package\Package */ protected function setupPackage() { $package = new Package('archivertest/archivertest', 'master', 'master'); $package->setSourceUrl(realpath($this->testDir)); $package->setSourceReference('master'); $package->setSourceType('git'); return $package; } } composer-1.0.0-beta2/tests/Composer/Test/Package/Archiver/GitExcludeFilterTest.php000066400000000000000000000017671267577262200301070ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Package\Archiver; use Composer\Package\Archiver\GitExcludeFilter; class GitExcludeFilterTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider patterns */ public function testPatternEscape($ignore, $expected) { $filter = new GitExcludeFilter('/'); $this->assertEquals($expected, $filter->parseGitIgnoreLine($ignore)); } public function patterns() { return array( array('app/config/parameters.yml', array('{(?=[^\.])app/(?=[^\.])config/(?=[^\.])parameters\.yml(?=$|/)}', false, false)), array('!app/config/parameters.yml', array('{(?=[^\.])app/(?=[^\.])config/(?=[^\.])parameters\.yml(?=$|/)}', true, false)), ); } } composer-1.0.0-beta2/tests/Composer/Test/Package/Archiver/HgExcludeFilterTest.php000066400000000000000000000020571267577262200277130ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Package\Archiver; use Composer\Package\Archiver\HgExcludeFilter; class HgExcludeFilterTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider patterns */ public function testPatternEscape($ignore, $expected) { $filter = new HgExcludeFilter('/'); $this->assertEquals($expected, $filter->patternFromRegex($ignore)); } public function patterns() { return array( array('.#', array('#.\\##', false, true)), array('.\\#', array('#.\\\\\\##', false, true)), array('\\.#', array('#\\.\\##', false, true)), array('\\\\.\\\\\\\\#', array('#\\\\.\\\\\\\\\\##', false, true)), array('.\\\\\\\\\\#', array('#.\\\\\\\\\\\\\\##', false, true)), ); } } composer-1.0.0-beta2/tests/Composer/Test/Package/Archiver/PharArchiverTest.php000066400000000000000000000044471267577262200272600ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Package\Archiver; use Composer\Package\Archiver\PharArchiver; class PharArchiverTest extends ArchiverTest { public function testTarArchive() { // Set up repository $this->setupDummyRepo(); $package = $this->setupPackage(); $target = $this->getUniqueTmpDirectory().'/composer_archiver_test.tar'; // Test archive $archiver = new PharArchiver(); $archiver->archive($package->getSourceUrl(), $target, 'tar', array('foo/bar', 'baz', '!/foo/bar/baz')); $this->assertFileExists($target); $this->filesystem->removeDirectory(dirname($target)); } public function testZipArchive() { // Set up repository $this->setupDummyRepo(); $package = $this->setupPackage(); $target = $this->getUniqueTmpDirectory().'/composer_archiver_test.zip'; // Test archive $archiver = new PharArchiver(); $archiver->archive($package->getSourceUrl(), $target, 'zip'); $this->assertFileExists($target); $this->filesystem->removeDirectory(dirname($target)); } /** * Create a local dummy repository to run tests against! */ protected function setupDummyRepo() { $currentWorkDir = getcwd(); chdir($this->testDir); $this->writeFile('file.txt', 'content', $currentWorkDir); $this->writeFile('foo/bar/baz', 'content', $currentWorkDir); $this->writeFile('foo/bar/ignoreme', 'content', $currentWorkDir); $this->writeFile('x/baz', 'content', $currentWorkDir); $this->writeFile('x/includeme', 'content', $currentWorkDir); chdir($currentWorkDir); } protected function writeFile($path, $content, $currentWorkDir) { if (!file_exists(dirname($path))) { mkdir(dirname($path), 0777, true); } $result = file_put_contents($path, 'a'); if (false === $result) { chdir($currentWorkDir); throw new \RuntimeException('Could not save file.'); } } } composer-1.0.0-beta2/tests/Composer/Test/Package/Archiver/ZipArchiverTest.php000066400000000000000000000036031267577262200271210ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Package\Archiver; use Composer\Package\Archiver\ZipArchiver; class ZipArchiverTest extends ArchiverTest { public function testZipArchive() { if (!class_exists('ZipArchive')) { $this->markTestSkipped('Cannot run ZipArchiverTest, missing class "ZipArchive".'); } // Set up repository $this->setupDummyRepo(); $package = $this->setupPackage(); $target = sys_get_temp_dir().'/composer_archiver_test.zip'; // Test archive $archiver = new ZipArchiver(); $archiver->archive($package->getSourceUrl(), $target, 'zip'); $this->assertFileExists($target); unlink($target); } /** * Create a local dummy repository to run tests against! */ protected function setupDummyRepo() { $currentWorkDir = getcwd(); chdir($this->testDir); $this->writeFile('file.txt', 'content', $currentWorkDir); $this->writeFile('foo/bar/baz', 'content', $currentWorkDir); $this->writeFile('foo/bar/ignoreme', 'content', $currentWorkDir); $this->writeFile('x/baz', 'content', $currentWorkDir); $this->writeFile('x/includeme', 'content', $currentWorkDir); chdir($currentWorkDir); } protected function writeFile($path, $content, $currentWorkDir) { if (!file_exists(dirname($path))) { mkdir(dirname($path), 0777, true); } $result = file_put_contents($path, 'a'); if (false === $result) { chdir($currentWorkDir); throw new \RuntimeException('Could not save file.'); } } } composer-1.0.0-beta2/tests/Composer/Test/Package/BasePackageTest.php000066400000000000000000000061171267577262200252610ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Package; use Composer\Package\BasePackage; class BasePackageTest extends \PHPUnit_Framework_TestCase { public function testSetSameRepository() { $package = $this->getMockForAbstractClass('Composer\Package\BasePackage', array('foo')); $repository = $this->getMock('Composer\Repository\RepositoryInterface'); $package->setRepository($repository); try { $package->setRepository($repository); } catch (\Exception $e) { $this->fail('Set against the same repository is allowed.'); } } /** * @expectedException LogicException */ public function testSetAnotherRepository() { $package = $this->getMockForAbstractClass('Composer\Package\BasePackage', array('foo')); $package->setRepository($this->getMock('Composer\Repository\RepositoryInterface')); $package->setRepository($this->getMock('Composer\Repository\RepositoryInterface')); } /** * @dataProvider formattedVersions */ public function testFormatVersionForDevPackage(BasePackage $package, $truncate, $expected) { $this->assertSame($expected, $package->getFullPrettyVersion($truncate)); } public function formattedVersions() { $data = array( array( 'sourceReference' => 'v2.1.0-RC2', 'truncate' => true, 'expected' => 'PrettyVersion v2.1.0-RC2', ), array( 'sourceReference' => 'bbf527a27356414bfa9bf520f018c5cb7af67c77', 'truncate' => true, 'expected' => 'PrettyVersion bbf527a', ), array( 'sourceReference' => 'v1.0.0', 'truncate' => false, 'expected' => 'PrettyVersion v1.0.0', ), array( 'sourceReference' => 'bbf527a27356414bfa9bf520f018c5cb7af67c77', 'truncate' => false, 'expected' => 'PrettyVersion bbf527a27356414bfa9bf520f018c5cb7af67c77', ), ); $self = $this; $createPackage = function ($arr) use ($self) { $package = $self->getMockForAbstractClass('\Composer\Package\BasePackage', array(), '', false); $package->expects($self->once())->method('isDev')->will($self->returnValue(true)); $package->expects($self->once())->method('getSourceType')->will($self->returnValue('git')); $package->expects($self->once())->method('getPrettyVersion')->will($self->returnValue('PrettyVersion')); $package->expects($self->any())->method('getSourceReference')->will($self->returnValue($arr['sourceReference'])); return array($package, $arr['truncate'], $arr['expected']); }; return array_map($createPackage, $data); } } composer-1.0.0-beta2/tests/Composer/Test/Package/CompletePackageTest.php000066400000000000000000000063431267577262200261600ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Package; use Composer\Package\Package; use Composer\Semver\VersionParser; use Composer\TestCase; class CompletePackageTest extends TestCase { /** * Memory package naming, versioning, and marshalling semantics provider * * demonstrates several versioning schemes */ public function providerVersioningSchemes() { $provider[] = array('foo', '1-beta'); $provider[] = array('node', '0.5.6'); $provider[] = array('li3', '0.10'); $provider[] = array('mongodb_odm', '1.0.0BETA3'); $provider[] = array('DoctrineCommon', '2.2.0-DEV'); return $provider; } /** * Tests memory package naming semantics * @dataProvider providerVersioningSchemes */ public function testPackageHasExpectedNamingSemantics($name, $version) { $versionParser = new VersionParser(); $normVersion = $versionParser->normalize($version); $package = new Package($name, $normVersion, $version); $this->assertEquals(strtolower($name), $package->getName()); } /** * Tests memory package versioning semantics * @dataProvider providerVersioningSchemes */ public function testPackageHasExpectedVersioningSemantics($name, $version) { $versionParser = new VersionParser(); $normVersion = $versionParser->normalize($version); $package = new Package($name, $normVersion, $version); $this->assertEquals($version, $package->getPrettyVersion()); $this->assertEquals($normVersion, $package->getVersion()); } /** * Tests memory package marshalling/serialization semantics * @dataProvider providerVersioningSchemes */ public function testPackageHasExpectedMarshallingSemantics($name, $version) { $versionParser = new VersionParser(); $normVersion = $versionParser->normalize($version); $package = new Package($name, $normVersion, $version); $this->assertEquals(strtolower($name).'-'.$normVersion, (string) $package); } public function testGetTargetDir() { $package = new Package('a', '1.0.0.0', '1.0'); $this->assertNull($package->getTargetDir()); $package->setTargetDir('./../foo/'); $this->assertEquals('foo/', $package->getTargetDir()); $package->setTargetDir('foo/../../../bar/'); $this->assertEquals('foo/bar/', $package->getTargetDir()); $package->setTargetDir('../..'); $this->assertEquals('', $package->getTargetDir()); $package->setTargetDir('..'); $this->assertEquals('', $package->getTargetDir()); $package->setTargetDir('/..'); $this->assertEquals('', $package->getTargetDir()); $package->setTargetDir('/foo/..'); $this->assertEquals('foo/', $package->getTargetDir()); $package->setTargetDir('/foo/..//bar'); $this->assertEquals('foo/bar', $package->getTargetDir()); } } composer-1.0.0-beta2/tests/Composer/Test/Package/Dumper/000077500000000000000000000000001267577262200230115ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Package/Dumper/ArrayDumperTest.php000066400000000000000000000170231267577262200266200ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Package\Dumper; use Composer\Package\Dumper\ArrayDumper; use Composer\Package\Link; use Composer\Semver\Constraint\Constraint; class ArrayDumperTest extends \PHPUnit_Framework_TestCase { /** * @var ArrayDumper */ private $dumper; /** * @var \Composer\Package\CompletePackageInterface|\PHPUnit_Framework_MockObject_MockObject */ private $package; public function setUp() { $this->dumper = new ArrayDumper(); $this->package = $this->getMock('Composer\Package\CompletePackageInterface'); } public function testRequiredInformation() { $this ->packageExpects('getPrettyName', 'foo') ->packageExpects('getPrettyVersion', '1.0') ->packageExpects('getVersion', '1.0.0.0'); $config = $this->dumper->dump($this->package); $this->assertEquals( array( 'name' => 'foo', 'version' => '1.0', 'version_normalized' => '1.0.0.0', ), $config ); } public function testRootPackage() { $this->package = $this->getMock('Composer\Package\RootPackageInterface'); $this ->packageExpects('getMinimumStability', 'dev'); $config = $this->dumper->dump($this->package); $this->assertSame('dev', $config['minimum-stability']); } public function testDumpAbandoned() { $this->packageExpects('isAbandoned', true); $this->packageExpects('getReplacementPackage', true); $config = $this->dumper->dump($this->package); $this->assertSame(true, $config['abandoned']); } public function testDumpAbandonedReplacement() { $this->packageExpects('isAbandoned', true); $this->packageExpects('getReplacementPackage', 'foo/bar'); $config = $this->dumper->dump($this->package); $this->assertSame('foo/bar', $config['abandoned']); } /** * @dataProvider getKeys */ public function testKeys($key, $value, $method = null, $expectedValue = null) { $this->packageExpects('get'.ucfirst($method ?: $key), $value); $this->packageExpects('isAbandoned', $value); $config = $this->dumper->dump($this->package); $this->assertSame($expectedValue ?: $value, $config[$key]); } public function getKeys() { return array( array( 'type', 'library', ), array( 'time', new \DateTime('2012-02-01'), 'ReleaseDate', '2012-02-01 00:00:00', ), array( 'authors', array('Nils Adermann ', 'Jordi Boggiano '), ), array( 'homepage', 'https://getcomposer.org', ), array( 'description', 'Dependency Manager', ), array( 'keywords', array('package', 'dependency', 'autoload'), null, array('autoload', 'dependency', 'package'), ), array( 'bin', array('bin/composer'), 'binaries', ), array( 'license', array('MIT'), ), array( 'autoload', array('psr-0' => array('Composer' => 'src/')), ), array( 'repositories', array('packagist' => false), ), array( 'scripts', array('post-update-cmd' => 'MyVendor\\MyClass::postUpdate'), ), array( 'extra', array('class' => 'MyVendor\\Installer'), ), array( 'archive', array('/foo/bar', 'baz', '!/foo/bar/baz'), 'archiveExcludes', array( 'exclude' => array('/foo/bar', 'baz', '!/foo/bar/baz'), ), ), array( 'require', array(new Link('foo', 'foo/bar', new Constraint('=', '1.0.0.0'), 'requires', '1.0.0')), 'requires', array('foo/bar' => '1.0.0'), ), array( 'require-dev', array(new Link('foo', 'foo/bar', new Constraint('=', '1.0.0.0'), 'requires (for development)', '1.0.0')), 'devRequires', array('foo/bar' => '1.0.0'), ), array( 'suggest', array('foo/bar' => 'very useful package'), 'suggests', ), array( 'support', array('foo' => 'bar'), ), array( 'require', array(new Link('foo', 'foo/bar', new Constraint('=', '1.0.0.0'), 'requires', '1.0.0'), new Link('bar', 'bar/baz', new Constraint('=', '1.0.0.0'), 'requires', '1.0.0')), 'requires', array('bar/baz' => '1.0.0', 'foo/bar' => '1.0.0'), ), array( 'require-dev', array(new Link('foo', 'foo/bar', new Constraint('=', '1.0.0.0'), 'requires', '1.0.0'), new Link('bar', 'bar/baz', new Constraint('=', '1.0.0.0'), 'requires', '1.0.0')), 'devRequires', array('bar/baz' => '1.0.0', 'foo/bar' => '1.0.0'), ), array( 'suggest', array('foo/bar' => 'very useful package', 'bar/baz' => 'another useful package'), 'suggests', array('bar/baz' => 'another useful package', 'foo/bar' => 'very useful package'), ), array( 'provide', array(new Link('foo', 'foo/bar', new Constraint('=', '1.0.0.0'), 'requires', '1.0.0'), new Link('bar', 'bar/baz', new Constraint('=', '1.0.0.0'), 'requires', '1.0.0')), 'provides', array('bar/baz' => '1.0.0', 'foo/bar' => '1.0.0'), ), array( 'replace', array(new Link('foo', 'foo/bar', new Constraint('=', '1.0.0.0'), 'requires', '1.0.0'), new Link('bar', 'bar/baz', new Constraint('=', '1.0.0.0'), 'requires', '1.0.0')), 'replaces', array('bar/baz' => '1.0.0', 'foo/bar' => '1.0.0'), ), array( 'conflict', array(new Link('foo', 'foo/bar', new Constraint('=', '1.0.0.0'), 'requires', '1.0.0'), new Link('bar', 'bar/baz', new Constraint('=', '1.0.0.0'), 'requires', '1.0.0')), 'conflicts', array('bar/baz' => '1.0.0', 'foo/bar' => '1.0.0'), ), array( 'transport-options', array('ssl' => array('local_cert' => '/opt/certs/test.pem')), 'transportOptions', ), ); } private function packageExpects($method, $value) { $this->package ->expects($this->any()) ->method($method) ->will($this->returnValue($value)); return $this; } } composer-1.0.0-beta2/tests/Composer/Test/Package/Loader/000077500000000000000000000000001267577262200227635ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Package/Loader/ArrayLoaderTest.php000066400000000000000000000170751267577262200265530ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Package\Loader; use Composer\Package\Loader\ArrayLoader; use Composer\Package\Dumper\ArrayDumper; class ArrayLoaderTest extends \PHPUnit_Framework_TestCase { /** * @var ArrayLoader */ private $loader; public function setUp() { $this->loader = new ArrayLoader(null, true); } public function testSelfVersion() { $config = array( 'name' => 'A', 'version' => '1.2.3.4', 'replace' => array( 'foo' => 'self.version', ), ); $package = $this->loader->load($config); $replaces = $package->getReplaces(); $this->assertEquals('== 1.2.3.4', (string) $replaces['foo']->getConstraint()); } public function testTypeDefault() { $config = array( 'name' => 'A', 'version' => '1.0', ); $package = $this->loader->load($config); $this->assertEquals('library', $package->getType()); $config = array( 'name' => 'A', 'version' => '1.0', 'type' => 'foo', ); $package = $this->loader->load($config); $this->assertEquals('foo', $package->getType()); } public function testNormalizedVersionOptimization() { $config = array( 'name' => 'A', 'version' => '1.2.3', ); $package = $this->loader->load($config); $this->assertEquals('1.2.3.0', $package->getVersion()); $config = array( 'name' => 'A', 'version' => '1.2.3', 'version_normalized' => '1.2.3.4', ); $package = $this->loader->load($config); $this->assertEquals('1.2.3.4', $package->getVersion()); } public function testParseDump() { $config = array( 'name' => 'A/B', 'version' => '1.2.3', 'version_normalized' => '1.2.3.0', 'description' => 'Foo bar', 'type' => 'library', 'keywords' => array('a', 'b', 'c'), 'homepage' => 'http://example.com', 'license' => array('MIT', 'GPLv3'), 'authors' => array( array('name' => 'Bob', 'email' => 'bob@example.org', 'homepage' => 'example.org', 'role' => 'Developer'), ), 'require' => array( 'foo/bar' => '1.0', ), 'require-dev' => array( 'foo/baz' => '1.0', ), 'replace' => array( 'foo/qux' => '1.0', ), 'conflict' => array( 'foo/quux' => '1.0', ), 'provide' => array( 'foo/quuux' => '1.0', ), 'autoload' => array( 'psr-0' => array('Ns\Prefix' => 'path'), 'classmap' => array('path', 'path2'), ), 'include-path' => array('path3', 'path4'), 'target-dir' => 'some/prefix', 'extra' => array('random' => array('things' => 'of', 'any' => 'shape')), 'bin' => array('bin1', 'bin/foo'), 'archive' => array( 'exclude' => array('/foo/bar', 'baz', '!/foo/bar/baz'), ), 'transport-options' => array('ssl' => array('local_cert' => '/opt/certs/test.pem')), 'abandoned' => 'foo/bar', ); $package = $this->loader->load($config); $dumper = new ArrayDumper; $this->assertEquals($config, $dumper->dump($package)); } public function testPackageWithBranchAlias() { $config = array( 'name' => 'A', 'version' => 'dev-master', 'extra' => array('branch-alias' => array('dev-master' => '1.0.x-dev')), ); $package = $this->loader->load($config); $this->assertInstanceOf('Composer\Package\AliasPackage', $package); $this->assertEquals('1.0.x-dev', $package->getPrettyVersion()); $config = array( 'name' => 'A', 'version' => 'dev-master', 'extra' => array('branch-alias' => array('dev-master' => '1.0-dev')), ); $package = $this->loader->load($config); $this->assertInstanceOf('Composer\Package\AliasPackage', $package); $this->assertEquals('1.0.x-dev', $package->getPrettyVersion()); $config = array( 'name' => 'B', 'version' => '4.x-dev', 'extra' => array('branch-alias' => array('4.x-dev' => '4.0.x-dev')), ); $package = $this->loader->load($config); $this->assertInstanceOf('Composer\Package\AliasPackage', $package); $this->assertEquals('4.0.x-dev', $package->getPrettyVersion()); $config = array( 'name' => 'B', 'version' => '4.x-dev', 'extra' => array('branch-alias' => array('4.x-dev' => '4.0-dev')), ); $package = $this->loader->load($config); $this->assertInstanceOf('Composer\Package\AliasPackage', $package); $this->assertEquals('4.0.x-dev', $package->getPrettyVersion()); $config = array( 'name' => 'C', 'version' => '4.x-dev', 'extra' => array('branch-alias' => array('4.x-dev' => '3.4.x-dev')), ); $package = $this->loader->load($config); $this->assertInstanceOf('Composer\Package\CompletePackage', $package); $this->assertEquals('4.x-dev', $package->getPrettyVersion()); } public function testAbandoned() { $config = array( 'name' => 'A', 'version' => '1.2.3.4', 'abandoned' => 'foo/bar', ); $package = $this->loader->load($config); $this->assertTrue($package->isAbandoned()); $this->assertEquals('foo/bar', $package->getReplacementPackage()); } public function testNotAbandoned() { $config = array( 'name' => 'A', 'version' => '1.2.3.4', ); $package = $this->loader->load($config); $this->assertFalse($package->isAbandoned()); } public function pluginApiVersions() { return array( array('1.0'), array('1.0.0'), array('1.0.0.0'), array('1'), array('=1.0.0'), array('==1.0'), array('~1.0.0'), array('*'), array('3.0.*'), array('@stable'), array('1.0.0@stable'), array('^5.1'), array('>=1.0.0 <2.5'), array('x'), array('1.0.0-dev'), ); } /** * @dataProvider pluginApiVersions */ public function testPluginApiVersionAreKeptAsDeclared($apiVersion) { $links = $this->loader->parseLinks('Plugin', '9.9.9', '', array('composer-plugin-api' => $apiVersion)); $this->assertArrayHasKey('composer-plugin-api', $links); $this->assertSame($apiVersion, $links['composer-plugin-api']->getConstraint()->getPrettyString()); } public function testPluginApiVersionDoesSupportSelfVersion() { $links = $this->loader->parseLinks('Plugin', '6.6.6', '', array('composer-plugin-api' => 'self.version')); $this->assertArrayHasKey('composer-plugin-api', $links); $this->assertSame('6.6.6', $links['composer-plugin-api']->getConstraint()->getPrettyString()); } } composer-1.0.0-beta2/tests/Composer/Test/Package/Loader/RootPackageLoaderTest.php000066400000000000000000000143201267577262200276620ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Package\Loader; use Composer\Config; use Composer\Package\Loader\RootPackageLoader; use Composer\Package\BasePackage; use Composer\Package\Version\VersionGuesser; use Composer\Semver\VersionParser; class RootPackageLoaderTest extends \PHPUnit_Framework_TestCase { protected function loadPackage($data) { $manager = $this->getMockBuilder('\\Composer\\Repository\\RepositoryManager') ->disableOriginalConstructor() ->getMock(); $config = new Config; $config->merge(array('repositories' => array('packagist' => false))); $loader = new RootPackageLoader($manager, $config); return $loader->load($data); } public function testStabilityFlagsParsing() { $package = $this->loadPackage(array( 'require' => array( 'foo/bar' => '~2.1.0-beta2', 'bar/baz' => '1.0.x-dev as 1.2.0', 'qux/quux' => '1.0.*@rc', 'zux/complex' => '~1.0,>=1.0.2@dev', 'or/op' => '^2.0@dev || ^2.0@dev', 'multi/lowest-wins' => '^2.0@rc || >=3.0@dev , ~3.5@alpha', ), 'minimum-stability' => 'alpha', )); $this->assertEquals('alpha', $package->getMinimumStability()); $this->assertEquals(array( 'bar/baz' => BasePackage::STABILITY_DEV, 'qux/quux' => BasePackage::STABILITY_RC, 'zux/complex' => BasePackage::STABILITY_DEV, 'or/op' => BasePackage::STABILITY_DEV, 'multi/lowest-wins' => BasePackage::STABILITY_DEV, ), $package->getStabilityFlags()); } public function testNoVersionIsVisibleInPrettyVersion() { $manager = $this->getMockBuilder('\\Composer\\Repository\\RepositoryManager') ->disableOriginalConstructor() ->getMock() ; $executor = $this->getMockBuilder('\\Composer\\Util\\ProcessExecutor') ->setMethods(array('execute')) ->disableArgumentCloning() ->disableOriginalConstructor() ->getMock() ; $executor ->expects($this->any()) ->method('execute') ->willReturn(null) ; $config = new Config; $config->merge(array('repositories' => array('packagist' => false))); $loader = new RootPackageLoader($manager, $config, null, new VersionGuesser($config, $executor, new VersionParser())); $package = $loader->load(array()); $this->assertEquals("1.0.0.0", $package->getVersion()); $this->assertEquals("No version set (parsed as 1.0.0)", $package->getPrettyVersion()); } public function testFeatureBranchPrettyVersion() { if (!function_exists('proc_open')) { $this->markTestSkipped('proc_open() is not available'); } $manager = $this->getMockBuilder('\\Composer\\Repository\\RepositoryManager') ->disableOriginalConstructor() ->getMock() ; $executor = $this->getMockBuilder('\\Composer\\Util\\ProcessExecutor') ->setMethods(array('execute')) ->disableArgumentCloning() ->disableOriginalConstructor() ->getMock() ; $self = $this; $executor ->expects($this->at(0)) ->method('execute') ->willReturnCallback(function ($command, &$output) use ($self) { $self->assertEquals('git branch --no-color --no-abbrev -v', $command); $output = "* latest-production 38137d2f6c70e775e137b2d8a7a7d3eaebf7c7e5 Commit message\n master 4f6ed96b0bc363d2aa4404c3412de1c011f67c66 Commit message\n"; return 0; }) ; $executor ->expects($this->at(1)) ->method('execute') ->willReturnCallback(function ($command, &$output) use ($self) { $self->assertEquals('git rev-list master..latest-production', $command); $output = ""; return 0; }) ; $config = new Config; $config->merge(array('repositories' => array('packagist' => false))); $loader = new RootPackageLoader($manager, $config, null, new VersionGuesser($config, $executor, new VersionParser())); $package = $loader->load(array('require' => array('foo/bar' => 'self.version'))); $this->assertEquals("dev-master", $package->getPrettyVersion()); } public function testNonFeatureBranchPrettyVersion() { if (!function_exists('proc_open')) { $this->markTestSkipped('proc_open() is not available'); } $manager = $this->getMockBuilder('\\Composer\\Repository\\RepositoryManager') ->disableOriginalConstructor() ->getMock() ; $executor = $this->getMockBuilder('\\Composer\\Util\\ProcessExecutor') ->setMethods(array('execute')) ->disableArgumentCloning() ->disableOriginalConstructor() ->getMock() ; $self = $this; $executor ->expects($this->at(0)) ->method('execute') ->willReturnCallback(function ($command, &$output) use ($self) { $self->assertEquals('git branch --no-color --no-abbrev -v', $command); $output = "* latest-production 38137d2f6c70e775e137b2d8a7a7d3eaebf7c7e5 Commit message\n master 4f6ed96b0bc363d2aa4404c3412de1c011f67c66 Commit message\n"; return 0; }) ; $config = new Config; $config->merge(array('repositories' => array('packagist' => false))); $loader = new RootPackageLoader($manager, $config, null, new VersionGuesser($config, $executor, new VersionParser())); $package = $loader->load(array('require' => array('foo/bar' => 'self.version'), "non-feature-branches" => array("latest-.*"))); $this->assertEquals("dev-latest-production", $package->getPrettyVersion()); } } composer-1.0.0-beta2/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php000066400000000000000000000307161267577262200305530ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Package\Loader; use Composer\Package\Loader\ValidatingArrayLoader; use Composer\Package\Loader\InvalidPackageException; class ValidatingArrayLoaderTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider successProvider */ public function testLoadSuccess($config) { $internalLoader = $this->getMock('Composer\Package\Loader\LoaderInterface'); $internalLoader ->expects($this->once()) ->method('load') ->with($config); $loader = new ValidatingArrayLoader($internalLoader, true, null, ValidatingArrayLoader::CHECK_ALL); $loader->load($config); } public function successProvider() { return array( array( // minimal array( 'name' => 'foo/bar', ), ), array( // complete array( 'name' => 'foo/bar', 'description' => 'Foo bar', 'version' => '1.0.0', 'type' => 'library', 'keywords' => array('a', 'b_c', 'D E', 'éîüø', '微信'), 'homepage' => 'https://foo.com', 'time' => '2010-10-10T10:10:10+00:00', 'license' => 'MIT', 'authors' => array( array( 'name' => 'Alice', 'email' => 'alice@example.org', 'role' => 'Lead', 'homepage' => 'http://example.org', ), array( 'name' => 'Bob', 'homepage' => '', ), ), 'support' => array( 'email' => 'mail@example.org', 'issues' => 'http://example.org/', 'forum' => 'http://example.org/', 'wiki' => 'http://example.org/', 'source' => 'http://example.org/', 'irc' => 'irc://example.org/example', ), 'require' => array( 'a/b' => '1.*', 'b/c' => '~2', 'example' => '>2.0-dev,<2.4-dev', ), 'require-dev' => array( 'a/b' => '1.*', 'b/c' => '*', 'example' => '>2.0-dev,<2.4-dev', ), 'conflict' => array( 'a/b' => '1.*', 'b/c' => '>2.7', 'example' => '>2.0-dev,<2.4-dev', ), 'replace' => array( 'a/b' => '1.*', 'example' => '>2.0-dev,<2.4-dev', ), 'provide' => array( 'a/b' => '1.*', 'example' => '>2.0-dev,<2.4-dev', ), 'suggest' => array( 'foo/bar' => 'Foo bar is very useful', ), 'autoload' => array( 'psr-0' => array( 'Foo\\Bar' => 'src/', '' => 'fallback/libs/', ), 'classmap' => array( 'dir/', 'dir2/file.php', ), 'files' => array( 'functions.php', ), ), 'include-path' => array( 'lib/', ), 'target-dir' => 'Foo/Bar', 'minimum-stability' => 'dev', 'repositories' => array( array( 'type' => 'composer', 'url' => 'https://packagist.org/', ), ), 'config' => array( 'bin-dir' => 'bin', 'vendor-dir' => 'vendor', 'process-timeout' => 10000, ), 'archive' => array( 'exclude' => array('/foo/bar', 'baz', '!/foo/bar/baz'), ), 'scripts' => array( 'post-update-cmd' => 'Foo\\Bar\\Baz::doSomething', 'post-install-cmd' => array( 'Foo\\Bar\\Baz::doSomething', ), ), 'extra' => array( 'random' => array('stuff' => array('deeply' => 'nested')), 'branch-alias' => array( 'dev-master' => '2.0-dev', 'dev-old' => '1.0.x-dev', '3.x-dev' => '3.1.x-dev', ), ), 'bin' => array( 'bin/foo', 'bin/bar', ), 'transport-options' => array('ssl' => array('local_cert' => '/opt/certs/test.pem')), ), ), array( // test as array array( 'name' => 'foo/bar', 'license' => array('MIT', 'WTFPL'), ), ), ); } /** * @dataProvider errorProvider */ public function testLoadFailureThrowsException($config, $expectedErrors) { $internalLoader = $this->getMock('Composer\Package\Loader\LoaderInterface'); $loader = new ValidatingArrayLoader($internalLoader, true, null, ValidatingArrayLoader::CHECK_ALL); try { $loader->load($config); $this->fail('Expected exception to be thrown'); } catch (InvalidPackageException $e) { $errors = $e->getErrors(); sort($expectedErrors); sort($errors); $this->assertEquals($expectedErrors, $errors); } } /** * @dataProvider warningProvider */ public function testLoadWarnings($config, $expectedWarnings) { $internalLoader = $this->getMock('Composer\Package\Loader\LoaderInterface'); $loader = new ValidatingArrayLoader($internalLoader, true, null, ValidatingArrayLoader::CHECK_ALL); $loader->load($config); $warnings = $loader->getWarnings(); sort($expectedWarnings); sort($warnings); $this->assertEquals($expectedWarnings, $warnings); } /** * @dataProvider warningProvider */ public function testLoadSkipsWarningDataWhenIgnoringErrors($config, $expectedWarnings, $mustCheck = true) { if (!$mustCheck) { $this->assertTrue(true); return; } $internalLoader = $this->getMock('Composer\Package\Loader\LoaderInterface'); $internalLoader ->expects($this->once()) ->method('load') ->with(array('name' => 'a/b')); $loader = new ValidatingArrayLoader($internalLoader, true, null, ValidatingArrayLoader::CHECK_ALL); $config['name'] = 'a/b'; $loader->load($config); } public function errorProvider() { return array( array( array( 'name' => 'foo', ), array( 'name : invalid value (foo), must match [A-Za-z0-9][A-Za-z0-9_.-]*/[A-Za-z0-9][A-Za-z0-9_.-]*', ), ), array( array( 'name' => 'foo/bar', 'homepage' => 43, ), array( 'homepage : should be a string, integer given', ), ), array( array( 'name' => 'foo/bar', 'support' => array( 'source' => array(), ), ), array( 'support.source : invalid value, must be a string', ), ), array( array( 'name' => 'foo/bar', 'autoload' => 'strings', ), array( 'autoload : should be an array, string given', ), ), array( array( 'name' => 'foo/bar', 'autoload' => array( 'psr0' => array( 'foo' => 'src', ), ), ), array( 'autoload : invalid value (psr0), must be one of psr-0, psr-4, classmap, files, exclude-from-classmap', ), ), array( array( 'name' => 'foo/bar', 'transport-options' => 'test', ), array( 'transport-options : should be an array, string given', ), ), ); } public function warningProvider() { return array( array( array( 'name' => 'foo/bar', 'homepage' => 'foo:bar', ), array( 'homepage : invalid value (foo:bar), must be an http/https URL', ), ), array( array( 'name' => 'foo/bar', 'support' => array( 'source' => 'foo:bar', 'forum' => 'foo:bar', 'issues' => 'foo:bar', 'wiki' => 'foo:bar', ), ), array( 'support.source : invalid value (foo:bar), must be an http/https URL', 'support.forum : invalid value (foo:bar), must be an http/https URL', 'support.issues : invalid value (foo:bar), must be an http/https URL', 'support.wiki : invalid value (foo:bar), must be an http/https URL', ), ), array( array( 'name' => 'foo/bar', 'require' => array( 'foo/baz' => '*', 'bar/baz' => '>=1.0', 'bar/foo' => 'dev-master', 'bar/hacked' => '@stable', ), ), array( 'require.foo/baz : unbound version constraints (*) should be avoided', 'require.bar/baz : unbound version constraints (>=1.0) should be avoided', 'require.bar/foo : unbound version constraints (dev-master) should be avoided', 'require.bar/hacked : unbound version constraints (@stable) should be avoided', ), false, ), array( array( 'name' => 'foo/bar', 'extra' => array( 'branch-alias' => array( '5.x-dev' => '3.1.x-dev', ), ), ), array( 'extra.branch-alias.5.x-dev : the target branch (3.1.x-dev) is not a valid numeric alias for this version', ), false, ), array( array( 'name' => 'foo/bar', 'extra' => array( 'branch-alias' => array( '5.x-dev' => '3.1-dev', ), ), ), array( 'extra.branch-alias.5.x-dev : the target branch (3.1-dev) is not a valid numeric alias for this version', ), false, ), ); } } composer-1.0.0-beta2/tests/Composer/Test/Package/LockerTest.php000066400000000000000000000223201267577262200243440ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Package; use Composer\Package\Locker; use Composer\IO\NullIO; class LockerTest extends \PHPUnit_Framework_TestCase { public function testIsLocked() { $json = $this->createJsonFileMock(); $locker = new Locker(new NullIO, $json, $this->createRepositoryManagerMock(), $this->createInstallationManagerMock(), $this->getJsonContent()); $json ->expects($this->any()) ->method('exists') ->will($this->returnValue(true)); $json ->expects($this->any()) ->method('read') ->will($this->returnValue(array('packages' => array()))); $this->assertTrue($locker->isLocked()); } public function testGetNotLockedPackages() { $json = $this->createJsonFileMock(); $repo = $this->createRepositoryManagerMock(); $inst = $this->createInstallationManagerMock(); $locker = new Locker(new NullIO, $json, $repo, $inst, $this->getJsonContent()); $json ->expects($this->once()) ->method('exists') ->will($this->returnValue(false)); $this->setExpectedException('LogicException'); $locker->getLockedRepository(); } public function testGetLockedPackages() { $json = $this->createJsonFileMock(); $repo = $this->createRepositoryManagerMock(); $inst = $this->createInstallationManagerMock(); $locker = new Locker(new NullIO, $json, $repo, $inst, $this->getJsonContent()); $json ->expects($this->once()) ->method('exists') ->will($this->returnValue(true)); $json ->expects($this->once()) ->method('read') ->will($this->returnValue(array( 'packages' => array( array('name' => 'pkg1', 'version' => '1.0.0-beta'), array('name' => 'pkg2', 'version' => '0.1.10'), ), ))); $repo = $locker->getLockedRepository(); $this->assertNotNull($repo->findPackage('pkg1', '1.0.0-beta')); $this->assertNotNull($repo->findPackage('pkg2', '0.1.10')); } public function testSetLockData() { $json = $this->createJsonFileMock(); $repo = $this->createRepositoryManagerMock(); $inst = $this->createInstallationManagerMock(); $jsonContent = $this->getJsonContent() . ' '; $locker = new Locker(new NullIO, $json, $repo, $inst, $jsonContent); $package1 = $this->createPackageMock(); $package2 = $this->createPackageMock(); $package1 ->expects($this->atLeastOnce()) ->method('getPrettyName') ->will($this->returnValue('pkg1')); $package1 ->expects($this->atLeastOnce()) ->method('getPrettyVersion') ->will($this->returnValue('1.0.0-beta')); $package1 ->expects($this->atLeastOnce()) ->method('getVersion') ->will($this->returnValue('1.0.0.0-beta')); $package2 ->expects($this->atLeastOnce()) ->method('getPrettyName') ->will($this->returnValue('pkg2')); $package2 ->expects($this->atLeastOnce()) ->method('getPrettyVersion') ->will($this->returnValue('0.1.10')); $package2 ->expects($this->atLeastOnce()) ->method('getVersion') ->will($this->returnValue('0.1.10.0')); $hash = md5($jsonContent); $contentHash = md5(trim($jsonContent)); $json ->expects($this->once()) ->method('write') ->with(array( '_readme' => array('This file locks the dependencies of your project to a known state', 'Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file', 'This file is @gener'.'ated automatically', ), 'hash' => $hash, 'content-hash' => $contentHash, 'packages' => array( array('name' => 'pkg1', 'version' => '1.0.0-beta'), array('name' => 'pkg2', 'version' => '0.1.10'), ), 'packages-dev' => array(), 'aliases' => array(), 'minimum-stability' => 'dev', 'stability-flags' => array(), 'platform' => array(), 'platform-dev' => array(), 'platform-overrides' => array('foo/bar' => '1.0'), 'prefer-stable' => false, 'prefer-lowest' => false, )); $locker->setLockData(array($package1, $package2), array(), array(), array(), array(), 'dev', array(), false, false, array('foo/bar' => '1.0')); } public function testLockBadPackages() { $json = $this->createJsonFileMock(); $repo = $this->createRepositoryManagerMock(); $inst = $this->createInstallationManagerMock(); $locker = new Locker(new NullIO, $json, $repo, $inst, $this->getJsonContent()); $package1 = $this->createPackageMock(); $package1 ->expects($this->once()) ->method('getPrettyName') ->will($this->returnValue('pkg1')); $this->setExpectedException('LogicException'); $locker->setLockData(array($package1), array(), array(), array(), array(), 'dev', array(), false, false, array()); } public function testIsFresh() { $json = $this->createJsonFileMock(); $repo = $this->createRepositoryManagerMock(); $inst = $this->createInstallationManagerMock(); $jsonContent = $this->getJsonContent(); $locker = new Locker(new NullIO, $json, $repo, $inst, $jsonContent); $json ->expects($this->once()) ->method('read') ->will($this->returnValue(array('hash' => md5($jsonContent)))); $this->assertTrue($locker->isFresh()); } public function testIsFreshFalse() { $json = $this->createJsonFileMock(); $repo = $this->createRepositoryManagerMock(); $inst = $this->createInstallationManagerMock(); $locker = new Locker(new NullIO, $json, $repo, $inst, $this->getJsonContent()); $json ->expects($this->once()) ->method('read') ->will($this->returnValue(array('hash' => $this->getJsonContent(array('name' => 'test2'))))); $this->assertFalse($locker->isFresh()); } public function testIsFreshWithContentHash() { $json = $this->createJsonFileMock(); $repo = $this->createRepositoryManagerMock(); $inst = $this->createInstallationManagerMock(); $jsonContent = $this->getJsonContent(); $locker = new Locker(new NullIO, $json, $repo, $inst, $jsonContent); $json ->expects($this->once()) ->method('read') ->will($this->returnValue(array('hash' => md5($jsonContent . ' '), 'content-hash' => md5($jsonContent)))); $this->assertTrue($locker->isFresh()); } public function testIsFreshFalseWithContentHash() { $json = $this->createJsonFileMock(); $repo = $this->createRepositoryManagerMock(); $inst = $this->createInstallationManagerMock(); $locker = new Locker(new NullIO, $json, $repo, $inst, $this->getJsonContent()); $differentHash = md5($this->getJsonContent(array('name' => 'test2'))); $json ->expects($this->once()) ->method('read') ->will($this->returnValue(array('hash' => $differentHash, 'content-hash' => $differentHash))); $this->assertFalse($locker->isFresh()); } private function createJsonFileMock() { return $this->getMockBuilder('Composer\Json\JsonFile') ->disableOriginalConstructor() ->getMock(); } private function createRepositoryManagerMock() { $mock = $this->getMockBuilder('Composer\Repository\RepositoryManager') ->disableOriginalConstructor() ->getMock(); $mock->expects($this->any()) ->method('getLocalRepository') ->will($this->returnValue($this->getMockBuilder('Composer\Repository\ArrayRepository')->getMock())); return $mock; } private function createInstallationManagerMock() { $mock = $this->getMockBuilder('Composer\Installer\InstallationManager') ->disableOriginalConstructor() ->getMock(); return $mock; } private function createPackageMock() { return $this->getMockBuilder('Composer\Package\PackageInterface') ->getMock(); } private function getJsonContent(array $customData = array()) { $data = array_merge(array( 'minimum-stability' => 'beta', 'name' => 'test', ), $customData); ksort($data); return json_encode($data); } } composer-1.0.0-beta2/tests/Composer/Test/Package/RootAliasPackageTest.php000066400000000000000000000065371267577262200263120ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Package; use Composer\Package\Link; use Composer\Package\RootAliasPackage; use Composer\TestCase; use Prophecy\Argument; class RootAliasPackageTest extends TestCase { public function testUpdateRequires() { $root = $this->getMockRootPackageInterface(); $root->setRequires(Argument::type('array'))->shouldBeCalled(); $alias = new RootAliasPackage($root->reveal(), '1.0', '1.0.0.0'); $this->assertEmpty($alias->getRequires()); $links = array(new Link('a', 'b', null, 'foo', 'self.version')); $alias->setRequires($links); $this->assertNotEmpty($alias->getRequires()); } public function testUpdateDevRequires() { $root = $this->getMockRootPackageInterface(); $root->setDevRequires(Argument::type('array'))->shouldBeCalled(); $alias = new RootAliasPackage($root->reveal(), '1.0', '1.0.0.0'); $this->assertEmpty($alias->getDevRequires()); $links = array(new Link('a', 'b', null, 'foo', 'self.version')); $alias->setDevRequires($links); $this->assertNotEmpty($alias->getDevRequires()); } public function testUpdateConflicts() { $root = $this->getMockRootPackageInterface(); $root->setConflicts(Argument::type('array'))->shouldBeCalled(); $alias = new RootAliasPackage($root->reveal(), '1.0', '1.0.0.0'); $this->assertEmpty($alias->getConflicts()); $links = array(new Link('a', 'b', null, 'foo', 'self.version')); $alias->setConflicts($links); $this->assertNotEmpty($alias->getConflicts()); } public function testUpdateProvides() { $root = $this->getMockRootPackageInterface(); $root->setProvides(Argument::type('array'))->shouldBeCalled(); $alias = new RootAliasPackage($root->reveal(), '1.0', '1.0.0.0'); $this->assertEmpty($alias->getProvides()); $links = array(new Link('a', 'b', null, 'foo', 'self.version')); $alias->setProvides($links); $this->assertNotEmpty($alias->getProvides()); } public function testUpdateReplaces() { $root = $this->getMockRootPackageInterface(); $root->setReplaces(Argument::type('array'))->shouldBeCalled(); $alias = new RootAliasPackage($root->reveal(), '1.0', '1.0.0.0'); $this->assertEmpty($alias->getReplaces()); $links = array(new Link('a', 'b', null, 'foo', 'self.version')); $alias->setReplaces($links); $this->assertNotEmpty($alias->getReplaces()); } protected function getMockRootPackageInterface() { $root = $this->prophesize('Composer\\Package\\RootPackageInterface'); $root->getName()->willReturn('something/something')->shouldBeCalled(); $root->getRequires()->willReturn(array())->shouldBeCalled(); $root->getDevRequires()->willReturn(array())->shouldBeCalled(); $root->getConflicts()->willReturn(array())->shouldBeCalled(); $root->getProvides()->willReturn(array())->shouldBeCalled(); $root->getReplaces()->willReturn(array())->shouldBeCalled(); return $root; } } composer-1.0.0-beta2/tests/Composer/Test/Package/Version/000077500000000000000000000000001267577262200232025ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Package/Version/VersionGuesserTest.php000066400000000000000000000126371267577262200275470ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Package\Version; use Composer\Config; use Composer\Package\Version\VersionGuesser; use Composer\Semver\VersionParser; class VersionGuesserTest extends \PHPUnit_Framework_TestCase { public function setUp() { if (!function_exists('proc_open')) { $this->markTestSkipped('proc_open() is not available'); } } public function testGuessVersionReturnsData() { $commitHash = '03a15d220da53c52eddd5f32ffca64a7b3801bea'; $anotherCommitHash = '03a15d220da53c52eddd5f32ffca64a7b3801bea'; $executor = $this->getMockBuilder('\\Composer\\Util\\ProcessExecutor') ->setMethods(array('execute')) ->disableArgumentCloning() ->disableOriginalConstructor() ->getMock() ; $self = $this; $executor ->expects($this->at(0)) ->method('execute') ->willReturnCallback(function ($command, &$output) use ($self, $commitHash, $anotherCommitHash) { $self->assertEquals('git branch --no-color --no-abbrev -v', $command); $output = "* master $commitHash Commit message\n(no branch) $anotherCommitHash Commit message\n"; return 0; }) ; $config = new Config; $config->merge(array('repositories' => array('packagist' => false))); $guesser = new VersionGuesser($config, $executor, new VersionParser()); $versionArray = $guesser->guessVersion(array(), 'dummy/path'); $this->assertEquals("dev-master", $versionArray['version']); $this->assertEquals($commitHash, $versionArray['commit']); } public function testDetachedHeadBecomesDevHash() { $commitHash = '03a15d220da53c52eddd5f32ffca64a7b3801bea'; $executor = $this->getMockBuilder('\\Composer\\Util\\ProcessExecutor') ->setMethods(array('execute')) ->disableArgumentCloning() ->disableOriginalConstructor() ->getMock() ; $self = $this; $executor ->expects($this->at(0)) ->method('execute') ->willReturnCallback(function ($command, &$output) use ($self, $commitHash) { $self->assertEquals('git branch --no-color --no-abbrev -v', $command); $output = "* (no branch) $commitHash Commit message\n"; return 0; }) ; $config = new Config; $config->merge(array('repositories' => array('packagist' => false))); $guesser = new VersionGuesser($config, $executor, new VersionParser()); $versionData = $guesser->guessVersion(array(), 'dummy/path'); $this->assertEquals("dev-$commitHash", $versionData['version']); } public function testTagBecomesVersion() { $executor = $this->getMockBuilder('\\Composer\\Util\\ProcessExecutor') ->setMethods(array('execute')) ->disableArgumentCloning() ->disableOriginalConstructor() ->getMock() ; $self = $this; $executor ->expects($this->at(0)) ->method('execute') ->willReturnCallback(function ($command, &$output) use ($self) { $self->assertEquals('git branch --no-color --no-abbrev -v', $command); $output = "* (HEAD detached at v2.0.5-alpha2) 433b98d4218c181bae01865901aac045585e8a1a Commit message\n"; return 0; }) ; $executor ->expects($this->at(1)) ->method('execute') ->willReturnCallback(function ($command, &$output) use ($self) { $self->assertEquals('git describe --exact-match --tags', $command); $output = "v2.0.5-alpha2"; return 0; }) ; $config = new Config; $config->merge(array('repositories' => array('packagist' => false))); $guesser = new VersionGuesser($config, $executor, new VersionParser()); $versionData = $guesser->guessVersion(array(), 'dummy/path'); $this->assertEquals("2.0.5.0-alpha2", $versionData['version']); } public function testInvalidTagBecomesVersion() { $executor = $this->getMockBuilder('\\Composer\\Util\\ProcessExecutor') ->setMethods(array('execute')) ->disableArgumentCloning() ->disableOriginalConstructor() ->getMock() ; $self = $this; $executor ->expects($this->at(0)) ->method('execute') ->willReturnCallback(function ($command, &$output) use ($self) { $self->assertEquals('git branch --no-color --no-abbrev -v', $command); $output = "* foo 03a15d220da53c52eddd5f32ffca64a7b3801bea Commit message\n"; return 0; }) ; $config = new Config; $config->merge(array('repositories' => array('packagist' => false))); $guesser = new VersionGuesser($config, $executor, new VersionParser()); $versionData = $guesser->guessVersion(array(), 'dummy/path'); $this->assertEquals("dev-foo", $versionData['version']); } } composer-1.0.0-beta2/tests/Composer/Test/Package/Version/VersionSelectorTest.php000066400000000000000000000211131267577262200276770ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Package\Version; use Composer\Package\Version\VersionSelector; use Composer\Package\Package; use Composer\Package\Link; use Composer\Semver\VersionParser; class VersionSelectorTest extends \PHPUnit_Framework_TestCase { // A) multiple versions, get the latest one // B) targetPackageVersion will pass to pool // C) No results, throw exception public function testLatestVersionIsReturned() { $packageName = 'foobar'; $package1 = $this->createPackage('1.2.1'); $package2 = $this->createPackage('1.2.2'); $package3 = $this->createPackage('1.2.0'); $packages = array($package1, $package2, $package3); $pool = $this->createMockPool(); $pool->expects($this->once()) ->method('whatProvides') ->with($packageName, null, true) ->will($this->returnValue($packages)); $versionSelector = new VersionSelector($pool); $best = $versionSelector->findBestCandidate($packageName); // 1.2.2 should be returned because it's the latest of the returned versions $this->assertSame($package2, $best, 'Latest version should be 1.2.2'); } public function testLatestVersionIsReturnedThatMatchesPhpRequirement() { $packageName = 'foobar'; $parser = new VersionParser; $package1 = $this->createPackage('1.0.0'); $package2 = $this->createPackage('2.0.0'); $package1->setRequires(array('php' => new Link($packageName, 'php', $parser->parseConstraints('>=5.4'), 'requires', '>=5.4'))); $package2->setRequires(array('php' => new Link($packageName, 'php', $parser->parseConstraints('>=5.6'), 'requires', '>=5.6'))); $packages = array($package1, $package2); $pool = $this->createMockPool(); $pool->expects($this->once()) ->method('whatProvides') ->with($packageName, null, true) ->will($this->returnValue($packages)); $versionSelector = new VersionSelector($pool); $best = $versionSelector->findBestCandidate($packageName, null, '5.5.0'); $this->assertSame($package1, $best, 'Latest version supporting php 5.5 should be returned (1.0.0)'); } public function testMostStableVersionIsReturned() { $packageName = 'foobar'; $package1 = $this->createPackage('1.0.0'); $package2 = $this->createPackage('1.1.0-beta'); $packages = array($package1, $package2); $pool = $this->createMockPool(); $pool->expects($this->once()) ->method('whatProvides') ->with($packageName, null, true) ->will($this->returnValue($packages)); $versionSelector = new VersionSelector($pool); $best = $versionSelector->findBestCandidate($packageName); $this->assertSame($package1, $best, 'Latest most stable version should be returned (1.0.0)'); } public function testHighestVersionIsReturned() { $packageName = 'foobar'; $package1 = $this->createPackage('1.0.0'); $package2 = $this->createPackage('1.1.0-beta'); $packages = array($package1, $package2); $pool = $this->createMockPool(); $pool->expects($this->once()) ->method('whatProvides') ->with($packageName, null, true) ->will($this->returnValue($packages)); $versionSelector = new VersionSelector($pool); $best = $versionSelector->findBestCandidate($packageName, null, null, 'dev'); $this->assertSame($package2, $best, 'Latest version should be returned (1.1.0-beta)'); } public function testHighestVersionMatchingStabilityIsReturned() { $packageName = 'foobar'; $package1 = $this->createPackage('1.0.0'); $package2 = $this->createPackage('1.1.0-beta'); $package3 = $this->createPackage('1.2.0-alpha'); $packages = array($package1, $package2, $package3); $pool = $this->createMockPool(); $pool->expects($this->once()) ->method('whatProvides') ->with($packageName, null, true) ->will($this->returnValue($packages)); $versionSelector = new VersionSelector($pool); $best = $versionSelector->findBestCandidate($packageName, null, null, 'beta'); $this->assertSame($package2, $best, 'Latest version should be returned (1.1.0-beta)'); } public function testFalseReturnedOnNoPackages() { $pool = $this->createMockPool(); $pool->expects($this->once()) ->method('whatProvides') ->will($this->returnValue(array())); $versionSelector = new VersionSelector($pool); $best = $versionSelector->findBestCandidate('foobaz'); $this->assertFalse($best, 'No versions are available returns false'); } /** * @dataProvider getRecommendedRequireVersionPackages */ public function testFindRecommendedRequireVersion($prettyVersion, $isDev, $stability, $expectedVersion, $branchAlias = null) { $pool = $this->createMockPool(); $versionSelector = new VersionSelector($pool); $versionParser = new VersionParser(); $package = $this->getMock('\Composer\Package\PackageInterface'); $package->expects($this->any()) ->method('getPrettyVersion') ->will($this->returnValue($prettyVersion)); $package->expects($this->any()) ->method('getVersion') ->will($this->returnValue($versionParser->normalize($prettyVersion))); $package->expects($this->any()) ->method('isDev') ->will($this->returnValue($isDev)); $package->expects($this->any()) ->method('getStability') ->will($this->returnValue($stability)); $branchAlias = $branchAlias === null ? array() : array('branch-alias' => array($prettyVersion => $branchAlias)); $package->expects($this->any()) ->method('getExtra') ->will($this->returnValue($branchAlias)); $recommended = $versionSelector->findRecommendedRequireVersion($package); // assert that the recommended version is what we expect $this->assertSame($expectedVersion, $recommended); } public function getRecommendedRequireVersionPackages() { return array( // real version, is dev package, stability, expected recommendation, [branch-alias] array('1.2.1', false, 'stable', '^1.2'), array('1.2', false, 'stable', '^1.2'), array('v1.2.1', false, 'stable', '^1.2'), array('3.1.2-pl2', false, 'stable', '^3.1'), array('3.1.2-patch', false, 'stable', '^3.1'), array('2.0-beta.1', false, 'beta', '^2.0@beta'), array('3.1.2-alpha5', false, 'alpha', '^3.1@alpha'), array('3.0-RC2', false, 'RC', '^3.0@RC'), array('0.1.0', false, 'stable', '^0.1.0'), array('0.1.3', false, 'stable', '^0.1.3'), array('0.0.3', false, 'stable', '^0.0.3'), array('0.0.3-alpha', false, 'alpha', '^0.0.3@alpha'), // date-based versions are not touched at all array('v20121020', false, 'stable', 'v20121020'), array('v20121020.2', false, 'stable', 'v20121020.2'), // dev packages without alias are not touched at all array('dev-master', true, 'dev', 'dev-master'), array('3.1.2-dev', true, 'dev', '3.1.2-dev'), // dev packages with alias inherit the alias array('dev-master', true, 'dev', '^2.1@dev', '2.1.x-dev'), array('dev-master', true, 'dev', '^2.1@dev', '2.1-dev'), array('dev-master', true, 'dev', '^2.1@dev', '2.1.3.x-dev'), array('dev-master', true, 'dev', '^2.0@dev', '2.x-dev'), array('dev-master', true, 'dev', '^0.3.0@dev', '0.3.x-dev'), array('dev-master', true, 'dev', '^0.0.3@dev', '0.0.3.x-dev'), // numeric alias array('3.x-dev', true, 'dev', '^3.0@dev', '3.0.x-dev'), array('3.x-dev', true, 'dev', '^3.0@dev', '3.0-dev'), ); } private function createPackage($version) { $parser = new VersionParser(); return new Package('foo', $parser->normalize($version), $version); } private function createMockPool() { return $this->getMock('Composer\DependencyResolver\Pool', array(), array(), '', true); } } composer-1.0.0-beta2/tests/Composer/Test/Plugin/000077500000000000000000000000001267577262200214605ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Plugin/Fixtures/000077500000000000000000000000001267577262200232715ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Plugin/Fixtures/plugin-v1/000077500000000000000000000000001267577262200251135ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Plugin/Fixtures/plugin-v1/Installer/000077500000000000000000000000001267577262200270505ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Plugin/Fixtures/plugin-v1/Installer/Plugin.php000066400000000000000000000004301267577262200310140ustar00rootroot00000000000000=3.0.0 <5.5" } } composer-1.0.0-beta2/tests/Composer/Test/Plugin/Mock/000077500000000000000000000000001267577262200223515ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Plugin/Mock/Capability.php000066400000000000000000000007431267577262200251470ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Plugin\Mock; class Capability implements \Composer\Plugin\Capability\Capability { public $args; public function __construct(array $args) { $this->args = $args; } } composer-1.0.0-beta2/tests/Composer/Test/Plugin/Mock/CapablePluginInterface.php000066400000000000000000000006741267577262200274200ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Plugin\Mock; use Composer\Plugin\Capable; use Composer\Plugin\PluginInterface; interface CapablePluginInterface extends PluginInterface, Capable { } composer-1.0.0-beta2/tests/Composer/Test/Plugin/PluginInstallerTest.php000066400000000000000000000327051267577262200261540ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Installer; use Composer\Composer; use Composer\Config; use Composer\Installer\PluginInstaller; use Composer\Package\CompletePackage; use Composer\Package\Loader\JsonLoader; use Composer\Package\Loader\ArrayLoader; use Composer\Plugin\PluginManager; use Composer\Autoload\AutoloadGenerator; use Composer\TestCase; use Composer\Util\Filesystem; class PluginInstallerTest extends TestCase { /** * @var Composer */ protected $composer; /** * @var PluginManager */ protected $pm; /** * @var AutoloadGenerator */ protected $autoloadGenerator; /** * @var CompletePackage[] */ protected $packages; /** * @var string */ protected $directory; /** * @var \PHPUnit_Framework_MockObject_MockObject */ protected $im; /** * @var \PHPUnit_Framework_MockObject_MockObject */ protected $repository; /** * @var \PHPUnit_Framework_MockObject_MockObject */ protected $io; protected function setUp() { $loader = new JsonLoader(new ArrayLoader()); $this->packages = array(); $this->directory = $this->getUniqueTmpDirectory(); for ($i = 1; $i <= 7; $i++) { $filename = '/Fixtures/plugin-v'.$i.'/composer.json'; mkdir(dirname($this->directory . $filename), 0777, true); $this->packages[] = $loader->load(__DIR__ . $filename); } $dm = $this->getMockBuilder('Composer\Downloader\DownloadManager') ->disableOriginalConstructor() ->getMock(); $this->repository = $this->getMock('Composer\Repository\InstalledRepositoryInterface'); $rm = $this->getMockBuilder('Composer\Repository\RepositoryManager') ->disableOriginalConstructor() ->getMock(); $rm->expects($this->any()) ->method('getLocalRepository') ->will($this->returnValue($this->repository)); $im = $this->getMock('Composer\Installer\InstallationManager'); $im->expects($this->any()) ->method('getInstallPath') ->will($this->returnCallback(function ($package) { return __DIR__.'/Fixtures/'.$package->getPrettyName(); })); $this->io = $this->getMock('Composer\IO\IOInterface'); $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher')->disableOriginalConstructor()->getMock(); $this->autoloadGenerator = new AutoloadGenerator($dispatcher); $this->composer = new Composer(); $config = new Config(); $this->composer->setConfig($config); $this->composer->setDownloadManager($dm); $this->composer->setRepositoryManager($rm); $this->composer->setInstallationManager($im); $this->composer->setAutoloadGenerator($this->autoloadGenerator); $this->pm = new PluginManager($this->io, $this->composer); $this->composer->setPluginManager($this->pm); $config->merge(array( 'config' => array( 'vendor-dir' => $this->directory.'/Fixtures/', 'home' => $this->directory.'/Fixtures', 'bin-dir' => $this->directory.'/Fixtures/bin', ), )); } protected function tearDown() { $filesystem = new Filesystem(); $filesystem->removeDirectory($this->directory); } public function testInstallNewPlugin() { $this->repository ->expects($this->exactly(2)) ->method('getPackages') ->will($this->returnValue(array())); $installer = new PluginInstaller($this->io, $this->composer); $this->pm->loadInstalledPlugins(); $installer->install($this->repository, $this->packages[0]); $plugins = $this->pm->getPlugins(); $this->assertEquals('installer-v1', $plugins[0]->version); } public function testInstallMultiplePlugins() { $this->repository ->expects($this->exactly(2)) ->method('getPackages') ->will($this->returnValue(array($this->packages[3]))); $installer = new PluginInstaller($this->io, $this->composer); $this->pm->loadInstalledPlugins(); $installer->install($this->repository, $this->packages[3]); $plugins = $this->pm->getPlugins(); $this->assertEquals('plugin1', $plugins[0]->name); $this->assertEquals('installer-v4', $plugins[0]->version); $this->assertEquals('plugin2', $plugins[1]->name); $this->assertEquals('installer-v4', $plugins[1]->version); } public function testUpgradeWithNewClassName() { $this->repository ->expects($this->exactly(3)) ->method('getPackages') ->will($this->returnValue(array($this->packages[0]))); $this->repository ->expects($this->exactly(2)) ->method('hasPackage') ->will($this->onConsecutiveCalls(true, false)); $installer = new PluginInstaller($this->io, $this->composer); $this->pm->loadInstalledPlugins(); $installer->update($this->repository, $this->packages[0], $this->packages[1]); $plugins = $this->pm->getPlugins(); $this->assertEquals('installer-v2', $plugins[1]->version); } public function testUpgradeWithSameClassName() { $this->repository ->expects($this->exactly(3)) ->method('getPackages') ->will($this->returnValue(array($this->packages[1]))); $this->repository ->expects($this->exactly(2)) ->method('hasPackage') ->will($this->onConsecutiveCalls(true, false)); $installer = new PluginInstaller($this->io, $this->composer); $this->pm->loadInstalledPlugins(); $installer->update($this->repository, $this->packages[1], $this->packages[2]); $plugins = $this->pm->getPlugins(); $this->assertEquals('installer-v3', $plugins[1]->version); } public function testRegisterPluginOnlyOneTime() { $this->repository ->expects($this->exactly(2)) ->method('getPackages') ->will($this->returnValue(array())); $installer = new PluginInstaller($this->io, $this->composer); $this->pm->loadInstalledPlugins(); $installer->install($this->repository, $this->packages[0]); $installer->install($this->repository, clone $this->packages[0]); $plugins = $this->pm->getPlugins(); $this->assertCount(1, $plugins); $this->assertEquals('installer-v1', $plugins[0]->version); } /** * @param string $newPluginApiVersion * @param CompletePackage[] $plugins */ private function setPluginApiVersionWithPlugins($newPluginApiVersion, array $plugins = array()) { // reset the plugin manager's installed plugins $this->pm = $this->getMockBuilder('Composer\Plugin\PluginManager') ->setMethods(array('getPluginApiVersion')) ->setConstructorArgs(array($this->io, $this->composer)) ->getMock(); // mock the Plugin API version $this->pm->expects($this->any()) ->method('getPluginApiVersion') ->will($this->returnValue($newPluginApiVersion)); $plugApiInternalPackage = $this->getPackage( 'composer-plugin-api', $newPluginApiVersion, 'Composer\Package\CompletePackage' ); // Add the plugins to the repo along with the internal Plugin package on which they all rely. $this->repository ->expects($this->any()) ->method('getPackages') ->will($this->returnCallback(function () use ($plugApiInternalPackage, $plugins) { return array_merge(array($plugApiInternalPackage), $plugins); })); $this->pm->loadInstalledPlugins(); } public function testStarPluginVersionWorksWithAnyAPIVersion() { $starVersionPlugin = array($this->packages[4]); $this->setPluginApiVersionWithPlugins('1.0.0', $starVersionPlugin); $this->assertCount(1, $this->pm->getPlugins()); $this->setPluginApiVersionWithPlugins('1.9.9', $starVersionPlugin); $this->assertCount(1, $this->pm->getPlugins()); $this->setPluginApiVersionWithPlugins('2.0.0-dev', $starVersionPlugin); $this->assertCount(1, $this->pm->getPlugins()); $this->setPluginApiVersionWithPlugins('100.0.0-stable', $starVersionPlugin); $this->assertCount(1, $this->pm->getPlugins()); } public function testPluginConstraintWorksOnlyWithCertainAPIVersion() { $pluginWithApiConstraint = array($this->packages[5]); $this->setPluginApiVersionWithPlugins('1.0.0', $pluginWithApiConstraint); $this->assertCount(0, $this->pm->getPlugins()); $this->setPluginApiVersionWithPlugins('1.1.9', $pluginWithApiConstraint); $this->assertCount(0, $this->pm->getPlugins()); $this->setPluginApiVersionWithPlugins('1.2.0', $pluginWithApiConstraint); $this->assertCount(1, $this->pm->getPlugins()); $this->setPluginApiVersionWithPlugins('1.9.9', $pluginWithApiConstraint); $this->assertCount(1, $this->pm->getPlugins()); } public function testPluginRangeConstraintsWorkOnlyWithCertainAPIVersion() { $pluginWithApiConstraint = array($this->packages[6]); $this->setPluginApiVersionWithPlugins('1.0.0', $pluginWithApiConstraint); $this->assertCount(0, $this->pm->getPlugins()); $this->setPluginApiVersionWithPlugins('3.0.0', $pluginWithApiConstraint); $this->assertCount(1, $this->pm->getPlugins()); $this->setPluginApiVersionWithPlugins('5.5.0', $pluginWithApiConstraint); $this->assertCount(0, $this->pm->getPlugins()); } public function testIncapablePluginIsCorrectlyDetected() { $plugin = $this->getMockBuilder('Composer\Plugin\PluginInterface') ->getMock(); $this->assertNull($this->pm->getPluginCapability($plugin, 'Fake\Ability')); } public function testCapabilityImplementsComposerPluginApiClassAndIsConstructedWithArgs() { $capabilityApi = 'Composer\Plugin\Capability\Capability'; $capabilityImplementation = 'Composer\Test\Plugin\Mock\Capability'; $plugin = $this->getMockBuilder('Composer\Test\Plugin\Mock\CapablePluginInterface') ->getMock(); $plugin->expects($this->once()) ->method('getCapabilities') ->will($this->returnCallback(function () use ($capabilityImplementation, $capabilityApi) { return array($capabilityApi => $capabilityImplementation); })); $capability = $this->pm->getPluginCapability($plugin, $capabilityApi, array('a' => 1, 'b' => 2)); $this->assertInstanceOf($capabilityApi, $capability); $this->assertInstanceOf($capabilityImplementation, $capability); $this->assertSame(array('a' => 1, 'b' => 2), $capability->args); } public function invalidImplementationClassNames() { return array( array(null), array(""), array(0), array(1000), array(" "), array(array(1)), array(array()), array(new \stdClass()), ); } public function nonExistingOrInvalidImplementationClassTypes() { return array( array('\stdClass'), array('NonExistentClassLikeMiddleClass'), ); } /** * @dataProvider invalidImplementationClassNames * @expectedException \UnexpectedValueException */ public function testQueryingWithInvalidCapabilityClassNameThrows($invalidImplementationClassNames) { $capabilityApi = 'Composer\Plugin\Capability\Capability'; $plugin = $this->getMockBuilder('Composer\Test\Plugin\Mock\CapablePluginInterface') ->getMock(); $plugin->expects($this->once()) ->method('getCapabilities') ->will($this->returnCallback(function () use ($invalidImplementationClassNames, $capabilityApi) { return array($capabilityApi => $invalidImplementationClassNames); })); $this->pm->getPluginCapability($plugin, $capabilityApi); } public function testQueryingNonProvidedCapabilityReturnsNullSafely() { $capabilityApi = 'Composer\Plugin\Capability\MadeUpCapability'; $plugin = $this->getMockBuilder('Composer\Test\Plugin\Mock\CapablePluginInterface') ->getMock(); $plugin->expects($this->once()) ->method('getCapabilities') ->will($this->returnCallback(function () { return array(); })); $this->assertNull($this->pm->getPluginCapability($plugin, $capabilityApi)); } /** * @dataProvider nonExistingOrInvalidImplementationClassTypes * @expectedException \RuntimeException */ public function testQueryingWithNonExistingOrWrongCapabilityClassTypesThrows($wrongImplementationClassTypes) { $this->testQueryingWithInvalidCapabilityClassNameThrows($wrongImplementationClassTypes); } } composer-1.0.0-beta2/tests/Composer/Test/Repository/000077500000000000000000000000001267577262200224015ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Repository/ArrayRepositoryTest.php000066400000000000000000000045641267577262200271410ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Repository; use Composer\Repository\ArrayRepository; use Composer\TestCase; class ArrayRepositoryTest extends TestCase { public function testAddPackage() { $repo = new ArrayRepository; $repo->addPackage($this->getPackage('foo', '1')); $this->assertEquals(1, count($repo)); } public function testRemovePackage() { $package = $this->getPackage('bar', '2'); $repo = new ArrayRepository; $repo->addPackage($this->getPackage('foo', '1')); $repo->addPackage($package); $this->assertEquals(2, count($repo)); $repo->removePackage($this->getPackage('foo', '1')); $this->assertEquals(1, count($repo)); $this->assertEquals(array($package), $repo->getPackages()); } public function testHasPackage() { $repo = new ArrayRepository; $repo->addPackage($this->getPackage('foo', '1')); $repo->addPackage($this->getPackage('bar', '2')); $this->assertTrue($repo->hasPackage($this->getPackage('foo', '1'))); $this->assertFalse($repo->hasPackage($this->getPackage('bar', '1'))); } public function testFindPackages() { $repo = new ArrayRepository(); $repo->addPackage($this->getPackage('foo', '1')); $repo->addPackage($this->getPackage('bar', '2')); $repo->addPackage($this->getPackage('bar', '3')); $foo = $repo->findPackages('foo'); $this->assertCount(1, $foo); $this->assertEquals('foo', $foo[0]->getName()); $bar = $repo->findPackages('bar'); $this->assertCount(2, $bar); $this->assertEquals('bar', $bar[0]->getName()); } public function testAutomaticallyAddAliasedPackage() { $repo = new ArrayRepository(); $package = $this->getPackage('foo', '1'); $alias = $this->getAliasPackage($package, '2'); $repo->addPackage($alias); $this->assertEquals(2, count($repo)); $this->assertTrue($repo->hasPackage($this->getPackage('foo', '1'))); $this->assertTrue($repo->hasPackage($this->getPackage('foo', '2'))); } } composer-1.0.0-beta2/tests/Composer/Test/Repository/ArtifactRepositoryTest.php000066400000000000000000000100111267577262200276000ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; use Composer\TestCase; use Composer\IO\NullIO; use Composer\Config; use Composer\Package\BasePackage; class ArtifactRepositoryTest extends TestCase { public function setUp() { parent::setUp(); if (!extension_loaded('zip')) { $this->markTestSkipped('You need the zip extension to run this test.'); } } public function testExtractsConfigsFromZipArchives() { $expectedPackages = array( 'vendor0/package0-0.0.1', 'composer/composer-1.0.0-alpha6', 'vendor1/package2-4.3.2', 'vendor3/package1-5.4.3', 'test/jsonInRoot-1.0.0', 'test/jsonInFirstLevel-1.0.0', //The files not-an-artifact.zip and jsonSecondLevel are not valid //artifacts and do not get detected. ); $coordinates = array('type' => 'artifact', 'url' => __DIR__ . '/Fixtures/artifacts'); $repo = new ArtifactRepository($coordinates, new NullIO(), new Config()); $foundPackages = array_map(function (BasePackage $package) { return "{$package->getPrettyName()}-{$package->getPrettyVersion()}"; }, $repo->getPackages()); sort($expectedPackages); sort($foundPackages); $this->assertSame($expectedPackages, $foundPackages); } public function testAbsoluteRepoUrlCreatesAbsoluteUrlPackages() { $absolutePath = __DIR__ . '/Fixtures/artifacts'; $coordinates = array('type' => 'artifact', 'url' => $absolutePath); $repo = new ArtifactRepository($coordinates, new NullIO(), new Config()); foreach ($repo->getPackages() as $package) { $this->assertTrue(strpos($package->getDistUrl(), strtr($absolutePath, '\\', '/')) === 0); } } public function testRelativeRepoUrlCreatesRelativeUrlPackages() { $relativePath = 'tests/Composer/Test/Repository/Fixtures/artifacts'; $coordinates = array('type' => 'artifact', 'url' => $relativePath); $repo = new ArtifactRepository($coordinates, new NullIO(), new Config()); foreach ($repo->getPackages() as $package) { $this->assertTrue(strpos($package->getDistUrl(), $relativePath) === 0); } } } //Files jsonInFirstLevel.zip, jsonInRoot.zip and jsonInSecondLevel.zip were generated with: // //$archivesToCreate = array( // 'jsonInRoot' => array( // "extra.txt" => "Testing testing testing", // "composer.json" => '{ "name": "test/jsonInRoot", "version": "1.0.0" }', // "subdir/extra.txt" => "Testing testing testing", // "subdir/extra2.txt" => "Testing testing testing", // ), // // 'jsonInFirstLevel' => array( // "extra.txt" => "Testing testing testing", // "subdir/composer.json" => '{ "name": "test/jsonInFirstLevel", "version": "1.0.0" }', // "subdir/extra.txt" => "Testing testing testing", // "subdir/extra2.txt" => "Testing testing testing", // ), // // 'jsonInSecondLevel' => array( // "extra.txt" => "Testing testing testing", // "subdir/extra1.txt" => "Testing testing testing", // "subdir/foo/composer.json" => '{ "name": "test/jsonInSecondLevel", "version": "1.0.0" }', // "subdir/foo/extra1.txt" => "Testing testing testing", // "subdir/extra2.txt" => "Testing testing testing", // "subdir/extra3.txt" => "Testing testing testing", // ), //); // //foreach ($archivesToCreate as $archiveName => $fileDetails) { // $zipFile = new ZipArchive(); // $zipFile->open("$archiveName.zip", ZIPARCHIVE::CREATE); // // foreach ($fileDetails as $filename => $fileContents) { // $zipFile->addFromString($filename, $fileContents); // } // // $zipFile->close(); //} composer-1.0.0-beta2/tests/Composer/Test/Repository/ComposerRepositoryTest.php000066400000000000000000000133501267577262200276430ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Repository; use Composer\IO\NullIO; use Composer\Test\Mock\FactoryMock; use Composer\TestCase; use Composer\Package\Loader\ArrayLoader; use Composer\Semver\VersionParser; class ComposerRepositoryTest extends TestCase { /** * @dataProvider loadDataProvider */ public function testLoadData(array $expected, array $repoPackages) { $repoConfig = array( 'url' => 'http://example.org', ); $repository = $this->getMock( 'Composer\Repository\ComposerRepository', array( 'loadRootServerFile', 'createPackage', ), array( $repoConfig, new NullIO, FactoryMock::createConfig(), ) ); $repository ->expects($this->exactly(2)) ->method('loadRootServerFile') ->will($this->returnValue($repoPackages)); foreach ($expected as $at => $arg) { $stubPackage = $this->getPackage('stub/stub', '1.0.0'); $repository ->expects($this->at($at + 2)) ->method('createPackage') ->with($this->identicalTo($arg), $this->equalTo('Composer\Package\CompletePackage')) ->will($this->returnValue($stubPackage)); } // Triggers initialization $packages = $repository->getPackages(); // Final sanity check, ensure the correct number of packages were added. $this->assertCount(count($expected), $packages); } public function loadDataProvider() { return array( // Old repository format array( array( array('name' => 'foo/bar', 'version' => '1.0.0'), ), array('foo/bar' => array( 'name' => 'foo/bar', 'versions' => array( '1.0.0' => array('name' => 'foo/bar', 'version' => '1.0.0'), ), )), ), // New repository format array( array( array('name' => 'bar/foo', 'version' => '3.14'), array('name' => 'bar/foo', 'version' => '3.145'), ), array('packages' => array( 'bar/foo' => array( '3.14' => array('name' => 'bar/foo', 'version' => '3.14'), '3.145' => array('name' => 'bar/foo', 'version' => '3.145'), ), )), ), ); } public function testWhatProvides() { $repo = $this->getMockBuilder('Composer\Repository\ComposerRepository') ->disableOriginalConstructor() ->setMethods(array('fetchFile')) ->getMock(); $cache = $this->getMockBuilder('Composer\Cache')->disableOriginalConstructor()->getMock(); $cache->expects($this->any()) ->method('sha256') ->will($this->returnValue(false)); $properties = array( 'cache' => $cache, 'loader' => new ArrayLoader(), 'providerListing' => array('a' => array('sha256' => 'xxx')), 'providersUrl' => 'https://dummy.test.link/to/%package%/file', ); foreach ($properties as $property => $value) { $ref = new \ReflectionProperty($repo, $property); $ref->setAccessible(true); $ref->setValue($repo, $value); } $repo->expects($this->any()) ->method('fetchFile') ->will($this->returnValue(array( 'packages' => array( array(array( 'uid' => 1, 'name' => 'a', 'version' => 'dev-master', 'extra' => array('branch-alias' => array('dev-master' => '1.0.x-dev')), )), array(array( 'uid' => 2, 'name' => 'a', 'version' => 'dev-develop', 'extra' => array('branch-alias' => array('dev-develop' => '1.1.x-dev')), )), array(array( 'uid' => 3, 'name' => 'a', 'version' => '0.6', )), ), ))); $pool = $this->getMock('Composer\DependencyResolver\Pool'); $pool->expects($this->any()) ->method('isPackageAcceptable') ->will($this->returnValue(true)); $versionParser = new VersionParser(); $repo->setRootAliases(array( 'a' => array( $versionParser->normalize('0.6') => array('alias' => 'dev-feature', 'alias_normalized' => $versionParser->normalize('dev-feature')), $versionParser->normalize('1.1.x-dev') => array('alias' => '1.0', 'alias_normalized' => $versionParser->normalize('1.0')), ), )); $packages = $repo->whatProvides($pool, 'a'); $this->assertCount(7, $packages); $this->assertEquals(array('1', '1-alias', '2', '2-alias', '2-root', '3', '3-root'), array_keys($packages)); $this->assertInstanceOf('Composer\Package\AliasPackage', $packages['2-root']); $this->assertSame($packages['2'], $packages['2-root']->getAliasOf()); $this->assertSame($packages['2'], $packages['2-alias']->getAliasOf()); } } composer-1.0.0-beta2/tests/Composer/Test/Repository/CompositeRepositoryTest.php000066400000000000000000000141521267577262200300170ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Repository; use Composer\Repository\CompositeRepository; use Composer\Repository\ArrayRepository; use Composer\TestCase; class CompositeRepositoryTest extends TestCase { public function testHasPackage() { $arrayRepoOne = new ArrayRepository; $arrayRepoOne->addPackage($this->getPackage('foo', '1')); $arrayRepoTwo = new ArrayRepository; $arrayRepoTwo->addPackage($this->getPackage('bar', '1')); $repo = new CompositeRepository(array($arrayRepoOne, $arrayRepoTwo)); $this->assertTrue($repo->hasPackage($this->getPackage('foo', '1')), "Should have package 'foo/1'"); $this->assertTrue($repo->hasPackage($this->getPackage('bar', '1')), "Should have package 'bar/1'"); $this->assertFalse($repo->hasPackage($this->getPackage('foo', '2')), "Should not have package 'foo/2'"); $this->assertFalse($repo->hasPackage($this->getPackage('bar', '2')), "Should not have package 'bar/2'"); } public function testFindPackage() { $arrayRepoOne = new ArrayRepository; $arrayRepoOne->addPackage($this->getPackage('foo', '1')); $arrayRepoTwo = new ArrayRepository; $arrayRepoTwo->addPackage($this->getPackage('bar', '1')); $repo = new CompositeRepository(array($arrayRepoOne, $arrayRepoTwo)); $this->assertEquals('foo', $repo->findPackage('foo', '1')->getName(), "Should find package 'foo/1' and get name of 'foo'"); $this->assertEquals('1', $repo->findPackage('foo', '1')->getPrettyVersion(), "Should find package 'foo/1' and get pretty version of '1'"); $this->assertEquals('bar', $repo->findPackage('bar', '1')->getName(), "Should find package 'bar/1' and get name of 'bar'"); $this->assertEquals('1', $repo->findPackage('bar', '1')->getPrettyVersion(), "Should find package 'bar/1' and get pretty version of '1'"); $this->assertNull($repo->findPackage('foo', '2'), "Should not find package 'foo/2'"); } public function testFindPackages() { $arrayRepoOne = new ArrayRepository; $arrayRepoOne->addPackage($this->getPackage('foo', '1')); $arrayRepoOne->addPackage($this->getPackage('foo', '2')); $arrayRepoOne->addPackage($this->getPackage('bat', '1')); $arrayRepoTwo = new ArrayRepository; $arrayRepoTwo->addPackage($this->getPackage('bar', '1')); $arrayRepoTwo->addPackage($this->getPackage('bar', '2')); $arrayRepoTwo->addPackage($this->getPackage('foo', '3')); $repo = new CompositeRepository(array($arrayRepoOne, $arrayRepoTwo)); $bats = $repo->findPackages('bat'); $this->assertCount(1, $bats, "Should find one instance of 'bats' (defined in just one repository)"); $this->assertEquals('bat', $bats[0]->getName(), "Should find packages named 'bat'"); $bars = $repo->findPackages('bar'); $this->assertCount(2, $bars, "Should find two instances of 'bar' (both defined in the same repository)"); $this->assertEquals('bar', $bars[0]->getName(), "Should find packages named 'bar'"); $foos = $repo->findPackages('foo'); $this->assertCount(3, $foos, "Should find three instances of 'foo' (two defined in one repository, the third in the other)"); $this->assertEquals('foo', $foos[0]->getName(), "Should find packages named 'foo'"); } public function testGetPackages() { $arrayRepoOne = new ArrayRepository; $arrayRepoOne->addPackage($this->getPackage('foo', '1')); $arrayRepoTwo = new ArrayRepository; $arrayRepoTwo->addPackage($this->getPackage('bar', '1')); $repo = new CompositeRepository(array($arrayRepoOne, $arrayRepoTwo)); $packages = $repo->getPackages(); $this->assertCount(2, $packages, "Should get two packages"); $this->assertEquals("foo", $packages[0]->getName(), "First package should have name of 'foo'"); $this->assertEquals("1", $packages[0]->getPrettyVersion(), "First package should have pretty version of '1'"); $this->assertEquals("bar", $packages[1]->getName(), "Second package should have name of 'bar'"); $this->assertEquals("1", $packages[1]->getPrettyVersion(), "Second package should have pretty version of '1'"); } public function testAddRepository() { $arrayRepoOne = new ArrayRepository; $arrayRepoOne->addPackage($this->getPackage('foo', '1')); $arrayRepoTwo = new ArrayRepository; $arrayRepoTwo->addPackage($this->getPackage('bar', '1')); $arrayRepoTwo->addPackage($this->getPackage('bar', '2')); $arrayRepoTwo->addPackage($this->getPackage('bar', '3')); $repo = new CompositeRepository(array($arrayRepoOne)); $this->assertCount(1, $repo, "Composite repository should have just one package before addRepository() is called"); $repo->addRepository($arrayRepoTwo); $this->assertCount(4, $repo, "Composite repository should have four packages after addRepository() is called"); } public function testCount() { $arrayRepoOne = new ArrayRepository; $arrayRepoOne->addPackage($this->getPackage('foo', '1')); $arrayRepoTwo = new ArrayRepository; $arrayRepoTwo->addPackage($this->getPackage('bar', '1')); $repo = new CompositeRepository(array($arrayRepoOne, $arrayRepoTwo)); $this->assertEquals(2, count($repo), "Should return '2' for count(\$repo)"); } /** * @dataProvider provideMethodCalls */ public function testNoRepositories($method, $args) { $repo = new CompositeRepository(array()); $this->assertEquals(array(), call_user_func_array(array($repo, $method), $args)); } public function provideMethodCalls() { return array( array('findPackages', array('foo')), array('search', array('foo')), array('getPackages', array()), ); } } composer-1.0.0-beta2/tests/Composer/Test/Repository/FilesystemRepositoryTest.php000066400000000000000000000057451267577262200302110ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; use Composer\TestCase; class FilesystemRepositoryTest extends TestCase { public function testRepositoryRead() { $json = $this->createJsonFileMock(); $repository = new FilesystemRepository($json); $json ->expects($this->once()) ->method('read') ->will($this->returnValue(array( array('name' => 'package1', 'version' => '1.0.0-beta', 'type' => 'vendor'), ))); $json ->expects($this->once()) ->method('exists') ->will($this->returnValue(true)); $packages = $repository->getPackages(); $this->assertSame(1, count($packages)); $this->assertSame('package1', $packages[0]->getName()); $this->assertSame('1.0.0.0-beta', $packages[0]->getVersion()); $this->assertSame('vendor', $packages[0]->getType()); } /** * @expectedException \Composer\Repository\InvalidRepositoryException */ public function testCorruptedRepositoryFile() { $json = $this->createJsonFileMock(); $repository = new FilesystemRepository($json); $json ->expects($this->once()) ->method('read') ->will($this->returnValue('foo')); $json ->expects($this->once()) ->method('exists') ->will($this->returnValue(true)); $repository->getPackages(); } public function testUnexistentRepositoryFile() { $json = $this->createJsonFileMock(); $repository = new FilesystemRepository($json); $json ->expects($this->once()) ->method('exists') ->will($this->returnValue(false)); $this->assertEquals(array(), $repository->getPackages()); } public function testRepositoryWrite() { $json = $this->createJsonFileMock(); $repository = new FilesystemRepository($json); $json ->expects($this->once()) ->method('read') ->will($this->returnValue(array())); $json ->expects($this->once()) ->method('exists') ->will($this->returnValue(true)); $json ->expects($this->once()) ->method('write') ->with(array( array('name' => 'mypkg', 'type' => 'library', 'version' => '0.1.10', 'version_normalized' => '0.1.10.0'), )); $repository->addPackage($this->getPackage('mypkg', '0.1.10')); $repository->write(); } private function createJsonFileMock() { return $this->getMockBuilder('Composer\Json\JsonFile') ->disableOriginalConstructor() ->getMock(); } } composer-1.0.0-beta2/tests/Composer/Test/Repository/Fixtures/000077500000000000000000000000001267577262200242125ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Repository/Fixtures/artifacts/000077500000000000000000000000001267577262200261725ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Repository/Fixtures/artifacts/composer-1.0.0-alpha6.zip000066400000000000000000000121531267577262200323520ustar00rootroot00000000000000PK Œ¤Bcomposer-1.0.0-alpha6/UX ‚XQ(‚XQõPKt¤Bcomposer-1.0.0-alpha6/.DS_StoreUX øXQûXQõ혱NÃ0Eï ‚ ’GFL•øS¥KùÔ–‚¨Ø³ñÙÅé»BAI¦"zdEñ}q;/lö±¾€ n|b”Šc@ѳík4Øâ ï˜ây¼ÖhK¬ròo?òÛ|õz·iVËM³ô%Ú"û:‹ÝnŸ>ÇsÜ¢Æ}ö4×XÖ-~„BqꘫšwBˆ?H·?D:Ñ­Ûx¿ Ë^&БNtë6Î+è’®è@G:Ñ­››–±ù0>ÙØ¡X #~õÊBœ g®Ðÿsìÿ…ÿ+ë‡z†ï†`@wÖÆ<û¡…ÿ,¼êÍ‹t¢[·>„8_PK§ÁMðüPK ‘¤B __MACOSX/UX 1‚XQ1‚XQõPK ‘¤B__MACOSX/composer-1.0.0-alpha6/UX 1‚XQ1‚XQõPKt¤B*__MACOSX/composer-1.0.0-alpha6/._.DS_StoreUX øXQûXQõc`cg`b`ðMLVðVˆP€'±ƒøA L…VPK¾CŠ *RPKÌWA composer-1.0.0-alpha6/.gitignoreUX °Ü…P°Ü…Põ5Ê1€ @ѽ‡)·q¯R¡J…x|MŒÓûÃ8Ø]4 h½]|ø[û”O) (‘ PKN]ÄSjPKÌWA!composer-1.0.0-alpha6/.travis.ymlUX °Ü…P°Ü…Põ=A ! E÷9E. .¦³ñ2ÅJª‚£6F袇ï8ØBH>?ïó³+a¸@[l粈 w½éí§Ö½<èY™îÝsjb/ßΨ:F‘f $¾­vb]9˜Tº¸œ‰ñ3;P©s^#‘\éiýùã ¬’‰Œ’•G¡.ÝL>“^ý>2|PKG§°>†ÊPKŒ¤B#composer-1.0.0-alpha6/composer.jsonUX (‚XQ(‚XQõTÁnÔ0½ïWX9¢]§-‚C%PqQ„œ*Ž3IÜ&v˜qº„ª|;c'ÞÝl[AkïÌ›ñóÌóÜ­™Udç"Ó®ëæi“­'À- gæTžÈ“jûF½LîH£éý ù¢ôªA\*ËË.É Œ[‡%1ä*ë'L¶Ñ=جÃ?5x×:Uf?æ°ÆuÐ(gn¼ïÏó¼ŸJ‡užNðca­)Pá˜Ì­Ñ`)z.?|KV>¨qÙDCøîv»E]>›–Ä›°SÖÎñ;tÊ´eÕ„¸HYÂ1ø‘Ël·[y± ¸_ÿ‹×G.§o]]eݓĮe1C.ÚRÿC+!÷tâ.u…†¾wè9`Ï-3¨C^8ÿÊ ¬+!véHTSÑ”Ž¥Ð[㛡 ÎÈ1Ÿá«ƒòd?ƒ°dÒ7}HúúÕ ù\žžx=7•±…Ûæ×äì†tõšÄ}*Ÿ¢C"¨5ÖOˆ¥ì*gGfhɵ±~ÎäéE ·Á*ÃBÇ„z Ñ£Ó@´H´¸. u tTxøå7¿M¼ò{« &[ ߀`›`«ŸŸ¦Pmë¶$F7ïÄ`ƒW¡nÌ-ÐZ([&D<¡èÈTB¤«‚Kp -xáQU•ч?d¢öÙþ$¥ÃE”€øþõ‰Ê¡@à¦ïÐEvóÌ8êÿn`,@¸9 &‘½KºcZ„:Ïf)§…±q$ñº×hÒ9SFµLͳÅê†G Q´ðD/7lÓ)òÓy<-7»î_Ñýê~õPK(¶’äN|PKŒ¤B.__MACOSX/composer-1.0.0-alpha6/._composer.jsonUX (‚XQ(‚XQõc`cg`b`ðMLVðVˆP€'q%ƒø«ˆŽ!!AP&HÇ æGSˆOÎÏÕK,(ÈIÕ I­(qÍKÎOÉÌKJ––¤éZX›š[Z˜PKpÀ]«PKÌWAcomposer-1.0.0-alpha6/README.mdUX 5~XQ°Ü…Põ­Xm“Û¶þŽ_ºØšžHÛIúÁ»±/NâŒíz|ö‡ÎM¦Iˆ„”,'ùï}vAR”}—¸3ÕÜœ$bwñ`÷ÙèÜu½ Ú˵|¥Ê+UkùBY¼uÚF¹u^¾úñ•xø9/!Î'c&H%ûÑ^Çö¼ŒŒ­eëJÕÊJ÷ÚVÚ–Fé¶òà/{ïÞé2BÝV²5…WË™ZËË&ÆþAž×:–ãN™óuþóV|€Îy-ÅÇNEã,Û®\9Ðù ì_þåòÉ`ÚJ^àÑ’É›A—ƒ×ÀïLX—† O»Ì²ÞÖÿZ[6;¢ö«ÕŸ¨®„xfCTm›Ðåòm€¿Äúš—÷2ùÛÛÖ©JÆ>Ù!4ÊonôʼnØJê÷8WTE«%\4ÍÖL)!$^›ÍF††?þM­\yó®üMöM?é !îgòÜk5H1«¼ 8k¥·Æ%8øKFdò¥‹JEüŸô{Õõ@k‚PÀä|”;íyŒ‚¬ú¾5%{0$-…¨[e§˜,´ì‡¢5¡Ñ•Taâg8yt»£]ß8Y&¬3ûòIPbOa}t~=˜J·Æê0û= ›Ù)ªpC\-¼IÇæ/¿òzÝòú—Áx}ëÁâ!/tκÖÕùø[ÞËîfwoÍ‚¿‹ãv÷—™|=X9åâ¹A4äIø§8oÄW™|â݇š3e>-<{ùj:Íõ磓wë]'/Ìòz'ÃÉ£1œÿ*½Ó­ëå±€Dd{F¼ÝâÌÐÀ¶S} èÒ3:’ØQ­t(½)(Ä…ÛéŒS†²©M”e묖SnãI3|sMFcqCÔý?§ÛÇñ!fB™­/q+«9lò‹/(©d–å7DRü®*•…WöìÝyƒâ0nO‰FÛl cg3Hpø«#OߨäÑr",Ä­+P½Í2ê¨ÞónwPîÕ®n ÿ§t¸0¶ÔG {篂Ü#6ŒeÇS/¢Çt‚ ©RFç 5(Cu ŽQaEÔy(ÅlUZîÕ!‘á¼Q¶¦Zµ4gÇ û¯4G ‚Ϲc‘'˜? \3ÚÍÿV7ÿêJÏÌ]–âMÙtÌýûûÓ„åD=Å=vÊ~F;…¯;ä£ÄF|¡¥,Œ,¡¼²ÔÛöÏh|›ˆõLþ«§0³ìadB¢ºtˆS=€+Ôîè¨ §Ñþ3è³3J6®Ó…×ûÏ'ÑD¥åÒ+ôØ&Œ“Å5q|tLbÃÕ*á5¬˜‘8ó‚VOžZd£vÚÞF(¨¶4¥ËF˜~4µ³T«?äË=˜I\—–vOå!vL½Œ˜sÇ9E6ÇdÆ'$`…³½í+Å)?ÉêL!€ûï5=‚ ðz #zC5ššÔ°( ¦%b"•ß ÿŒ .ByŸztF¡±…™Ë8EñŠ¥«ˆJ“ µñ5¼R¶C•êQ4{íh €Ïé1ìR%z÷ŠÚAÜ»¡nÝãÔa u L ¡¢ºHóˆ×Sû¡Z©·ô Ð²Ó¾Ö(Bóþ@mÃ@=Ò³´×;ƒØ=åBE-ç{Ôª”à‰jgÓP¡äïd" ‹g ) ê£Ã}„6ãF9îHHm@Û%ÿ³¯ Œ"©Ab¢æTcá šzÛ¢» n]çŽ=‰×VÊWÇ‘%º­³‹óûÙݼ\D+'[y˜ô²&v¨ïûƔ܈ó!àÐÔüGc Rv¤êÂõlt‹|#¤ ÷w%Uj}—˜Ë8[MÃbœú£'Ù“«ëkâA,hõ¦Y†¶S¦åÛmdÒxS;WƒL5ÈÒ/öä¯YZä­ùɼïFWâÙësY¢$[Ý6Õ;p§Yª2¡ϧ¨·{ݶg´¥ñe¶õZ[" úƒ¼üëdöç;XÄö‹,n Û4«û4ÿU ÑŸª3ì„-9…î?ðÝë4~Ò·ðQbâî'¿Î¾ÌîSàyJÞAÀh ޼ðÈJ9HcKEñU;g*ôdâ©A¡/†:à†óx@ûÙ¼/ ¼ö¸ÒhAÖ"Ó¿±*}ùvúUú-L·(T\«8“Èr}¿ßgKÕo /óGâ'ç+#Ÿ¸º6Ê:’—ã·oQ⪬¸qZVúj¹†Ê! @ídcomposer-1.0.0-alpha6/.travis.ymlUX°Ü…P°Ü…PPKŒ¤B(¶’äN|# @íIcomposer-1.0.0-alpha6/composer.jsonUX(‚XQ(‚XQPKŒ¤BpÀ]«. @¤ø__MACOSX/composer-1.0.0-alpha6/._composer.jsonUX(‚XQ(‚XQPKÌWAæ‰e†e| @íÁcomposer-1.0.0-alpha6/README.mdUX5~XQ°Ü…PPKÌWA£âÁ]Šê* @¤ƒ__MACOSX/composer-1.0.0-alpha6/._README.mdUX5~XQ°Ü…PPK àucomposer-1.0.0-beta2/tests/Composer/Test/Repository/Fixtures/artifacts/jsonInFirstLevel.zip000066400000000000000000000010361267577262200321560ustar00rootroot00000000000000PK—¦RD_úñV  extra.txt I-.ÉÌKW(A¥PK—¦RDŽéË88subdir/composer.json«VPPÊKÌMU²RP*I-.ÑÏ*ÎÏóÌsË,*.ñI-KÍQÒQP*K-*ÎÌÏ©1Ô3Ð3PR¨PK—¦RD_úñV subdir/extra.txt I-.ÉÌKW(A¥PK—¦RD_úñV subdir/extra2.txt I-.ÉÌKW(A¥PK—¦RD_úñV  extra.txtPK—¦RDŽéË883subdir/composer.jsonPK—¦RD_úñV subdir/extra.txtPK—¦RD_úñV ×subdir/extra2.txtPKöcomposer-1.0.0-beta2/tests/Composer/Test/Repository/Fixtures/artifacts/jsonInRoot.zip000066400000000000000000000010121267577262200310140ustar00rootroot00000000000000PK—¦RD_úñV  extra.txt I-.ÉÌKW(A¥PK—¦RD8p±22 composer.json«VPPÊKÌMU²RP*I-.ÑÏ*ÎÏóÌ ÊÏ/QÒQP*K-*ÎÌÏÉêè()ÔPK—¦RD_úñV subdir/extra.txt I-.ÉÌKW(A¥PK—¦RD_úñV subdir/extra2.txt I-.ÉÌKW(A¥PK—¦RD_úñV  extra.txtPK—¦RD8p±22 3composer.jsonPK—¦RD_úñV subdir/extra.txtPK—¦RD_úñV Êsubdir/extra2.txtPKïcomposer-1.0.0-beta2/tests/Composer/Test/Repository/Fixtures/artifacts/jsonInSecondLevel.zip000066400000000000000000000014451267577262200323060ustar00rootroot00000000000000PK—¦RD_úñV  extra.txt I-.ÉÌKW(A¥PK—¦RD_úñV subdir/extra1.txt I-.ÉÌKW(A¥PK—¦RD¿×”Æ99subdir/foo/composer.json«VPPÊKÌMU²RP*I-.ÑÏ*ÎÏóÌ NMÎÏKñI-KÍQÒQP*K-*ÎÌÏ)2Ô3Ð3PR¨PK—¦RD_úñV subdir/foo/extra1.txt I-.ÉÌKW(A¥PK—¦RD_úñV subdir/extra2.txt I-.ÉÌKW(A¥PK—¦RD_úñV subdir/extra3.txt I-.ÉÌKW(A¥PK—¦RD_úñV  extra.txtPK—¦RD_úñV 3subdir/extra1.txtPK—¦RD¿×”Æ99nsubdir/foo/composer.jsonPK—¦RD_úñV Ýsubdir/foo/extra1.txtPK—¦RD_úñV subdir/extra2.txtPK—¦RD_úñV Wsubdir/extra3.txtPK}’composer-1.0.0-beta2/tests/Composer/Test/Repository/Fixtures/artifacts/not-an-artifact.zip000066400000000000000000000100541267577262200317050ustar00rootroot00000000000000PK Ž£Bcomposer-1.0.0-alpha6/UX E~XQK€XQõPKƒ¢Bcomposer-1.0.0-alpha6/.DS_StoreUX H€XQV~XQõ혱NÃ0Eï ‚*$Œ™*ñ¦J–ò¨- *Q±gã³ÁÉ»BAI¦"zdEñ}q;/lñ¾½€ n|`’ŠcD1°õ5ìñˆ7Ìñ4]k²Æ69ùŒ×ù}¾z¹Ý5›õ®Yûm•}õÙӧϱÂ7¨q—=Ï5¶ã„u‹Ÿ1!„Bœ:æªfÇ]†âÒí‘Ntë6Þ/èr t¤Ýºó º¤+:БNtëæ¦el>ŒO6v(èH§_½²'Ù+tçÿû!Ä?ÆÊú¾^à»!ѵ1‡aèÀG@á? /ó"èÖ­!ŽÅPKäÌ=ËúPK •£B __MACOSX/UX Z€XQZ€XQõPK •£B__MACOSX/composer-1.0.0-alpha6/UX Z€XQZ€XQõPKƒ¢B*__MACOSX/composer-1.0.0-alpha6/._.DS_StoreUX H€XQV~XQõc`cg`b`ðMLVðVˆP€'±ƒøA L…VPK¾CŠ *RPKÌWA composer-1.0.0-alpha6/.gitignoreUX °Ü…P°Ü…Põ5Ê1€ @ѽ‡)·q¯R¡J…x|MŒÓûÃ8Ø]4 h½]|ø[û”O) (‘ PKN]ÄSjPKÌWA!composer-1.0.0-alpha6/.travis.ymlUX °Ü…P°Ü…Põ=A ! E÷9E. .¦³ñ2ÅJª‚£6F袇ï8ØBH>?ïó³+a¸@[l粈 w½éí§Ö½<èY™îÝsjb/ßΨ:F‘f $¾­vb]9˜Tº¸œ‰ñ3;P©s^#‘\éiýùã ¬’‰Œ’•G¡.ÝL>“^ý>2|PKG§°>†ÊPKÌWAcomposer-1.0.0-alpha6/README.mdUX 5~XQ°Ü…Põ­Xm“Û¶þŽ_ºØšžHÛIúÁ»±/NâŒíz|ö‡ÎM¦Iˆ„”,'ùï}vAR”}—¸3ÕÜœ$bwñ`÷ÙèÜu½ Ú˵|¥Ê+UkùBY¼uÚF¹u^¾úñ•xø9/!Î'c&H%ûÑ^Çö¼ŒŒ­eëJÕÊJ÷ÚVÚ–Fé¶òà/{ïÞé2BÝV²5…WË™ZËË&ÆþAž×:–ãN™óuþóV|€Îy-ÅÇNEã,Û®\9Ðù ì_þåòÉ`ÚJ^àÑ’É›A—ƒ×ÀïLX—† O»Ì²ÞÖÿZ[6;¢ö«ÕŸ¨®„xfCTm›Ðåòm€¿Äúš—÷2ùÛÛÖ©JÆ>Ù!4ÊonôʼnØJê÷8WTE«%\4ÍÖL)!$^›ÍF††?þM­\yó®üMöM?é !îgòÜk5H1«¼ 8k¥·Æ%8øKFdò¥‹JEüŸô{Õõ@k‚PÀä|”;íyŒ‚¬ú¾5%{0$-…¨[e§˜,´ì‡¢5¡Ñ•Taâg8yt»£]ß8Y&¬3ûòIPbOa}t~=˜J·Æê0û= ›Ù)ªpC\-¼IÇæ/¿òzÝòú—Áx}ëÁâ!/tκÖÕùø[ÞËîfwoÍ‚¿‹ãv÷—™|=X9åâ¹A4äIø§8oÄW™|â݇š3e>-<{ùj:Íõ磓wë]'/Ìòz'ÃÉ£1œÿ*½Ó­ëå±€Dd{F¼ÝâÌÐÀ¶S} èÒ3:’ØQ­t(½)(Ä…ÛéŒS†²©M”e묖SnãI3|sMFcqCÔý?§ÛÇñ!fB™­/q+«9lò‹/(©d–å7DRü®*•…WöìÝyƒâ0nO‰FÛl cg3Hpø«#OߨäÑr",Ä­+P½Í2ê¨ÞónwPîÕ®n ÿ§t¸0¶ÔG {篂Ü#6ŒeÇS/¢Çt‚ ©RFç 5(Cu ŽQaEÔy(ÅlUZîÕ!‘á¼Q¶¦Zµ4gÇ û¯4G ‚Ϲc‘'˜? \3ÚÍÿV7ÿêJÏÌ]–âMÙtÌýûûÓ„åD=Å=vÊ~F;…¯;ä£ÄF|¡¥,Œ,¡¼²ÔÛöÏh|›ˆõLþ«§0³ìadB¢ºtˆS=€+Ôîè¨ §Ñþ3è³3J6®Ó…×ûÏ'ÑD¥åÒ+ôØ&Œ“Å5q|tLbÃÕ*á5¬˜‘8ó‚VOžZd£vÚÞF(¨¶4¥ËF˜~4µ³T«?äË=˜I\—–vOå!vL½Œ˜sÇ9E6ÇdÆ'$`…³½í+Å)?ÉêL!€ûï5=‚ ðz #zC5ššÔ°( ¦%b"•ß ÿŒ .ByŸztF¡±…™Ë8EñŠ¥«ˆJ“ µñ5¼R¶C•êQ4{íh €Ïé1ìR%z÷ŠÚAÜ»¡nÝãÔa u L ¡¢ºHóˆ×Sû¡Z©·ô Ð²Ó¾Ö(Bóþ@mÃ@=Ò³´×;ƒØ=åBE-ç{Ôª”à‰jgÓP¡äïd" ‹g ) ê£Ã}„6ãF9îHHm@Û%ÿ³¯ Œ"©Ab¢æTcá šzÛ¢» n]çŽ=‰×VÊWÇ‘%º­³‹óûÙݼ\D+'[y˜ô²&v¨ïûƔ܈ó!àÐÔüGc Rv¤êÂõlt‹|#¤ ÷w%Uj}—˜Ë8[MÃbœú£'Ù“«ëkâA,hõ¦Y†¶S¦åÛmdÒxS;WƒL5ÈÒ/öä¯YZä­ùɼïFWâÙësY¢$[Ý6Õ;p§Yª2¡ϧ¨·{ݶg´¥ñe¶õZ[" úƒ¼üëdöç;XÄö‹,n Û4«û4ÿU ÑŸª3ì„-9…î?ðÝë4~Ò·ðQbâî'¿Î¾ÌîSàyJÞAÀh ޼ðÈJ9HcKEñU;g*ôdâ©A¡/†:à†óx@ûÙ¼/ ¼ö¸ÒhAÖ"Ó¿±*}ùvúUú-L·(T\«8“Èr}¿ßgKÕo /óGâ'ç+#Ÿ¸º6Ê:’—ã·oQ⪬¸qZVúj¹†Ê! @íbcomposer-1.0.0-alpha6/.travis.ymlUX°Ü…P°Ü…PPKÌWAæ‰e†e| @íGcomposer-1.0.0-alpha6/README.mdUX5~XQ°Ü…PPKÌWA£âÁ]Šê* @¤ __MACOSX/composer-1.0.0-alpha6/._README.mdUX5~XQ°Ü…PPK û composer-1.0.0-beta2/tests/Composer/Test/Repository/Fixtures/artifacts/package0.zip000066400000000000000000000003521267577262200303710ustar00rootroot00000000000000PKúxB composer.jsonUX OOQXJOQõ«æR¥¼ÄÜT%+¥²Ô¼”ü"ý‚ÄäìÄôT%ˆ|IeX>'3©(±¨&\–ZTœ™Ÿ’1Ð3Ð3TâªPKi rôBQPKúxBi rôBQ @¤composer.jsonUXOOQXJOQPKGcomposer-1.0.0-beta2/tests/Composer/Test/Repository/Fixtures/artifacts/package2.zip000066400000000000000000000003521267577262200303730ustar00rootroot00000000000000PK¡xB composer.jsonUX IOOQIOOQõ«æR¥¼ÄÜT%+¥²Ô¼”ü"Cý‚ÄäìÄôT#%ˆ|IeX>'3©(±¨&\–ZTœ™Ÿ’1Ñ3Ö3RâªPK;œÆaBQPK¡xB;œÆaBQ @¤composer.jsonUXIOOQIOOQPKGcomposer-1.0.0-beta2/tests/Composer/Test/Repository/Fixtures/artifacts/subfolder/000077500000000000000000000000001267577262200301575ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Repository/Fixtures/artifacts/subfolder/not-an-artifact.zip000066400000000000000000000100541267577262200336720ustar00rootroot00000000000000PK Ž£Bcomposer-1.0.0-alpha6/UX E~XQK€XQõPKƒ¢Bcomposer-1.0.0-alpha6/.DS_StoreUX H€XQV~XQõ혱NÃ0Eï ‚*$Œ™*ñ¦J–ò¨- *Q±gã³ÁÉ»BAI¦"zdEñ}q;/lñ¾½€ n|`’ŠcD1°õ5ìñˆ7Ìñ4]k²Æ69ùŒ×ù}¾z¹Ý5›õ®Yûm•}õÙӧϱÂ7¨q—=Ï5¶ã„u‹Ÿ1!„Bœ:æªfÇ]†âÒí‘Ntë6Þ/èr t¤Ýºó º¤+:БNtëæ¦el>ŒO6v(èH§_½²'Ù+tçÿû!Ä?ÆÊú¾^à»!ѵ1‡aèÀG@á? /ó"èÖ­!ŽÅPKäÌ=ËúPK •£B __MACOSX/UX Z€XQZ€XQõPK •£B__MACOSX/composer-1.0.0-alpha6/UX Z€XQZ€XQõPKƒ¢B*__MACOSX/composer-1.0.0-alpha6/._.DS_StoreUX H€XQV~XQõc`cg`b`ðMLVðVˆP€'±ƒøA L…VPK¾CŠ *RPKÌWA composer-1.0.0-alpha6/.gitignoreUX °Ü…P°Ü…Põ5Ê1€ @ѽ‡)·q¯R¡J…x|MŒÓûÃ8Ø]4 h½]|ø[û”O) (‘ PKN]ÄSjPKÌWA!composer-1.0.0-alpha6/.travis.ymlUX °Ü…P°Ü…Põ=A ! E÷9E. .¦³ñ2ÅJª‚£6F袇ï8ØBH>?ïó³+a¸@[l粈 w½éí§Ö½<èY™îÝsjb/ßΨ:F‘f $¾­vb]9˜Tº¸œ‰ñ3;P©s^#‘\éiýùã ¬’‰Œ’•G¡.ÝL>“^ý>2|PKG§°>†ÊPKÌWAcomposer-1.0.0-alpha6/README.mdUX 5~XQ°Ü…Põ­Xm“Û¶þŽ_ºØšžHÛIúÁ»±/NâŒíz|ö‡ÎM¦Iˆ„”,'ùï}vAR”}—¸3ÕÜœ$bwñ`÷ÙèÜu½ Ú˵|¥Ê+UkùBY¼uÚF¹u^¾úñ•xø9/!Î'c&H%ûÑ^Çö¼ŒŒ­eëJÕÊJ÷ÚVÚ–Fé¶òà/{ïÞé2BÝV²5…WË™ZËË&ÆþAž×:–ãN™óuþóV|€Îy-ÅÇNEã,Û®\9Ðù ì_þåòÉ`ÚJ^àÑ’É›A—ƒ×ÀïLX—† O»Ì²ÞÖÿZ[6;¢ö«ÕŸ¨®„xfCTm›Ðåòm€¿Äúš—÷2ùÛÛÖ©JÆ>Ù!4ÊonôʼnØJê÷8WTE«%\4ÍÖL)!$^›ÍF††?þM­\yó®üMöM?é !îgòÜk5H1«¼ 8k¥·Æ%8øKFdò¥‹JEüŸô{Õõ@k‚PÀä|”;íyŒ‚¬ú¾5%{0$-…¨[e§˜,´ì‡¢5¡Ñ•Taâg8yt»£]ß8Y&¬3ûòIPbOa}t~=˜J·Æê0û= ›Ù)ªpC\-¼IÇæ/¿òzÝòú—Áx}ëÁâ!/tκÖÕùø[ÞËîfwoÍ‚¿‹ãv÷—™|=X9åâ¹A4äIø§8oÄW™|â݇š3e>-<{ùj:Íõ磓wë]'/Ìòz'ÃÉ£1œÿ*½Ó­ëå±€Dd{F¼ÝâÌÐÀ¶S} èÒ3:’ØQ­t(½)(Ä…ÛéŒS†²©M”e묖SnãI3|sMFcqCÔý?§ÛÇñ!fB™­/q+«9lò‹/(©d–å7DRü®*•…WöìÝyƒâ0nO‰FÛl cg3Hpø«#OߨäÑr",Ä­+P½Í2ê¨ÞónwPîÕ®n ÿ§t¸0¶ÔG {篂Ü#6ŒeÇS/¢Çt‚ ©RFç 5(Cu ŽQaEÔy(ÅlUZîÕ!‘á¼Q¶¦Zµ4gÇ û¯4G ‚Ϲc‘'˜? \3ÚÍÿV7ÿêJÏÌ]–âMÙtÌýûûÓ„åD=Å=vÊ~F;…¯;ä£ÄF|¡¥,Œ,¡¼²ÔÛöÏh|›ˆõLþ«§0³ìadB¢ºtˆS=€+Ôîè¨ §Ñþ3è³3J6®Ó…×ûÏ'ÑD¥åÒ+ôØ&Œ“Å5q|tLbÃÕ*á5¬˜‘8ó‚VOžZd£vÚÞF(¨¶4¥ËF˜~4µ³T«?äË=˜I\—–vOå!vL½Œ˜sÇ9E6ÇdÆ'$`…³½í+Å)?ÉêL!€ûï5=‚ ðz #zC5ššÔ°( ¦%b"•ß ÿŒ .ByŸztF¡±…™Ë8EñŠ¥«ˆJ“ µñ5¼R¶C•êQ4{íh €Ïé1ìR%z÷ŠÚAÜ»¡nÝãÔa u L ¡¢ºHóˆ×Sû¡Z©·ô Ð²Ó¾Ö(Bóþ@mÃ@=Ò³´×;ƒØ=åBE-ç{Ôª”à‰jgÓP¡äïd" ‹g ) ê£Ã}„6ãF9îHHm@Û%ÿ³¯ Œ"©Ab¢æTcá šzÛ¢» n]çŽ=‰×VÊWÇ‘%º­³‹óûÙݼ\D+'[y˜ô²&v¨ïûƔ܈ó!àÐÔüGc Rv¤êÂõlt‹|#¤ ÷w%Uj}—˜Ë8[MÃbœú£'Ù“«ëkâA,hõ¦Y†¶S¦åÛmdÒxS;WƒL5ÈÒ/öä¯YZä­ùɼïFWâÙësY¢$[Ý6Õ;p§Yª2¡ϧ¨·{ݶg´¥ñe¶õZ[" úƒ¼üëdöç;XÄö‹,n Û4«û4ÿU ÑŸª3ì„-9…î?ðÝë4~Ò·ðQbâî'¿Î¾ÌîSàyJÞAÀh ޼ðÈJ9HcKEñU;g*ôdâ©A¡/†:à†óx@ûÙ¼/ ¼ö¸ÒhAÖ"Ó¿±*}ùvúUú-L·(T\«8“Èr}¿ßgKÕo /óGâ'ç+#Ÿ¸º6Ê:’—ã·oQ⪬¸qZVúj¹†Ê! @íbcomposer-1.0.0-alpha6/.travis.ymlUX°Ü…P°Ü…PPKÌWAæ‰e†e| @íGcomposer-1.0.0-alpha6/README.mdUX5~XQ°Ü…PPKÌWA£âÁ]Šê* @¤ __MACOSX/composer-1.0.0-alpha6/._README.mdUX5~XQ°Ü…PPK û composer-1.0.0-beta2/tests/Composer/Test/Repository/Fixtures/artifacts/subfolder/package1.zip000066400000000000000000000002771267577262200323650ustar00rootroot00000000000000PKUÍB?´Î-CR composer.json«æR¥¼ÄÜT%+¥²Ô¼”ü"cý‚ÄäìÄôTC%ˆ|IeX>'3©(±¨" R^Tœ™Ÿ’1Õ3Ñ3VâªåPK?UÍB?´Î-CR €¤composer.jsonPK;ncomposer-1.0.0-beta2/tests/Composer/Test/Repository/Fixtures/path/000077500000000000000000000000001267577262200251465ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Repository/Fixtures/path/with-version/000077500000000000000000000000001267577262200276045ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Repository/Fixtures/path/with-version/composer.json000066400000000000000000000000711267577262200323240ustar00rootroot00000000000000{ "name": "test/path-versioned", "version": "0.0.2" }composer-1.0.0-beta2/tests/Composer/Test/Repository/Fixtures/path/without-version/000077500000000000000000000000001267577262200303345ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Repository/Fixtures/path/without-version/composer.json000066400000000000000000000000451267577262200330550ustar00rootroot00000000000000{ "name": "test/path-unversioned" }composer-1.0.0-beta2/tests/Composer/Test/Repository/PathRepositoryTest.php000066400000000000000000000076711267577262200267610ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; use Composer\Package\Loader\ArrayLoader; use Composer\Semver\VersionParser; use Composer\TestCase; class PathRepositoryTest extends TestCase { public function testLoadPackageFromFileSystemWithVersion() { $ioInterface = $this->getMockBuilder('Composer\IO\IOInterface') ->getMock(); $config = new \Composer\Config(); $loader = new ArrayLoader(new VersionParser()); $versionGuesser = null; $repositoryUrl = implode(DIRECTORY_SEPARATOR, array(__DIR__, 'Fixtures', 'path', 'with-version')); $repository = new PathRepository(array('url' => $repositoryUrl), $ioInterface, $config, $loader); $repository->getPackages(); $this->assertEquals(1, $repository->count()); $this->assertTrue($repository->hasPackage($this->getPackage('test/path-versioned', '0.0.2'))); } public function testLoadPackageFromFileSystemWithoutVersion() { $ioInterface = $this->getMockBuilder('Composer\IO\IOInterface') ->getMock(); $config = new \Composer\Config(); $loader = new ArrayLoader(new VersionParser()); $versionGuesser = null; $repositoryUrl = implode(DIRECTORY_SEPARATOR, array(__DIR__, 'Fixtures', 'path', 'without-version')); $repository = new PathRepository(array('url' => $repositoryUrl), $ioInterface, $config, $loader); $packages = $repository->getPackages(); $this->assertEquals(1, $repository->count()); $package = $packages[0]; $this->assertEquals('test/path-unversioned', $package->getName()); $packageVersion = $package->getVersion(); $this->assertTrue(!empty($packageVersion)); } public function testLoadPackageFromFileSystemWithWildcard() { $ioInterface = $this->getMockBuilder('Composer\IO\IOInterface') ->getMock(); $config = new \Composer\Config(); $loader = new ArrayLoader(new VersionParser()); $versionGuesser = null; $repositoryUrl = implode(DIRECTORY_SEPARATOR, array(__DIR__, 'Fixtures', 'path', '*')); $repository = new PathRepository(array('url' => $repositoryUrl), $ioInterface, $config, $loader); $packages = $repository->getPackages(); $names = array(); $this->assertEquals(2, $repository->count()); $package = $packages[0]; $names[] = $package->getName(); $package = $packages[1]; $names[] = $package->getName(); sort($names); $this->assertEquals(array('test/path-unversioned', 'test/path-versioned'), $names); } /** * Verify relative repository URLs remain relative, see #4439 */ public function testUrlRemainsRelative() { $ioInterface = $this->getMockBuilder('Composer\IO\IOInterface') ->getMock(); $config = new \Composer\Config(); $loader = new ArrayLoader(new VersionParser()); $versionGuesser = null; $repositoryUrl = implode(DIRECTORY_SEPARATOR, array(__DIR__, 'Fixtures', 'path', 'with-version')); $relativeUrl = ltrim(substr($repositoryUrl, strlen(getcwd())), DIRECTORY_SEPARATOR); $repository = new PathRepository(array('url' => $relativeUrl), $ioInterface, $config, $loader); $packages = $repository->getPackages(); $this->assertEquals(1, $repository->count()); $package = $packages[0]; $this->assertEquals('test/path-versioned', $package->getName()); // Convert platform specific separators back to generic URL slashes $relativeUrl = str_replace(DIRECTORY_SEPARATOR, '/', $relativeUrl); $this->assertEquals(rtrim($relativeUrl, '/'), rtrim($package->getDistUrl(), '/')); } } composer-1.0.0-beta2/tests/Composer/Test/Repository/Pear/000077500000000000000000000000001267577262200232705ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Repository/Pear/ChannelReaderTest.php000066400000000000000000000144461267577262200273450ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Pear; use Composer\TestCase; use Composer\Semver\VersionParser; use Composer\Semver\Constraint\Constraint; use Composer\Package\Link; use Composer\Package\CompletePackage; use Composer\Test\Mock\RemoteFilesystemMock; class ChannelReaderTest extends TestCase { public function testShouldBuildPackagesFromPearSchema() { $rfs = new RemoteFilesystemMock(array( 'http://pear.net/channel.xml' => file_get_contents(__DIR__ . '/Fixtures/channel.1.1.xml'), 'http://test.loc/rest11/c/categories.xml' => file_get_contents(__DIR__ . '/Fixtures/Rest1.1/categories.xml'), 'http://test.loc/rest11/c/Default/packagesinfo.xml' => file_get_contents(__DIR__ . '/Fixtures/Rest1.1/packagesinfo.xml'), )); $reader = new \Composer\Repository\Pear\ChannelReader($rfs); $channelInfo = $reader->read('http://pear.net/'); $packages = $channelInfo->getPackages(); $this->assertCount(3, $packages); $this->assertEquals('HTTP_Client', $packages[0]->getPackageName()); $this->assertEquals('HTTP_Request', $packages[1]->getPackageName()); $this->assertEquals('MDB2', $packages[2]->getPackageName()); $mdb2releases = $packages[2]->getReleases(); $this->assertEquals(9, count($mdb2releases['2.4.0']->getDependencyInfo()->getOptionals())); } public function testShouldSelectCorrectReader() { $rfs = new RemoteFilesystemMock(array( 'http://pear.1.0.net/channel.xml' => file_get_contents(__DIR__ . '/Fixtures/channel.1.0.xml'), 'http://test.loc/rest10/p/packages.xml' => file_get_contents(__DIR__ . '/Fixtures/Rest1.0/packages.xml'), 'http://test.loc/rest10/p/http_client/info.xml' => file_get_contents(__DIR__ . '/Fixtures/Rest1.0/http_client_info.xml'), 'http://test.loc/rest10/p/http_request/info.xml' => file_get_contents(__DIR__ . '/Fixtures/Rest1.0/http_request_info.xml'), 'http://pear.1.1.net/channel.xml' => file_get_contents(__DIR__ . '/Fixtures/channel.1.1.xml'), 'http://test.loc/rest11/c/categories.xml' => file_get_contents(__DIR__ . '/Fixtures/Rest1.1/categories.xml'), 'http://test.loc/rest11/c/Default/packagesinfo.xml' => file_get_contents(__DIR__ . '/Fixtures/Rest1.1/packagesinfo.xml'), )); $reader = new \Composer\Repository\Pear\ChannelReader($rfs); $reader->read('http://pear.1.0.net/'); $reader->read('http://pear.1.1.net/'); } public function testShouldCreatePackages() { $reader = $this->getMockBuilder('\Composer\Repository\PearRepository') ->disableOriginalConstructor() ->getMock(); $ref = new \ReflectionMethod($reader, 'buildComposerPackages'); $ref->setAccessible(true); $channelInfo = new ChannelInfo( 'test.loc', 'test', array( new PackageInfo( 'test.loc', 'sample', 'license', 'shortDescription', 'description', array( '1.0.0.1' => new ReleaseInfo( 'stable', new DependencyInfo( array( new DependencyConstraint( 'required', '> 5.2.0.0', 'php', '' ), new DependencyConstraint( 'conflicts', '== 2.5.6.0', 'pear.php.net', 'broken' ), ), array( '*' => array( new DependencyConstraint( 'optional', '*', 'ext', 'xml' ), ), ) ) ), ) ), ) ); $packages = $ref->invoke($reader, $channelInfo, new VersionParser()); $expectedPackage = new CompletePackage('pear-test.loc/sample', '1.0.0.1', '1.0.0.1'); $expectedPackage->setType('pear-library'); $expectedPackage->setDistType('file'); $expectedPackage->setDescription('description'); $expectedPackage->setLicense(array('license')); $expectedPackage->setDistUrl("http://test.loc/get/sample-1.0.0.1.tgz"); $expectedPackage->setAutoload(array('classmap' => array(''))); $expectedPackage->setIncludePaths(array('/')); $expectedPackage->setRequires(array( new Link('pear-test.loc/sample', 'php', $this->createConstraint('>', '5.2.0.0'), 'required', '> 5.2.0.0'), )); $expectedPackage->setConflicts(array( new Link('pear-test.loc/sample', 'pear-pear.php.net/broken', $this->createConstraint('==', '2.5.6.0'), 'conflicts', '== 2.5.6.0'), )); $expectedPackage->setSuggests(array( '*-ext-xml' => '*', )); $expectedPackage->setReplaces(array( new Link('pear-test.loc/sample', 'pear-test/sample', new Constraint('==', '1.0.0.1'), 'replaces', '== 1.0.0.1'), )); $this->assertCount(1, $packages); $this->assertEquals($expectedPackage, $packages[0], 0, 1); } private function createConstraint($operator, $version) { $constraint = new Constraint($operator, $version); $constraint->setPrettyString($operator.' '.$version); return $constraint; } } composer-1.0.0-beta2/tests/Composer/Test/Repository/Pear/ChannelRest10ReaderTest.php000066400000000000000000000036221267577262200303360ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Pear; use Composer\TestCase; use Composer\Test\Mock\RemoteFilesystemMock; class ChannelRest10ReaderTest extends TestCase { public function testShouldBuildPackagesFromPearSchema() { $rfs = new RemoteFilesystemMock(array( 'http://test.loc/rest10/p/packages.xml' => file_get_contents(__DIR__ . '/Fixtures/Rest1.0/packages.xml'), 'http://test.loc/rest10/p/http_client/info.xml' => file_get_contents(__DIR__ . '/Fixtures/Rest1.0/http_client_info.xml'), 'http://test.loc/rest10/r/http_client/allreleases.xml' => file_get_contents(__DIR__ . '/Fixtures/Rest1.0/http_client_allreleases.xml'), 'http://test.loc/rest10/r/http_client/deps.1.2.1.txt' => file_get_contents(__DIR__ . '/Fixtures/Rest1.0/http_client_deps.1.2.1.txt'), 'http://test.loc/rest10/p/http_request/info.xml' => file_get_contents(__DIR__ . '/Fixtures/Rest1.0/http_request_info.xml'), 'http://test.loc/rest10/r/http_request/allreleases.xml' => file_get_contents(__DIR__ . '/Fixtures/Rest1.0/http_request_allreleases.xml'), 'http://test.loc/rest10/r/http_request/deps.1.4.0.txt' => file_get_contents(__DIR__ . '/Fixtures/Rest1.0/http_request_deps.1.4.0.txt'), )); $reader = new \Composer\Repository\Pear\ChannelRest10Reader($rfs); /** @var $packages \Composer\Package\PackageInterface[] */ $packages = $reader->read('http://test.loc/rest10'); $this->assertCount(2, $packages); $this->assertEquals('HTTP_Client', $packages[0]->getPackageName()); $this->assertEquals('HTTP_Request', $packages[1]->getPackageName()); } } composer-1.0.0-beta2/tests/Composer/Test/Repository/Pear/ChannelRest11ReaderTest.php000066400000000000000000000024511267577262200303360ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Pear; use Composer\TestCase; use Composer\Test\Mock\RemoteFilesystemMock; class ChannelRest11ReaderTest extends TestCase { public function testShouldBuildPackagesFromPearSchema() { $rfs = new RemoteFilesystemMock(array( 'http://pear.1.1.net/channel.xml' => file_get_contents(__DIR__ . '/Fixtures/channel.1.1.xml'), 'http://test.loc/rest11/c/categories.xml' => file_get_contents(__DIR__ . '/Fixtures/Rest1.1/categories.xml'), 'http://test.loc/rest11/c/Default/packagesinfo.xml' => file_get_contents(__DIR__ . '/Fixtures/Rest1.1/packagesinfo.xml'), )); $reader = new \Composer\Repository\Pear\ChannelRest11Reader($rfs); /** @var $packages \Composer\Package\PackageInterface[] */ $packages = $reader->read('http://test.loc/rest11'); $this->assertCount(3, $packages); $this->assertEquals('HTTP_Client', $packages[0]->getPackageName()); $this->assertEquals('HTTP_Request', $packages[1]->getPackageName()); } } composer-1.0.0-beta2/tests/Composer/Test/Repository/Pear/Fixtures/000077500000000000000000000000001267577262200251015ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Repository/Pear/Fixtures/DependencyParserTestData.json000066400000000000000000000100761267577262200326650ustar00rootroot00000000000000[ { "expected": [ { "type" : "required", "constraint" : "*", "channel" : "pear.php.net", "name" : "Foo" } ], "1.0": [ { "type": "pkg", "rel": "has", "name": "Foo" } ], "2.0": { "required": { "package": { "name": "Foo", "channel": "pear.php.net" } } } }, { "expected": [ { "type" : "required", "constraint" : ">1.0.0.0", "channel" : "pear.php.net", "name" : "Foo" } ], "1.0": [ { "type": "pkg", "rel": "gt", "version": "1.0.0", "name": "Foo" } ], "2.0": { "required": { "package": { "name": "Foo", "channel": "pear.php.net", "min": "1.0.0", "exclude": "1.0.0" } } } }, { "expected": [ { "type" : "conflicts", "constraint" : "*", "channel" : "pear.php.net", "name" : "Foo" } ], "1.0": [ { "type": "pkg", "rel": "not", "name": "Foo" } ], "2.0": { "required": { "package": { "name": "Foo", "channel": "pear.php.net", "conflicts": true } } } }, { "expected": [ { "type" : "required", "constraint" : ">=1.0.0.0", "channel" : "pear.php.net", "name" : "Foo" }, { "type" : "required", "constraint" : "<2.0.0.0", "channel" : "pear.php.net", "name" : "Foo" } ], "1.0": [ { "type": "pkg", "rel": "ge", "version": "1.0.0", "name": "Foo" }, { "type": "pkg", "rel": "lt", "version": "2.0.0", "name": "Foo" } ], "2.0": { "required": { "package": [ { "name": "Foo", "channel": "pear.php.net", "min": "1.0.0" }, { "name": "Foo", "channel": "pear.php.net", "max": "2.0.0", "exclude": "2.0.0" } ] } } }, { "expected": [ { "type" : "required", "constraint" : ">=5.3.0.0", "channel" : "php", "name" : "" } ], "1.0": [ { "type": "php", "rel": "ge", "version": "5.3"} ], "2.0": { "required": { "php": { "min": "5.3" } } } }, { "expected": [ { "type" : "required", "constraint" : "*", "channel" : "ext", "name" : "xmllib" } ], "1.0": [ { "type": "ext", "rel": "has", "name": "xmllib"} ], "2.0": { "required": { "extension": [ { "name": "xmllib" } ] } } }, { "expected": [ { "type" : "optional", "constraint" : "*", "channel" : "ext", "name" : "xmllib" } ], "1.0": false, "2.0": { "optional": { "extension": [ { "name": "xmllib" } ] } } } ]composer-1.0.0-beta2/tests/Composer/Test/Repository/Pear/Fixtures/Rest1.0/000077500000000000000000000000001267577262200262355ustar00rootroot00000000000000http_client_allreleases.xml000066400000000000000000000006241267577262200335730ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Repository/Pear/Fixtures/Rest1.0

      HTTP_Client

      pear.net 1.2.1 stable
      composer-1.0.0-beta2/tests/Composer/Test/Repository/Pear/Fixtures/Rest1.0/http_client_deps.1.2.1.txt000066400000000000000000000003301267577262200327600ustar00rootroot00000000000000a:1:{s:8:"required";a:3:{s:3:"php";a:1:{s:3:"min";s:5:"4.3.0";}s:13:"pearinstaller";a:1:{s:3:"min";s:5:"1.4.3";}s:7:"package";a:3:{s:4:"name";s:12:"HTTP_Request";s:7:"channel";s:8:"pear.net";s:3:"min";s:5:"1.4.0";}}}composer-1.0.0-beta2/tests/Composer/Test/Repository/Pear/Fixtures/Rest1.0/http_client_info.xml000066400000000000000000000016711267577262200323140ustar00rootroot00000000000000

      HTTP_Client pear.net Default BSD Easy way to perform multiple HTTP requests and process their results The HTTP_Client class wraps around HTTP_Request and provides a higher level interface for performing multiple HTTP requests. Features: * Manages cookies and referrers between requests * Handles HTTP redirection * Has methods to set default headers and request parameters * Implements the Subject-Observer design pattern: the base class sends events to listeners that do the response processing.

      http_request_allreleases.xml000066400000000000000000000006251267577262200340060ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Repository/Pear/Fixtures/Rest1.0

      HTTP_Request

      pear.net 1.4.0 stable
      http_request_deps.1.4.0.txt000066400000000000000000000004761267577262200331270ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Repository/Pear/Fixtures/Rest1.0a:1:{s:8:"required";a:3:{s:3:"php";a:1:{s:3:"min";s:5:"4.0.0";}s:13:"pearinstaller";a:1:{s:3:"min";s:7:"1.4.0b1";}s:7:"package";a:2:{i:0;a:3:{s:4:"name";s:7:"Net_URL";s:7:"channel";s:12:"pear.dev.loc";s:3:"min";s:6:"1.0.12";}i:1;a:3:{s:4:"name";s:10:"Net_Socket";s:7:"channel";s:8:"pear.net";s:3:"min";s:5:"1.0.2";}}}}composer-1.0.0-beta2/tests/Composer/Test/Repository/Pear/Fixtures/Rest1.0/http_request_info.xml000066400000000000000000000011761267577262200325260ustar00rootroot00000000000000

      HTTP_Request pear.net Default BSD Provides an easy way to perform HTTP requests Supports GET/POST/HEAD/TRACE/PUT/DELETE, Basic authentication, Proxy, Proxy Authentication, SSL, file uploads etc.

      composer-1.0.0-beta2/tests/Composer/Test/Repository/Pear/Fixtures/Rest1.0/packages.xml000066400000000000000000000005601267577262200305360ustar00rootroot00000000000000 pear.net

      HTTP_Client

      HTTP_Request

      composer-1.0.0-beta2/tests/Composer/Test/Repository/Pear/Fixtures/Rest1.1/000077500000000000000000000000001267577262200262365ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Repository/Pear/Fixtures/Rest1.1/categories.xml000066400000000000000000000006021267577262200311030ustar00rootroot00000000000000 pear.net Default composer-1.0.0-beta2/tests/Composer/Test/Repository/Pear/Fixtures/Rest1.1/packagesinfo.xml000066400000000000000000000202471267577262200314170ustar00rootroot00000000000000

      HTTP_Client pear.net Default BSD Easy way to perform multiple HTTP requests and process their results The HTTP_Client class wraps around HTTP_Request and provides a higher level interface for performing multiple HTTP requests. Features: * Manages cookies and referrers between requests * Handles HTTP redirection * Has methods to set default headers and request parameters * Implements the Subject-Observer design pattern: the base class sends events to listeners that do the response processing.

      1.2.1 stable 1.2.1 a:1:{s:8:"required";a:3:{s:3:"php";a:1:{s:3:"min";s:5:"4.3.0";}s:13:"pearinstaller";a:1:{s:3:"min";s:5:"1.4.3";}s:7:"package";a:3:{s:4:"name";s:12:"HTTP_Request";s:7:"channel";s:8:"pear.net";s:3:"min";s:5:"1.4.0";}}}

      HTTP_Request pear.net Default BSD Provides an easy way to perform HTTP requests Supports GET/POST/HEAD/TRACE/PUT/DELETE, Basic authentication, Proxy, Proxy Authentication, SSL, file uploads etc.

      1.4.0 stable 1.4.0 a:1:{s:8:"required";a:3:{s:3:"php";a:1:{s:3:"min";s:5:"4.0.0";}s:13:"pearinstaller";a:1:{s:3:"min";s:7:"1.4.0b1";}s:7:"package";a:2:{i:0;a:3:{s:4:"name";s:7:"Net_URL";s:7:"channel";s:12:"pear.php.net";s:3:"min";s:6:"1.0.12";}i:1;a:3:{s:4:"name";s:10:"Net_Socket";s:7:"channel";s:12:"pear.php.net";s:3:"min";s:5:"1.0.2";}}}}

      MDB2 pear.net Database BSD License database abstraction layer PEAR MDB2 is a merge of the PEAR DB and Metabase php database abstraction layers. It provides a common API for all supported RDBMS. The main difference to most other DB abstraction packages is that MDB2 goes much further to ensure portability. MDB2 provides most of its many features optionally that can be used to construct portable SQL statements: * Object-Oriented API * A DSN (data source name) or array format for specifying database servers * Datatype abstraction and on demand datatype conversion * Various optional fetch modes to fix portability issues * Portable error codes * Sequential and non sequential row fetching as well as bulk fetching * Ability to make buffered and unbuffered queries * Ordered array and associative array for the fetched rows * Prepare/execute (bind) named and unnamed placeholder emulation * Sequence/autoincrement emulation * Replace emulation * Limited sub select emulation * Row limit emulation * Transactions/savepoint support * Large Object support * Index/Unique Key/Primary Key support * Pattern matching abstraction * Module framework to load advanced functionality on demand * Ability to read the information schema * RDBMS management methods (creating, dropping, altering) * Reverse engineering schemas from an existing database * SQL function call abstraction * Full integration into the PEAR Framework * PHPDoc API documentation

      2.4.0stable 2.4.0 a:2:{s:8:"required";a:3:{s:3:"php";a:1:{s:3:"min";s:5:"4.3.2";}s:13:"pearinstaller";a:1:{s:3:"min";s:7:"1.4.0b1";}s:7:"package";a:3:{s:4:"name";s:4:"PEAR";s:7:"channel";s:12:"pear.php.net";s:3:"min";s:5:"1.3.6";}}s:5:"group";a:9:{i:0;a:2:{s:7:"attribs";a:2:{s:4:"hint";s:29:"Frontbase SQL driver for MDB2";s:4:"name";s:5:"fbsql";}s:10:"subpackage";a:3:{s:4:"name";s:17:"MDB2_Driver_fbsql";s:7:"channel";s:12:"pear.php.net";s:3:"min";s:5:"0.3.0";}}i:1;a:2:{s:7:"attribs";a:2:{s:4:"hint";s:34:"Interbase/Firebird driver for MDB2";s:4:"name";s:5:"ibase";}s:10:"subpackage";a:3:{s:4:"name";s:17:"MDB2_Driver_ibase";s:7:"channel";s:12:"pear.php.net";s:3:"min";s:5:"1.4.0";}}i:2;a:2:{s:7:"attribs";a:2:{s:4:"hint";s:21:"MySQL driver for MDB2";s:4:"name";s:5:"mysql";}s:10:"subpackage";a:3:{s:4:"name";s:17:"MDB2_Driver_mysql";s:7:"channel";s:12:"pear.php.net";s:3:"min";s:5:"1.4.0";}}i:3;a:2:{s:7:"attribs";a:2:{s:4:"hint";s:22:"MySQLi driver for MDB2";s:4:"name";s:6:"mysqli";}s:10:"subpackage";a:3:{s:4:"name";s:18:"MDB2_Driver_mysqli";s:7:"channel";s:12:"pear.php.net";s:3:"min";s:5:"1.4.0";}}i:4;a:2:{s:7:"attribs";a:2:{s:4:"hint";s:29:"MS SQL Server driver for MDB2";s:4:"name";s:5:"mssql";}s:10:"subpackage";a:3:{s:4:"name";s:17:"MDB2_Driver_mssql";s:7:"channel";s:12:"pear.php.net";s:3:"min";s:5:"1.2.0";}}i:5;a:2:{s:7:"attribs";a:2:{s:4:"hint";s:22:"Oracle driver for MDB2";s:4:"name";s:4:"oci8";}s:10:"subpackage";a:3:{s:4:"name";s:16:"MDB2_Driver_oci8";s:7:"channel";s:12:"pear.php.net";s:3:"min";s:5:"1.4.0";}}i:6;a:2:{s:7:"attribs";a:2:{s:4:"hint";s:26:"PostgreSQL driver for MDB2";s:4:"name";s:5:"pgsql";}s:10:"subpackage";a:3:{s:4:"name";s:17:"MDB2_Driver_pgsql";s:7:"channel";s:12:"pear.php.net";s:3:"min";s:5:"1.4.0";}}i:7;a:2:{s:7:"attribs";a:2:{s:4:"hint";s:24:"Querysim driver for MDB2";s:4:"name";s:8:"querysim";}s:10:"subpackage";a:3:{s:4:"name";s:20:"MDB2_Driver_querysim";s:7:"channel";s:12:"pear.php.net";s:3:"min";s:5:"0.6.0";}}i:8;a:2:{s:7:"attribs";a:2:{s:4:"hint";s:23:"SQLite2 driver for MDB2";s:4:"name";s:6:"sqlite";}s:10:"subpackage";a:3:{s:4:"name";s:18:"MDB2_Driver_sqlite";s:7:"channel";s:12:"pear.php.net";s:3:"min";s:5:"1.4.0";}}}}
      composer-1.0.0-beta2/tests/Composer/Test/Repository/Pear/Fixtures/channel.1.0.xml000066400000000000000000000010041267577262200275230ustar00rootroot00000000000000 pear.net Test PEAR channel test_alias http://test.loc/rest10/ composer-1.0.0-beta2/tests/Composer/Test/Repository/Pear/Fixtures/channel.1.1.xml000066400000000000000000000010041267577262200275240ustar00rootroot00000000000000 pear.net Test PEAR channel test_alias http://test.loc/rest11/ composer-1.0.0-beta2/tests/Composer/Test/Repository/Pear/PackageDependencyParserTest.php000066400000000000000000000033661267577262200313600ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository\Pear; use Composer\TestCase; class PackageDependencyParserTest extends TestCase { /** * @dataProvider dataProvider10 * @param $expected * @param $data10 * @param $data20 */ public function testShouldParseDependencies($expected, $data10, $data20) { $expectedDependencies = array(); foreach ($expected as $expectedItem) { $expectedDependencies[] = new DependencyConstraint( $expectedItem['type'], $expectedItem['constraint'], $expectedItem['channel'], $expectedItem['name'] ); } $parser = new PackageDependencyParser(); if (false !== $data10) { $result = $parser->buildDependencyInfo($data10); $this->assertEquals($expectedDependencies, $result->getRequires() + $result->getOptionals(), "Failed for package.xml 1.0 format"); } if (false !== $data20) { $result = $parser->buildDependencyInfo($data20); $this->assertEquals($expectedDependencies, $result->getRequires() + $result->getOptionals(), "Failed for package.xml 2.0 format"); } } public function dataProvider10() { $data = json_decode(file_get_contents(__DIR__.'/Fixtures/DependencyParserTestData.json'), true); if (0 !== json_last_error()) { throw new \PHPUnit_Framework_Exception('Invalid json file.'); } return $data; } } composer-1.0.0-beta2/tests/Composer/Test/Repository/PearRepositoryTest.php000066400000000000000000000104551267577262200267460ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; use Composer\TestCase; /** * @group legacy */ class PearRepositoryTest extends TestCase { /** * @var PearRepository */ private $repository; /** * @var \PHPUnit_Framework_MockObject_MockObject */ private $remoteFilesystem; public function testComposerShouldSetIncludePath() { $url = 'pear.phpmd.org'; if (!@file_get_contents('http://'.$url)) { $this->markTestSkipped('Repository '.$url.' appears to be unreachable'); } $expectedPackages = array( array('name' => 'pear-pear.phpmd.org/PHP_PMD', 'version' => '1.3.3'), ); $repoConfig = array( 'url' => $url, ); $this->createRepository($repoConfig); foreach ($expectedPackages as $expectedPackage) { $package = $this->repository->findPackage($expectedPackage['name'], $expectedPackage['version']); $this->assertInstanceOf('Composer\Package\PackageInterface', $package, 'Expected package ' . $expectedPackage['name'] . ', version ' . $expectedPackage['version'] . ' not found in pear channel ' . $url ); $this->assertSame(array('/'), $package->getIncludePaths()); } } /** * @dataProvider repositoryDataProvider * @param string $url * @param array $expectedPackages */ public function testRepositoryRead($url, array $expectedPackages) { $repoConfig = array( 'url' => $url, ); if (!@file_get_contents('http://'.$url)) { $this->markTestSkipped('Repository '.$url.' appears to be unreachable'); } $this->createRepository($repoConfig); foreach ($expectedPackages as $expectedPackage) { $this->assertInstanceOf('Composer\Package\PackageInterface', $this->repository->findPackage($expectedPackage['name'], $expectedPackage['version']), 'Expected package ' . $expectedPackage['name'] . ', version ' . $expectedPackage['version'] . ' not found in pear channel ' . $url ); } } public function repositoryDataProvider() { return array( array( 'pear.php.net', array( array('name' => 'pear-pear.php.net/PEAR', 'version' => '1.9.4'), ), ), array( 'pear.pdepend.org', array( array('name' => 'pear-pear.pdepend.org/PHP_Depend', 'version' => '1.0.5'), ), ), array( 'pear.phpmd.org', array( array('name' => 'pear-pear.phpmd.org/PHP_PMD', 'version' => '1.3.3'), ), ), array( 'pear.doctrine-project.org', array( array('name' => 'pear-pear.doctrine-project.org/DoctrineORM', 'version' => '2.2.2'), ), ), array( 'pear.symfony-project.com', array( array('name' => 'pear-pear.symfony-project.com/YAML', 'version' => '1.0.6'), ), ), array( 'pear.pirum-project.org', array( array('name' => 'pear-pear.pirum-project.org/Pirum', 'version' => '1.1.4'), ), ), ); } private function createRepository($repoConfig) { $ioInterface = $this->getMockBuilder('Composer\IO\IOInterface') ->getMock(); $config = new \Composer\Config(); $this->remoteFilesystem = $this->getMockBuilder('Composer\Util\RemoteFilesystem') ->disableOriginalConstructor() ->getMock(); $this->repository = new PearRepository($repoConfig, $ioInterface, $config, null); } protected function tearDown() { $this->repository = null; $this->remoteFilesystem = null; } } composer-1.0.0-beta2/tests/Composer/Test/Repository/RepositoryManagerTest.php000066400000000000000000000073371267577262200274360ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; use Composer\TestCase; use Composer\Util\Filesystem; class RepositoryManagerTest extends TestCase { protected $tmpdir; public function setUp() { $this->tmpdir = $this->getUniqueTmpDirectory(); } public function tearDown() { if (is_dir($this->tmpdir)) { $fs = new Filesystem(); $fs->removeDirectory($this->tmpdir); } } public function testPrepend() { $rm = new RepositoryManager( $this->getMock('Composer\IO\IOInterface'), $this->getMock('Composer\Config'), $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher')->disableOriginalConstructor()->getMock() ); $repository1 = $this->getMock('Composer\Repository\RepositoryInterface'); $repository2 = $this->getMock('Composer\Repository\RepositoryInterface'); $rm->addRepository($repository1); $rm->prependRepository($repository2); $this->assertEquals(array($repository2, $repository1), $rm->getRepositories()); } /** * @dataProvider creationCases */ public function testRepoCreation($type, $options, $exception = null) { if ($exception) { $this->setExpectedException($exception); } $rm = new RepositoryManager( $this->getMock('Composer\IO\IOInterface'), $config = $this->getMock('Composer\Config', array('get')), $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher')->disableOriginalConstructor()->getMock() ); $tmpdir = $this->tmpdir; $config ->expects($this->any()) ->method('get') ->will($this->returnCallback(function ($arg) use ($tmpdir) { return 'cache-repo-dir' === $arg ? $tmpdir : null; })) ; $rm->setRepositoryClass('composer', 'Composer\Repository\ComposerRepository'); $rm->setRepositoryClass('vcs', 'Composer\Repository\VcsRepository'); $rm->setRepositoryClass('package', 'Composer\Repository\PackageRepository'); $rm->setRepositoryClass('pear', 'Composer\Repository\PearRepository'); $rm->setRepositoryClass('git', 'Composer\Repository\VcsRepository'); $rm->setRepositoryClass('svn', 'Composer\Repository\VcsRepository'); $rm->setRepositoryClass('perforce', 'Composer\Repository\VcsRepository'); $rm->setRepositoryClass('hg', 'Composer\Repository\VcsRepository'); $rm->setRepositoryClass('artifact', 'Composer\Repository\ArtifactRepository'); $rm->createRepository('composer', array('url' => 'http://example.org')); $rm->createRepository($type, $options); } public function creationCases() { $cases = array( array('composer', array('url' => 'http://example.org')), array('vcs', array('url' => 'http://github.com/foo/bar')), array('git', array('url' => 'http://github.com/foo/bar')), array('git', array('url' => 'git@example.org:foo/bar.git')), array('svn', array('url' => 'svn://example.org/foo/bar')), array('pear', array('url' => 'http://pear.example.org/foo')), array('package', array('package' => array())), array('invalid', array(), 'InvalidArgumentException'), ); if (class_exists('ZipArchive')) { $cases[] = array('artifact', array('url' => '/path/to/zips')); } return $cases; } } composer-1.0.0-beta2/tests/Composer/Test/Repository/Vcs/000077500000000000000000000000001267577262200231345ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Repository/Vcs/GitHubDriverTest.php000066400000000000000000000301341267577262200270440ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Repository\Vcs; use Composer\Downloader\TransportException; use Composer\Repository\Vcs\GitHubDriver; use Composer\TestCase; use Composer\Util\Filesystem; use Composer\Config; class GitHubDriverTest extends TestCase { private $home; private $config; public function setUp() { $this->home = $this->getUniqueTmpDirectory(); $this->config = new Config(); $this->config->merge(array( 'config' => array( 'home' => $this->home, ), )); } public function tearDown() { $fs = new Filesystem; $fs->removeDirectory($this->home); } public function testPrivateRepository() { $repoUrl = 'http://github.com/composer/packagist'; $repoApiUrl = 'https://api.github.com/repos/composer/packagist'; $repoSshUrl = 'git@github.com:composer/packagist.git'; $identifier = 'v0.0.0'; $sha = 'SOMESHA'; $io = $this->getMock('Composer\IO\IOInterface'); $io->expects($this->any()) ->method('isInteractive') ->will($this->returnValue(true)); $remoteFilesystem = $this->getMockBuilder('Composer\Util\RemoteFilesystem') ->setConstructorArgs(array($io)) ->getMock(); $process = $this->getMock('Composer\Util\ProcessExecutor'); $process->expects($this->any()) ->method('execute') ->will($this->returnValue(1)); $remoteFilesystem->expects($this->at(0)) ->method('getContents') ->with($this->equalTo('github.com'), $this->equalTo($repoApiUrl), $this->equalTo(false)) ->will($this->throwException(new TransportException('HTTP/1.1 404 Not Found', 404))); $io->expects($this->once()) ->method('askAndHideAnswer') ->with($this->equalTo('Token (hidden): ')) ->will($this->returnValue('sometoken')); $io->expects($this->any()) ->method('setAuthentication') ->with($this->equalTo('github.com'), $this->matchesRegularExpression('{sometoken}'), $this->matchesRegularExpression('{x-oauth-basic}')); $remoteFilesystem->expects($this->at(1)) ->method('getContents') ->with($this->equalTo('github.com'), $this->equalTo('https://api.github.com/'), $this->equalTo(false)) ->will($this->returnValue('{}')); $remoteFilesystem->expects($this->at(2)) ->method('getContents') ->with($this->equalTo('github.com'), $this->equalTo($repoApiUrl), $this->equalTo(false)) ->will($this->returnValue('{"master_branch": "test_master", "private": true, "owner": {"login": "composer"}, "name": "packagist"}')); $configSource = $this->getMock('Composer\Config\ConfigSourceInterface'); $authConfigSource = $this->getMock('Composer\Config\ConfigSourceInterface'); $this->config->setConfigSource($configSource); $this->config->setAuthConfigSource($authConfigSource); $repoConfig = array( 'url' => $repoUrl, ); $gitHubDriver = new GitHubDriver($repoConfig, $io, $this->config, $process, $remoteFilesystem); $gitHubDriver->initialize(); $this->setAttribute($gitHubDriver, 'tags', array($identifier => $sha)); $this->assertEquals('test_master', $gitHubDriver->getRootIdentifier()); $dist = $gitHubDriver->getDist($sha); $this->assertEquals('zip', $dist['type']); $this->assertEquals('https://api.github.com/repos/composer/packagist/zipball/SOMESHA', $dist['url']); $this->assertEquals('SOMESHA', $dist['reference']); $source = $gitHubDriver->getSource($sha); $this->assertEquals('git', $source['type']); $this->assertEquals($repoSshUrl, $source['url']); $this->assertEquals('SOMESHA', $source['reference']); } public function testPublicRepository() { $repoUrl = 'http://github.com/composer/packagist'; $repoApiUrl = 'https://api.github.com/repos/composer/packagist'; $identifier = 'v0.0.0'; $sha = 'SOMESHA'; $io = $this->getMock('Composer\IO\IOInterface'); $io->expects($this->any()) ->method('isInteractive') ->will($this->returnValue(true)); $remoteFilesystem = $this->getMockBuilder('Composer\Util\RemoteFilesystem') ->setConstructorArgs(array($io)) ->getMock(); $remoteFilesystem->expects($this->at(0)) ->method('getContents') ->with($this->equalTo('github.com'), $this->equalTo($repoApiUrl), $this->equalTo(false)) ->will($this->returnValue('{"master_branch": "test_master", "owner": {"login": "composer"}, "name": "packagist"}')); $repoConfig = array( 'url' => $repoUrl, ); $repoUrl = 'https://github.com/composer/packagist.git'; $gitHubDriver = new GitHubDriver($repoConfig, $io, $this->config, null, $remoteFilesystem); $gitHubDriver->initialize(); $this->setAttribute($gitHubDriver, 'tags', array($identifier => $sha)); $this->assertEquals('test_master', $gitHubDriver->getRootIdentifier()); $dist = $gitHubDriver->getDist($sha); $this->assertEquals('zip', $dist['type']); $this->assertEquals('https://api.github.com/repos/composer/packagist/zipball/SOMESHA', $dist['url']); $this->assertEquals($sha, $dist['reference']); $source = $gitHubDriver->getSource($sha); $this->assertEquals('git', $source['type']); $this->assertEquals($repoUrl, $source['url']); $this->assertEquals($sha, $source['reference']); } public function testPublicRepository2() { $repoUrl = 'http://github.com/composer/packagist'; $repoApiUrl = 'https://api.github.com/repos/composer/packagist'; $identifier = 'feature/3.2-foo'; $sha = 'SOMESHA'; $io = $this->getMock('Composer\IO\IOInterface'); $io->expects($this->any()) ->method('isInteractive') ->will($this->returnValue(true)); $remoteFilesystem = $this->getMockBuilder('Composer\Util\RemoteFilesystem') ->setConstructorArgs(array($io)) ->getMock(); $remoteFilesystem->expects($this->at(0)) ->method('getContents') ->with($this->equalTo('github.com'), $this->equalTo($repoApiUrl), $this->equalTo(false)) ->will($this->returnValue('{"master_branch": "test_master", "owner": {"login": "composer"}, "name": "packagist"}')); $remoteFilesystem->expects($this->at(1)) ->method('getContents') ->with($this->equalTo('github.com'), $this->equalTo('https://api.github.com/repos/composer/packagist/contents/composer.json?ref=feature%2F3.2-foo'), $this->equalTo(false)) ->will($this->returnValue('{"encoding":"base64","content":"'.base64_encode('{"support": {"source": "'.$repoUrl.'" }}').'"}')); $remoteFilesystem->expects($this->at(2)) ->method('getContents') ->with($this->equalTo('github.com'), $this->equalTo('https://api.github.com/repos/composer/packagist/commits/feature%2F3.2-foo'), $this->equalTo(false)) ->will($this->returnValue('{"commit": {"committer":{ "date": "2012-09-10"}}}')); $repoConfig = array( 'url' => $repoUrl, ); $repoUrl = 'https://github.com/composer/packagist.git'; $gitHubDriver = new GitHubDriver($repoConfig, $io, $this->config, null, $remoteFilesystem); $gitHubDriver->initialize(); $this->setAttribute($gitHubDriver, 'tags', array($identifier => $sha)); $this->assertEquals('test_master', $gitHubDriver->getRootIdentifier()); $dist = $gitHubDriver->getDist($sha); $this->assertEquals('zip', $dist['type']); $this->assertEquals('https://api.github.com/repos/composer/packagist/zipball/SOMESHA', $dist['url']); $this->assertEquals($sha, $dist['reference']); $source = $gitHubDriver->getSource($sha); $this->assertEquals('git', $source['type']); $this->assertEquals($repoUrl, $source['url']); $this->assertEquals($sha, $source['reference']); $gitHubDriver->getComposerInformation($identifier); } public function testPrivateRepositoryNoInteraction() { $repoUrl = 'http://github.com/composer/packagist'; $repoApiUrl = 'https://api.github.com/repos/composer/packagist'; $repoSshUrl = 'git@github.com:composer/packagist.git'; $identifier = 'v0.0.0'; $sha = 'SOMESHA'; $process = $this->getMockBuilder('Composer\Util\ProcessExecutor') ->disableOriginalConstructor() ->getMock(); $io = $this->getMock('Composer\IO\IOInterface'); $io->expects($this->any()) ->method('isInteractive') ->will($this->returnValue(false)); $remoteFilesystem = $this->getMockBuilder('Composer\Util\RemoteFilesystem') ->setConstructorArgs(array($io)) ->getMock(); $remoteFilesystem->expects($this->at(0)) ->method('getContents') ->with($this->equalTo('github.com'), $this->equalTo($repoApiUrl), $this->equalTo(false)) ->will($this->throwException(new TransportException('HTTP/1.1 404 Not Found', 404))); // clean local clone if present $fs = new Filesystem(); $fs->removeDirectory(sys_get_temp_dir() . '/composer-test'); $process->expects($this->at(0)) ->method('execute') ->with($this->equalTo('git config github.accesstoken')) ->will($this->returnValue(1)); $process->expects($this->at(1)) ->method('execute') ->with($this->stringContains($repoSshUrl)) ->will($this->returnValue(0)); $process->expects($this->at(2)) ->method('execute') ->with($this->stringContains('git show-ref --tags')); $process->expects($this->at(3)) ->method('splitLines') ->will($this->returnValue(array($sha.' refs/tags/'.$identifier))); $process->expects($this->at(4)) ->method('execute') ->with($this->stringContains('git branch --no-color --no-abbrev -v')); $process->expects($this->at(5)) ->method('splitLines') ->will($this->returnValue(array(' test_master edf93f1fccaebd8764383dc12016d0a1a9672d89 Fix test & behavior'))); $process->expects($this->at(6)) ->method('execute') ->with($this->stringContains('git branch --no-color')); $process->expects($this->at(7)) ->method('splitLines') ->will($this->returnValue(array('* test_master'))); $repoConfig = array( 'url' => $repoUrl, ); $gitHubDriver = new GitHubDriver($repoConfig, $io, $this->config, $process, $remoteFilesystem); $gitHubDriver->initialize(); $this->assertEquals('test_master', $gitHubDriver->getRootIdentifier()); $dist = $gitHubDriver->getDist($sha); $this->assertEquals('zip', $dist['type']); $this->assertEquals('https://api.github.com/repos/composer/packagist/zipball/SOMESHA', $dist['url']); $this->assertEquals($sha, $dist['reference']); $source = $gitHubDriver->getSource($identifier); $this->assertEquals('git', $source['type']); $this->assertEquals($repoSshUrl, $source['url']); $this->assertEquals($identifier, $source['reference']); $source = $gitHubDriver->getSource($sha); $this->assertEquals('git', $source['type']); $this->assertEquals($repoSshUrl, $source['url']); $this->assertEquals($sha, $source['reference']); } protected function setAttribute($object, $attribute, $value) { $attr = new \ReflectionProperty($object, $attribute); $attr->setAccessible(true); $attr->setValue($object, $value); } } composer-1.0.0-beta2/tests/Composer/Test/Repository/Vcs/GitLabDriverTest.php000066400000000000000000000206511267577262200270270ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Repository\Vcs; use Composer\Repository\Vcs\GitLabDriver; use Composer\Config; use Composer\TestCase; use Composer\Util\Filesystem; /** * @author Jérôme Tamarelle */ class GitLabDriverTest extends TestCase { private $home; private $config; private $io; private $process; private $remoteFilesystem; public function setUp() { $this->home = $this->getUniqueTmpDirectory(); $this->config = new Config(); $this->config->merge(array( 'config' => array( 'home' => $this->home, 'gitlab-domains' => array('mycompany.com/gitlab', 'gitlab.com'), ), )); $this->io = $this->prophesize('Composer\IO\IOInterface'); $this->process = $this->prophesize('Composer\Util\ProcessExecutor'); $this->remoteFilesystem = $this->prophesize('Composer\Util\RemoteFilesystem'); } public function tearDown() { $fs = new Filesystem(); $fs->removeDirectory($this->home); } public function getInitializeUrls() { return array( array('https://gitlab.com/mygroup/myproject', 'https://gitlab.com/api/v3/projects/mygroup%2Fmyproject'), array('http://gitlab.com/mygroup/myproject', 'http://gitlab.com/api/v3/projects/mygroup%2Fmyproject'), array('git@gitlab.com:mygroup/myproject', 'https://gitlab.com/api/v3/projects/mygroup%2Fmyproject'), ); } /** * @dataProvider getInitializeUrls */ public function testInitialize($url, $apiUrl) { // @link http://doc.gitlab.com/ce/api/projects.html#get-single-project $projectData = <<remoteFilesystem ->getContents('gitlab.com', $apiUrl, false) ->willReturn($projectData) ->shouldBeCalledTimes(1) ; $driver = new GitLabDriver(array('url' => $url), $this->io->reveal(), $this->config, $this->process->reveal(), $this->remoteFilesystem->reveal()); $driver->initialize(); $this->assertEquals($apiUrl, $driver->getApiUrl(), 'API URL is derived from the repository URL'); $this->assertEquals('mymaster', $driver->getRootIdentifier(), 'Root identifier is the default branch in GitLab'); $this->assertEquals('git@gitlab.com:mygroup/myproject.git', $driver->getRepositoryUrl(), 'The repository URL is the SSH one by default'); $this->assertEquals('https://gitlab.com/mygroup/myproject', $driver->getUrl()); return $driver; } public function testGetDist() { $driver = $this->testInitialize('https://gitlab.com/mygroup/myproject', 'https://gitlab.com/api/v3/projects/mygroup%2Fmyproject'); $reference = 'c3ebdbf9cceddb82cd2089aaef8c7b992e536363'; $expected = array( 'type' => 'zip', 'url' => 'https://gitlab.com/api/v3/projects/mygroup%2Fmyproject/repository/archive.zip?sha='.$reference, 'reference' => $reference, 'shasum' => '', ); $this->assertEquals($expected, $driver->getDist($reference)); } public function testGetSource() { $driver = $this->testInitialize('https://gitlab.com/mygroup/myproject', 'https://gitlab.com/api/v3/projects/mygroup%2Fmyproject'); $reference = 'c3ebdbf9cceddb82cd2089aaef8c7b992e536363'; $expected = array( 'type' => 'git', 'url' => 'git@gitlab.com:mygroup/myproject.git', 'reference' => $reference, ); $this->assertEquals($expected, $driver->getSource($reference)); } public function testGetTags() { $driver = $this->testInitialize('https://gitlab.com/mygroup/myproject', 'https://gitlab.com/api/v3/projects/mygroup%2Fmyproject'); $apiUrl = 'https://gitlab.com/api/v3/projects/mygroup%2Fmyproject/repository/tags'; // @link http://doc.gitlab.com/ce/api/repositories.html#list-project-repository-tags $tagData = <<remoteFilesystem ->getContents('gitlab.com', $apiUrl, false) ->willReturn($tagData) ->shouldBeCalledTimes(1) ; $driver->setRemoteFilesystem($this->remoteFilesystem->reveal()); $expected = array( 'v1.0.0' => '092ed2c762bbae331e3f51d4a17f67310bf99a81', 'v2.0.0' => '8e8f60b3ec86d63733db3bd6371117a758027ec6', ); $this->assertEquals($expected, $driver->getTags()); $this->assertEquals($expected, $driver->getTags(), 'Tags are cached'); } public function testGetBranches() { $driver = $this->testInitialize('https://gitlab.com/mygroup/myproject', 'https://gitlab.com/api/v3/projects/mygroup%2Fmyproject'); $apiUrl = 'https://gitlab.com/api/v3/projects/mygroup%2Fmyproject/repository/branches'; // @link http://doc.gitlab.com/ce/api/repositories.html#list-project-repository-branches $branchData = <<remoteFilesystem ->getContents('gitlab.com', $apiUrl, false) ->willReturn($branchData) ->shouldBeCalledTimes(1) ; $driver->setRemoteFilesystem($this->remoteFilesystem->reveal()); $expected = array( 'mymaster' => '97eda36b5c1dd953a3792865c222d4e85e5f302e', 'staging' => '502cffe49f136443f2059803f2e7192d1ac066cd', ); $this->assertEquals($expected, $driver->getBranches()); $this->assertEquals($expected, $driver->getBranches(), 'Branches are cached'); } /** * @dataProvider dataForTestSupports */ public function testSupports($url, $expected) { $this->assertSame($expected, GitLabDriver::supports($this->io->reveal(), $this->config, $url)); } public function dataForTestSupports() { return array( array('http://gitlab.com/foo/bar', true), array('http://gitlab.com/foo/bar/', true), array('http://gitlab.com/foo/bar.git', true), array('http://gitlab.com/foo/bar.baz.git', true), array('https://gitlab.com/foo/bar', extension_loaded('openssl')), // Platform requirement array('git@gitlab.com:foo/bar.git', extension_loaded('openssl')), array('git@example.com:foo/bar.git', false), array('http://example.com/foo/bar', false), array('http://mycompany.com/gitlab/mygroup/myproject', true), array('https://mycompany.com/gitlab/mygroup/myproject', extension_loaded('openssl')), ); } public function testGitlabSubDirectory() { $url = 'https://mycompany.com/gitlab/mygroup/myproject'; $apiUrl = 'https://mycompany.com/gitlab/api/v3/projects/mygroup%2Fmyproject'; $driver = new GitLabDriver(array('url' => $url), $this->io->reveal(), $this->config, $this->process->reveal(), $this->remoteFilesystem->reveal()); $driver->initialize(); $this->assertEquals($apiUrl, $driver->getApiUrl(), 'API URL is derived from the repository URL'); } } composer-1.0.0-beta2/tests/Composer/Test/Repository/Vcs/PerforceDriverTest.php000066400000000000000000000141401267577262200274260ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Repository\Vcs; use Composer\Repository\Vcs\PerforceDriver; use Composer\TestCase; use Composer\Util\Filesystem; use Composer\Config; use Composer\Util\Perforce; /** * @author Matt Whittom */ class PerforceDriverTest extends TestCase { protected $config; protected $io; protected $process; protected $remoteFileSystem; protected $testPath; protected $driver; protected $repoConfig; protected $perforce; const TEST_URL = 'TEST_PERFORCE_URL'; const TEST_DEPOT = 'TEST_DEPOT_CONFIG'; const TEST_BRANCH = 'TEST_BRANCH_CONFIG'; protected function setUp() { $this->testPath = $this->getUniqueTmpDirectory(); $this->config = $this->getTestConfig($this->testPath); $this->repoConfig = $this->getTestRepoConfig(); $this->io = $this->getMockIOInterface(); $this->process = $this->getMockProcessExecutor(); $this->remoteFileSystem = $this->getMockRemoteFilesystem(); $this->perforce = $this->getMockPerforce(); $this->driver = new PerforceDriver($this->repoConfig, $this->io, $this->config, $this->process, $this->remoteFileSystem); $this->overrideDriverInternalPerforce($this->perforce); } protected function tearDown() { //cleanup directory under test path $fs = new Filesystem; $fs->removeDirectory($this->testPath); $this->driver = null; $this->perforce = null; $this->remoteFileSystem = null; $this->process = null; $this->io = null; $this->repoConfig = null; $this->config = null; $this->testPath = null; } protected function overrideDriverInternalPerforce(Perforce $perforce) { $reflectionClass = new \ReflectionClass($this->driver); $property = $reflectionClass->getProperty('perforce'); $property->setAccessible(true); $property->setValue($this->driver, $perforce); } protected function getTestConfig($testPath) { $config = new Config(); $config->merge(array('config' => array('home' => $testPath))); return $config; } protected function getTestRepoConfig() { return array( 'url' => self::TEST_URL, 'depot' => self::TEST_DEPOT, 'branch' => self::TEST_BRANCH, ); } protected function getMockIOInterface() { return $this->getMock('Composer\IO\IOInterface'); } protected function getMockProcessExecutor() { return $this->getMock('Composer\Util\ProcessExecutor'); } protected function getMockRemoteFilesystem() { return $this->getMockBuilder('Composer\Util\RemoteFilesystem')->disableOriginalConstructor()->getMock(); } protected function getMockPerforce() { $methods = array('p4login', 'checkStream', 'writeP4ClientSpec', 'connectClient', 'getComposerInformation', 'cleanupClientSpec'); return $this->getMockBuilder('Composer\Util\Perforce', $methods)->disableOriginalConstructor()->getMock(); } public function testInitializeCapturesVariablesFromRepoConfig() { $driver = new PerforceDriver($this->repoConfig, $this->io, $this->config, $this->process, $this->remoteFileSystem); $driver->initialize(); $this->assertEquals(self::TEST_URL, $driver->getUrl()); $this->assertEquals(self::TEST_DEPOT, $driver->getDepot()); $this->assertEquals(self::TEST_BRANCH, $driver->getBranch()); } public function testInitializeLogsInAndConnectsClient() { $this->perforce->expects($this->at(0))->method('p4Login')->with($this->identicalTo($this->io)); $this->perforce->expects($this->at(1))->method('checkStream')->with($this->equalTo(self::TEST_DEPOT)); $this->perforce->expects($this->at(2))->method('writeP4ClientSpec'); $this->perforce->expects($this->at(3))->method('connectClient'); $this->driver->initialize(); } /** * @depends testInitializeCapturesVariablesFromRepoConfig * @depends testInitializeLogsInAndConnectsClient */ public function testHasComposerFileReturnsFalseOnNoComposerFile() { $identifier = 'TEST_IDENTIFIER'; $formatted_depot_path = '//' . self::TEST_DEPOT . '/' . $identifier; $this->perforce->expects($this->any())->method('getComposerInformation')->with($this->equalTo($formatted_depot_path))->will($this->returnValue(array())); $this->driver->initialize(); $result = $this->driver->hasComposerFile($identifier); $this->assertFalse($result); } /** * @depends testInitializeCapturesVariablesFromRepoConfig * @depends testInitializeLogsInAndConnectsClient */ public function testHasComposerFileReturnsTrueWithOneOrMoreComposerFiles() { $identifier = 'TEST_IDENTIFIER'; $formatted_depot_path = '//' . self::TEST_DEPOT . '/' . $identifier; $this->perforce->expects($this->any())->method('getComposerInformation')->with($this->equalTo($formatted_depot_path))->will($this->returnValue(array(''))); $this->driver->initialize(); $result = $this->driver->hasComposerFile($identifier); $this->assertTrue($result); } /** * Test that supports() simply return false. * * @covers \Composer\Repository\Vcs\PerforceDriver::supports * * @return void */ public function testSupportsReturnsFalseNoDeepCheck() { $this->expectOutputString(''); $this->assertFalse(PerforceDriver::supports($this->io, $this->config, 'existing.url')); } public function testCleanup() { $this->perforce->expects($this->once())->method('cleanupClientSpec'); $this->driver->cleanup(); } } composer-1.0.0-beta2/tests/Composer/Test/Repository/Vcs/SvnDriverTest.php000066400000000000000000000052241267577262200264320ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Repository\Vcs; use Composer\Repository\Vcs\SvnDriver; use Composer\Config; use Composer\TestCase; use Composer\Util\Filesystem; use Composer\Util\Platform; class SvnDriverTest extends TestCase { protected $home; protected $config; public function setUp() { $this->home = $this->getUniqueTmpDirectory(); $this->config = new Config(); $this->config->merge(array( 'config' => array( 'home' => $this->home, ), )); } public function tearDown() { $fs = new Filesystem(); $fs->removeDirectory($this->home); } /** * @expectedException RuntimeException */ public function testWrongCredentialsInUrl() { $console = $this->getMock('Composer\IO\IOInterface'); $output = "svn: OPTIONS of 'https://corp.svn.local/repo':"; $output .= " authorization failed: Could not authenticate to server:"; $output .= " rejected Basic challenge (https://corp.svn.local/)"; $process = $this->getMock('Composer\Util\ProcessExecutor'); $process->expects($this->at(1)) ->method('execute') ->will($this->returnValue(1)); $process->expects($this->exactly(7)) ->method('getErrorOutput') ->will($this->returnValue($output)); $process->expects($this->at(2)) ->method('execute') ->will($this->returnValue(0)); $repoConfig = array( 'url' => 'https://till:secret@corp.svn.local/repo', ); $svn = new SvnDriver($repoConfig, $console, $this->config, $process); $svn->initialize(); } private function getCmd($cmd) { if (Platform::isWindows()) { return strtr($cmd, "'", '"'); } return $cmd; } public static function supportProvider() { return array( array('http://svn.apache.org', true), array('https://svn.sf.net', true), array('svn://example.org', true), array('svn+ssh://example.org', true), ); } /** * @dataProvider supportProvider */ public function testSupport($url, $assertion) { $config = new Config(); $result = SvnDriver::supports($this->getMock('Composer\IO\IOInterface'), $config, $url); $this->assertEquals($assertion, $result); } } composer-1.0.0-beta2/tests/Composer/Test/Repository/VcsRepositoryTest.php000066400000000000000000000116501267577262200266100ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Repository; use Composer\TestCase; use Symfony\Component\Process\ExecutableFinder; use Composer\Package\Dumper\ArrayDumper; use Composer\Repository\VcsRepository; use Composer\Util\Filesystem; use Composer\Util\ProcessExecutor; use Composer\IO\NullIO; use Composer\Config; /** * @group slow */ class VcsRepositoryTest extends TestCase { private static $composerHome; private static $gitRepo; private $skipped; protected function initialize() { $oldCwd = getcwd(); self::$composerHome = $this->getUniqueTmpDirectory(); self::$gitRepo = $this->getUniqueTmpDirectory(); $locator = new ExecutableFinder(); if (!$locator->find('git')) { $this->skipped = 'This test needs a git binary in the PATH to be able to run'; return; } if (!@mkdir(self::$gitRepo) || !@chdir(self::$gitRepo)) { $this->skipped = 'Could not create and move into the temp git repo '.self::$gitRepo; return; } // init $process = new ProcessExecutor; $exec = function ($command) use ($process) { $cwd = getcwd(); if ($process->execute($command, $output, $cwd) !== 0) { throw new \RuntimeException('Failed to execute '.$command.': '.$process->getErrorOutput()); } }; $exec('git init'); $exec('git config user.email composertest@example.org'); $exec('git config user.name ComposerTest'); touch('foo'); $exec('git add foo'); $exec('git commit -m init'); // non-composed tag & branch $exec('git tag 0.5.0'); $exec('git branch oldbranch'); // add composed tag & master branch $composer = array('name' => 'a/b'); file_put_contents('composer.json', json_encode($composer)); $exec('git add composer.json'); $exec('git commit -m addcomposer'); $exec('git tag 0.6.0'); // add feature-a branch $exec('git checkout -b feature/a-1.0-B'); file_put_contents('foo', 'bar feature'); $exec('git add foo'); $exec('git commit -m change-a'); // add version to composer.json $exec('git checkout master'); $composer['version'] = '1.0.0'; file_put_contents('composer.json', json_encode($composer)); $exec('git add composer.json'); $exec('git commit -m addversion'); // create tag with wrong version in it $exec('git tag 0.9.0'); // create tag with correct version in it $exec('git tag 1.0.0'); // add feature-b branch $exec('git checkout -b feature-b'); file_put_contents('foo', 'baz feature'); $exec('git add foo'); $exec('git commit -m change-b'); // add 1.0 branch $exec('git checkout master'); $exec('git branch 1.0'); // add 1.0.x branch $exec('git branch 1.1.x'); // update master to 2.0 $composer['version'] = '2.0.0'; file_put_contents('composer.json', json_encode($composer)); $exec('git add composer.json'); $exec('git commit -m bump-version'); chdir($oldCwd); } public function setUp() { if (!self::$gitRepo) { $this->initialize(); } if ($this->skipped) { $this->markTestSkipped($this->skipped); } } public static function tearDownAfterClass() { $fs = new Filesystem; $fs->removeDirectory(self::$composerHome); $fs->removeDirectory(self::$gitRepo); } public function testLoadVersions() { $expected = array( '0.6.0' => true, '1.0.0' => true, '1.0.x-dev' => true, '1.1.x-dev' => true, 'dev-feature-b' => true, 'dev-feature/a-1.0-B' => true, 'dev-master' => true, ); $config = new Config(); $config->merge(array( 'config' => array( 'home' => self::$composerHome, ), )); $repo = new VcsRepository(array('url' => self::$gitRepo, 'type' => 'vcs'), new NullIO, $config); $packages = $repo->getPackages(); $dumper = new ArrayDumper(); foreach ($packages as $package) { if (isset($expected[$package->getPrettyVersion()])) { unset($expected[$package->getPrettyVersion()]); } else { $this->fail('Unexpected version '.$package->getPrettyVersion().' in '.json_encode($dumper->dump($package))); } } $this->assertEmpty($expected, 'Missing versions: '.implode(', ', array_keys($expected))); } } composer-1.0.0-beta2/tests/Composer/Test/Util/000077500000000000000000000000001267577262200211375ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Util/ConfigValidatorTest.php000066400000000000000000000017231267577262200255660ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Util; use Composer\IO\NullIO; use Composer\Util\ConfigValidator; use Composer\TestCase; /** * ConfigValidator test case */ class ConfigValidatorTest extends TestCase { /** * Test ConfigValidator warns on commit reference */ public function testConfigValidatorCommitRefWarning() { $configValidator = new ConfigValidator(new NullIO()); list(, , $warnings) = $configValidator->validate(__DIR__ . '/Fixtures/composer_commit-ref.json'); $this->assertEquals(true, in_array( 'The package "some/package" is pointing to a commit-ref, this is bad practice and can cause unforeseen issues.', $warnings )); } } composer-1.0.0-beta2/tests/Composer/Test/Util/ErrorHandlerTest.php000066400000000000000000000022771267577262200251070ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Util; use Composer\Util\ErrorHandler; use Composer\TestCase; /** * ErrorHandler test case */ class ErrorHandlerTest extends TestCase { /** * Test ErrorHandler handles notices */ public function testErrorHandlerCaptureNotice() { $this->setExpectedException('\ErrorException', 'Undefined index: baz'); ErrorHandler::register(); $array = array('foo' => 'bar'); $array['baz']; } /** * Test ErrorHandler handles warnings */ public function testErrorHandlerCaptureWarning() { $this->setExpectedException('\ErrorException', 'array_merge'); ErrorHandler::register(); array_merge(array(), 'string'); } /** * Test ErrorHandler handles warnings */ public function testErrorHandlerRespectsAtOperator() { ErrorHandler::register(); @trigger_error('test', E_USER_NOTICE); } } composer-1.0.0-beta2/tests/Composer/Test/Util/FilesystemTest.php000066400000000000000000000276671267577262200246560ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Util; use Composer\Util\Filesystem; use Composer\TestCase; class FilesystemTest extends TestCase { /** * @var Filesystem */ private $fs; /** * @var string */ private $workingDir; /** * @var string */ private $testFile; /** * @dataProvider providePathCouplesAsCode */ public function testFindShortestPathCode($a, $b, $directory, $expected) { $fs = new Filesystem; $this->assertEquals($expected, $fs->findShortestPathCode($a, $b, $directory)); } public function setUp() { $this->fs = new Filesystem; $this->workingDir = $this->getUniqueTmpDirectory(); $this->testFile = $this->getUniqueTmpDirectory() . '/composer_test_file'; } public function tearDown() { if (is_dir($this->workingDir)) { $this->fs->removeDirectory($this->workingDir); } if (is_file($this->testFile)) { $this->fs->removeDirectory(dirname($this->testFile)); } } public function providePathCouplesAsCode() { return array( array('/foo/bar', '/foo/bar', false, "__FILE__"), array('/foo/bar', '/foo/baz', false, "__DIR__.'/baz'"), array('/foo/bin/run', '/foo/vendor/acme/bin/run', false, "dirname(__DIR__).'/vendor/acme/bin/run'"), array('/foo/bin/run', '/bar/bin/run', false, "'/bar/bin/run'"), array('c:/bin/run', 'c:/vendor/acme/bin/run', false, "dirname(__DIR__).'/vendor/acme/bin/run'"), array('c:\\bin\\run', 'c:/vendor/acme/bin/run', false, "dirname(__DIR__).'/vendor/acme/bin/run'"), array('c:/bin/run', 'd:/vendor/acme/bin/run', false, "'d:/vendor/acme/bin/run'"), array('c:\\bin\\run', 'd:/vendor/acme/bin/run', false, "'d:/vendor/acme/bin/run'"), array('/foo/bar', '/foo/bar', true, "__DIR__"), array('/foo/bar/', '/foo/bar', true, "__DIR__"), array('/foo/bar', '/foo/baz', true, "dirname(__DIR__).'/baz'"), array('/foo/bin/run', '/foo/vendor/acme/bin/run', true, "dirname(dirname(__DIR__)).'/vendor/acme/bin/run'"), array('/foo/bin/run', '/bar/bin/run', true, "'/bar/bin/run'"), array('/bin/run', '/bin/run', true, "__DIR__"), array('c:/bin/run', 'c:\\bin/run', true, "__DIR__"), array('c:/bin/run', 'c:/vendor/acme/bin/run', true, "dirname(dirname(__DIR__)).'/vendor/acme/bin/run'"), array('c:\\bin\\run', 'c:/vendor/acme/bin/run', true, "dirname(dirname(__DIR__)).'/vendor/acme/bin/run'"), array('c:/bin/run', 'd:/vendor/acme/bin/run', true, "'d:/vendor/acme/bin/run'"), array('c:\\bin\\run', 'd:/vendor/acme/bin/run', true, "'d:/vendor/acme/bin/run'"), array('C:/Temp/test', 'C:\Temp', true, "dirname(__DIR__)"), array('C:/Temp', 'C:\Temp\test', true, "__DIR__ . '/test'"), array('/tmp/test', '/tmp', true, "dirname(__DIR__)"), array('/tmp', '/tmp/test', true, "__DIR__ . '/test'"), array('C:/Temp', 'c:\Temp\test', true, "__DIR__ . '/test'"), array('/tmp/test/./', '/tmp/test/', true, '__DIR__'), array('/tmp/test/../vendor', '/tmp/test', true, "dirname(__DIR__).'/test'"), array('/tmp/test/.././vendor', '/tmp/test', true, "dirname(__DIR__).'/test'"), array('C:/Temp', 'c:\Temp\..\..\test', true, "dirname(__DIR__).'/test'"), array('C:/Temp/../..', 'd:\Temp\..\..\test', true, "'d:/test'"), array('/foo/bar', '/foo/bar_vendor', true, "dirname(__DIR__).'/bar_vendor'"), array('/foo/bar_vendor', '/foo/bar', true, "dirname(__DIR__).'/bar'"), array('/foo/bar_vendor', '/foo/bar/src', true, "dirname(__DIR__).'/bar/src'"), array('/foo/bar_vendor/src2', '/foo/bar/src/lib', true, "dirname(dirname(__DIR__)).'/bar/src/lib'"), ); } /** * @dataProvider providePathCouples */ public function testFindShortestPath($a, $b, $expected, $directory = false) { $fs = new Filesystem; $this->assertEquals($expected, $fs->findShortestPath($a, $b, $directory)); } public function providePathCouples() { return array( array('/foo/bar', '/foo/bar', "./bar"), array('/foo/bar', '/foo/baz', "./baz"), array('/foo/bar/', '/foo/baz', "./baz"), array('/foo/bar', '/foo/bar', "./", true), array('/foo/bar', '/foo/baz', "../baz", true), array('/foo/bar/', '/foo/baz', "../baz", true), array('C:/foo/bar/', 'c:/foo/baz', "../baz", true), array('/foo/bin/run', '/foo/vendor/acme/bin/run', "../vendor/acme/bin/run"), array('/foo/bin/run', '/bar/bin/run', "/bar/bin/run"), array('/foo/bin/run', '/bar/bin/run', "/bar/bin/run", true), array('c:/foo/bin/run', 'd:/bar/bin/run', "d:/bar/bin/run", true), array('c:/bin/run', 'c:/vendor/acme/bin/run', "../vendor/acme/bin/run"), array('c:\\bin\\run', 'c:/vendor/acme/bin/run', "../vendor/acme/bin/run"), array('c:/bin/run', 'd:/vendor/acme/bin/run', "d:/vendor/acme/bin/run"), array('c:\\bin\\run', 'd:/vendor/acme/bin/run', "d:/vendor/acme/bin/run"), array('C:/Temp/test', 'C:\Temp', "./"), array('/tmp/test', '/tmp', "./"), array('C:/Temp/test/sub', 'C:\Temp', "../"), array('/tmp/test/sub', '/tmp', "../"), array('/tmp/test/sub', '/tmp', "../../", true), array('c:/tmp/test/sub', 'c:/tmp', "../../", true), array('/tmp', '/tmp/test', "test"), array('C:/Temp', 'C:\Temp\test', "test"), array('C:/Temp', 'c:\Temp\test', "test"), array('/tmp/test/./', '/tmp/test', './', true), array('/tmp/test/../vendor', '/tmp/test', '../test', true), array('/tmp/test/.././vendor', '/tmp/test', '../test', true), array('C:/Temp', 'c:\Temp\..\..\test', "../test", true), array('C:/Temp/../..', 'c:\Temp\..\..\test', "./test", true), array('C:/Temp/../..', 'D:\Temp\..\..\test', "d:/test", true), array('/tmp', '/tmp/../../test', '/test', true), array('/foo/bar', '/foo/bar_vendor', '../bar_vendor', true), array('/foo/bar_vendor', '/foo/bar', '../bar', true), array('/foo/bar_vendor', '/foo/bar/src', '../bar/src', true), array('/foo/bar_vendor/src2', '/foo/bar/src/lib', '../../bar/src/lib', true), array('C:/', 'C:/foo/bar/', "foo/bar", true), ); } /** * @group GH-1339 */ public function testRemoveDirectoryPhp() { @mkdir($this->workingDir . "/level1/level2", 0777, true); file_put_contents($this->workingDir . "/level1/level2/hello.txt", "hello world"); $fs = new Filesystem; $this->assertTrue($fs->removeDirectoryPhp($this->workingDir)); $this->assertFalse(file_exists($this->workingDir . "/level1/level2/hello.txt")); } public function testFileSize() { file_put_contents($this->testFile, 'Hello'); $fs = new Filesystem; $this->assertGreaterThanOrEqual(5, $fs->size($this->testFile)); } public function testDirectorySize() { @mkdir($this->workingDir, 0777, true); file_put_contents($this->workingDir."/file1.txt", 'Hello'); file_put_contents($this->workingDir."/file2.txt", 'World'); $fs = new Filesystem; $this->assertGreaterThanOrEqual(10, $fs->size($this->workingDir)); } /** * @dataProvider provideNormalizedPaths */ public function testNormalizePath($expected, $actual) { $fs = new Filesystem; $this->assertEquals($expected, $fs->normalizePath($actual)); } public function provideNormalizedPaths() { return array( array('../foo', '../foo'), array('c:/foo/bar', 'c:/foo//bar'), array('C:/foo/bar', 'C:/foo/./bar'), array('C:/bar', 'C:/foo/../bar'), array('/bar', '/foo/../bar/'), array('phar://c:/Foo', 'phar://c:/Foo/Bar/..'), array('phar://c:/', 'phar://c:/Foo/Bar/../../../..'), array('/', '/Foo/Bar/../../../..'), array('/', '/'), array('c:/', 'c:\\'), array('../src', 'Foo/Bar/../../../src'), array('c:../b', 'c:.\\..\\a\\..\\b'), array('phar://c:../Foo', 'phar://c:../Foo'), ); } /** * @link https://github.com/composer/composer/issues/3157 * @requires function symlink */ public function testUnlinkSymlinkedDirectory() { $basepath = $this->workingDir; $symlinked = $basepath . "/linked"; @mkdir($basepath . "/real", 0777, true); touch($basepath . "/real/FILE"); $result = @symlink($basepath . "/real", $symlinked); if (!$result) { $this->markTestSkipped('Symbolic links for directories not supported on this platform'); } if (!is_dir($symlinked)) { $this->fail('Precondition assertion failed (is_dir is false on symbolic link to directory).'); } $fs = new Filesystem(); $result = $fs->unlink($symlinked); $this->assertTrue($result); $this->assertFalse(file_exists($symlinked)); } /** * @link https://github.com/composer/composer/issues/3144 * @requires function symlink */ public function testRemoveSymlinkedDirectoryWithTrailingSlash() { @mkdir($this->workingDir . "/real", 0777, true); touch($this->workingDir . "/real/FILE"); $symlinked = $this->workingDir . "/linked"; $symlinkedTrailingSlash = $symlinked . "/"; $result = @symlink($this->workingDir . "/real", $symlinked); if (!$result) { $this->markTestSkipped('Symbolic links for directories not supported on this platform'); } if (!is_dir($symlinked)) { $this->fail('Precondition assertion failed (is_dir is false on symbolic link to directory).'); } if (!is_dir($symlinkedTrailingSlash)) { $this->fail('Precondition assertion failed (is_dir false w trailing slash).'); } $fs = new Filesystem(); $result = $fs->removeDirectory($symlinkedTrailingSlash); $this->assertTrue($result); $this->assertFalse(file_exists($symlinkedTrailingSlash)); $this->assertFalse(file_exists($symlinked)); } public function testJunctions() { @mkdir($this->workingDir . '/real/nesting/testing', 0777, true); $fs = new Filesystem(); // Non-Windows systems do not support this and will return false on all tests, and an exception on creation if (!defined('PHP_WINDOWS_VERSION_BUILD')) { $this->assertFalse($fs->isJunction($this->workingDir)); $this->assertFalse($fs->removeJunction($this->workingDir)); $this->setExpectedException('LogicException', 'not available on non-Windows platform'); } $target = $this->workingDir . '/real/../real/nesting'; $junction = $this->workingDir . '/junction'; // Create and detect junction $fs->junction($target, $junction); $this->assertTrue($fs->isJunction($junction)); $this->assertFalse($fs->isJunction($target)); $this->assertTrue($fs->isJunction($target . '/../../junction')); $this->assertFalse($fs->isJunction($junction . '/../real')); $this->assertTrue($fs->isJunction($junction . '/../junction')); // Remove junction $this->assertTrue(is_dir($junction)); $this->assertTrue($fs->removeJunction($junction)); $this->assertFalse(is_dir($junction)); } } composer-1.0.0-beta2/tests/Composer/Test/Util/Fixtures/000077500000000000000000000000001267577262200227505ustar00rootroot00000000000000composer-1.0.0-beta2/tests/Composer/Test/Util/Fixtures/composer_commit-ref.json000066400000000000000000000001071267577262200276120ustar00rootroot00000000000000{ "require": { "some/package": "dev-master#fgb42d" } } composer-1.0.0-beta2/tests/Composer/Test/Util/GitHubTest.php000066400000000000000000000111561267577262200236760ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Util; use Composer\Downloader\TransportException; use Composer\Util\GitHub; use RecursiveArrayIterator; use RecursiveIteratorIterator; /** * @author Rob Bast */ class GitHubTest extends \PHPUnit_Framework_TestCase { private $username = 'username'; private $password = 'password'; private $authcode = 'authcode'; private $message = 'mymessage'; private $origin = 'github.com'; private $token = 'githubtoken'; public function testUsernamePasswordAuthenticationFlow() { $io = $this->getIOMock(); $io ->expects($this->at(0)) ->method('writeError') ->with($this->message) ; $io ->expects($this->once()) ->method('askAndHideAnswer') ->with('Token (hidden): ') ->willReturn($this->password) ; $rfs = $this->getRemoteFilesystemMock(); $rfs ->expects($this->once()) ->method('getContents') ->with( $this->equalTo($this->origin), $this->equalTo(sprintf('https://api.%s/', $this->origin)), $this->isFalse(), $this->anything() ) ->willReturn(sprintf('{}', $this->token)) ; $config = $this->getConfigMock(); $config ->expects($this->exactly(2)) ->method('getAuthConfigSource') ->willReturn($this->getAuthJsonMock()) ; $config ->expects($this->once()) ->method('getConfigSource') ->willReturn($this->getConfJsonMock()) ; $github = new GitHub($io, $config, null, $rfs); $this->assertTrue($github->authorizeOAuthInteractively($this->origin, $this->message)); } public function testUsernamePasswordFailure() { $io = $this->getIOMock(); $io ->expects($this->exactly(1)) ->method('askAndHideAnswer') ->with('Token (hidden): ') ->willReturn($this->password) ; $rfs = $this->getRemoteFilesystemMock(); $rfs ->expects($this->exactly(1)) ->method('getContents') ->will($this->throwException(new TransportException('', 401))) ; $config = $this->getConfigMock(); $config ->expects($this->exactly(1)) ->method('getAuthConfigSource') ->willReturn($this->getAuthJsonMock()) ; $github = new GitHub($io, $config, null, $rfs); $this->assertFalse($github->authorizeOAuthInteractively($this->origin)); } private function getIOMock() { $io = $this ->getMockBuilder('Composer\IO\ConsoleIO') ->disableOriginalConstructor() ->getMock() ; return $io; } private function getConfigMock() { $config = $this->getMock('Composer\Config'); return $config; } private function getRemoteFilesystemMock() { $rfs = $this ->getMockBuilder('Composer\Util\RemoteFilesystem') ->disableOriginalConstructor() ->getMock() ; return $rfs; } private function getAuthJsonMock() { $authjson = $this ->getMockBuilder('Composer\Config\JsonConfigSource') ->disableOriginalConstructor() ->getMock() ; $authjson ->expects($this->atLeastOnce()) ->method('getName') ->willReturn('auth.json') ; return $authjson; } private function getConfJsonMock() { $confjson = $this ->getMockBuilder('Composer\Config\JsonConfigSource') ->disableOriginalConstructor() ->getMock() ; $confjson ->expects($this->atLeastOnce()) ->method('removeConfigSetting') ->with('github-oauth.'.$this->origin) ; return $confjson; } public static function recursiveFind($array, $needle) { $iterator = new RecursiveArrayIterator($array); $recursive = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST); foreach ($recursive as $key => $value) { if ($key === $needle) { return $value; } } } } composer-1.0.0-beta2/tests/Composer/Test/Util/GitLabTest.php000066400000000000000000000102511267577262200236510ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Util; use Composer\Downloader\TransportException; use Composer\Util\GitLab; /** * @author Jérôme Tamarelle */ class GitLabTest extends \PHPUnit_Framework_TestCase { private $username = 'username'; private $password = 'password'; private $authcode = 'authcode'; private $message = 'mymessage'; private $origin = 'gitlab.com'; private $token = 'gitlabtoken'; public function testUsernamePasswordAuthenticationFlow() { $io = $this->getIOMock(); $io ->expects($this->at(0)) ->method('writeError') ->with($this->message) ; $io ->expects($this->once()) ->method('ask') ->with('Username: ') ->willReturn($this->username) ; $io ->expects($this->once()) ->method('askAndHideAnswer') ->with('Password: ') ->willReturn($this->password) ; $rfs = $this->getRemoteFilesystemMock(); $rfs ->expects($this->once()) ->method('getContents') ->with( $this->equalTo($this->origin), $this->equalTo(sprintf('http://%s/oauth/token', $this->origin)), $this->isFalse(), $this->anything() ) ->willReturn(sprintf('{"access_token": "%s", "token_type": "bearer", "expires_in": 7200}', $this->token)) ; $config = $this->getConfigMock(); $config ->expects($this->exactly(2)) ->method('getAuthConfigSource') ->willReturn($this->getAuthJsonMock()) ; $gitLab = new GitLab($io, $config, null, $rfs); $this->assertTrue($gitLab->authorizeOAuthInteractively('http', $this->origin, $this->message)); } /** * @expectedException \RuntimeException * @expectedExceptionMessage Invalid GitLab credentials 5 times in a row, aborting. */ public function testUsernamePasswordFailure() { $io = $this->getIOMock(); $io ->expects($this->exactly(5)) ->method('ask') ->with('Username: ') ->willReturn($this->username) ; $io ->expects($this->exactly(5)) ->method('askAndHideAnswer') ->with('Password: ') ->willReturn($this->password) ; $rfs = $this->getRemoteFilesystemMock(); $rfs ->expects($this->exactly(5)) ->method('getContents') ->will($this->throwException(new TransportException('', 401))) ; $config = $this->getConfigMock(); $config ->expects($this->exactly(1)) ->method('getAuthConfigSource') ->willReturn($this->getAuthJsonMock()) ; $gitLab = new GitLab($io, $config, null, $rfs); $gitLab->authorizeOAuthInteractively('https', $this->origin); } private function getIOMock() { $io = $this ->getMockBuilder('Composer\IO\ConsoleIO') ->disableOriginalConstructor() ->getMock() ; return $io; } private function getConfigMock() { $config = $this->getMock('Composer\Config'); return $config; } private function getRemoteFilesystemMock() { $rfs = $this ->getMockBuilder('Composer\Util\RemoteFilesystem') ->disableOriginalConstructor() ->getMock() ; return $rfs; } private function getAuthJsonMock() { $authjson = $this ->getMockBuilder('Composer\Config\JsonConfigSource') ->disableOriginalConstructor() ->getMock() ; $authjson ->expects($this->atLeastOnce()) ->method('getName') ->willReturn('auth.json') ; return $authjson; } } composer-1.0.0-beta2/tests/Composer/Test/Util/PerforceTest.php000066400000000000000000000620501267577262200242600ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Util; use Composer\Util\Perforce; use Composer\Util\ProcessExecutor; /** * @author Matt Whittom */ class PerforceTest extends \PHPUnit_Framework_TestCase { protected $perforce; protected $processExecutor; protected $io; const TEST_DEPOT = 'depot'; const TEST_BRANCH = 'branch'; const TEST_P4USER = 'user'; const TEST_CLIENT_NAME = 'TEST'; const TEST_PORT = 'port'; const TEST_PATH = 'path'; protected function setUp() { $this->processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); $this->repoConfig = $this->getTestRepoConfig(); $this->io = $this->getMockIOInterface(); $this->createNewPerforceWithWindowsFlag(true); } protected function tearDown() { $this->perforce = null; $this->io = null; $this->repoConfig = null; $this->processExecutor = null; } public function getTestRepoConfig() { return array( 'depot' => self::TEST_DEPOT, 'branch' => self::TEST_BRANCH, 'p4user' => self::TEST_P4USER, 'unique_perforce_client_name' => self::TEST_CLIENT_NAME, ); } public function getMockIOInterface() { return $this->getMock('Composer\IO\IOInterface'); } protected function createNewPerforceWithWindowsFlag($flag) { $this->perforce = new Perforce($this->repoConfig, self::TEST_PORT, self::TEST_PATH, $this->processExecutor, $flag, $this->io); } public function testGetClientWithoutStream() { $client = $this->perforce->getClient(); $hostname = gethostname(); $timestamp = time(); $expected = 'composer_perforce_TEST_depot'; $this->assertEquals($expected, $client); } public function testGetClientFromStream() { $this->setPerforceToStream(); $client = $this->perforce->getClient(); $expected = 'composer_perforce_TEST_depot_branch'; $this->assertEquals($expected, $client); } public function testGetStreamWithoutStream() { $stream = $this->perforce->getStream(); $this->assertEquals("//depot", $stream); } public function testGetStreamWithStream() { $this->setPerforceToStream(); $stream = $this->perforce->getStream(); $this->assertEquals('//depot/branch', $stream); } public function testGetStreamWithoutLabelWithStreamWithoutLabel() { $stream = $this->perforce->getStreamWithoutLabel('//depot/branch'); $this->assertEquals('//depot/branch', $stream); } public function testGetStreamWithoutLabelWithStreamWithLabel() { $stream = $this->perforce->getStreamWithoutLabel('//depot/branching@label'); $this->assertEquals('//depot/branching', $stream); } public function testGetClientSpec() { $clientSpec = $this->perforce->getP4ClientSpec(); $expected = 'path/composer_perforce_TEST_depot.p4.spec'; $this->assertEquals($expected, $clientSpec); } public function testGenerateP4Command() { $command = 'do something'; $p4Command = $this->perforce->generateP4Command($command); $expected = 'p4 -u user -c composer_perforce_TEST_depot -p port do something'; $this->assertEquals($expected, $p4Command); } public function testQueryP4UserWithUserAlreadySet() { $this->perforce->queryP4user(); $this->assertEquals(self::TEST_P4USER, $this->perforce->getUser()); } public function testQueryP4UserWithUserSetInP4VariablesWithWindowsOS() { $this->createNewPerforceWithWindowsFlag(true); $this->perforce->setUser(null); $expectedCommand = 'p4 set'; $callback = function ($command, &$output) { $output = 'P4USER=TEST_P4VARIABLE_USER' . PHP_EOL; return true; }; $this->processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedCommand)) ->will($this->returnCallback($callback)); $this->perforce->queryP4user(); $this->assertEquals('TEST_P4VARIABLE_USER', $this->perforce->getUser()); } public function testQueryP4UserWithUserSetInP4VariablesNotWindowsOS() { $this->createNewPerforceWithWindowsFlag(false); $this->perforce->setUser(null); $expectedCommand = 'echo $P4USER'; $callback = function ($command, &$output) { $output = 'TEST_P4VARIABLE_USER' . PHP_EOL; return true; }; $this->processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedCommand)) ->will($this->returnCallback($callback)); $this->perforce->queryP4user(); $this->assertEquals('TEST_P4VARIABLE_USER', $this->perforce->getUser()); } public function testQueryP4UserQueriesForUser() { $this->perforce->setUser(null); $expectedQuestion = 'Enter P4 User:'; $this->io->expects($this->at(0)) ->method('ask') ->with($this->equalTo($expectedQuestion)) ->will($this->returnValue('TEST_QUERY_USER')); $this->perforce->queryP4user(); $this->assertEquals('TEST_QUERY_USER', $this->perforce->getUser()); } public function testQueryP4UserStoresResponseToQueryForUserWithWindows() { $this->createNewPerforceWithWindowsFlag(true); $this->perforce->setUser(null); $expectedQuestion = 'Enter P4 User:'; $expectedCommand = 'p4 set P4USER=TEST_QUERY_USER'; $this->io->expects($this->at(0)) ->method('ask') ->with($this->equalTo($expectedQuestion)) ->will($this->returnValue('TEST_QUERY_USER')); $this->processExecutor->expects($this->at(1)) ->method('execute') ->with($this->equalTo($expectedCommand)) ->will($this->returnValue(0)); $this->perforce->queryP4user(); } public function testQueryP4UserStoresResponseToQueryForUserWithoutWindows() { $this->createNewPerforceWithWindowsFlag(false); $this->perforce->setUser(null); $expectedQuestion = 'Enter P4 User:'; $expectedCommand = 'export P4USER=TEST_QUERY_USER'; $this->io->expects($this->at(0)) ->method('ask') ->with($this->equalTo($expectedQuestion)) ->will($this->returnValue('TEST_QUERY_USER')); $this->processExecutor->expects($this->at(1)) ->method('execute') ->with($this->equalTo($expectedCommand)) ->will($this->returnValue(0)); $this->perforce->queryP4user(); } public function testQueryP4PasswordWithPasswordAlreadySet() { $repoConfig = array( 'depot' => 'depot', 'branch' => 'branch', 'p4user' => 'user', 'p4password' => 'TEST_PASSWORD', ); $this->perforce = new Perforce($repoConfig, 'port', 'path', $this->processExecutor, false, $this->getMockIOInterface(), 'TEST'); $password = $this->perforce->queryP4Password(); $this->assertEquals('TEST_PASSWORD', $password); } public function testQueryP4PasswordWithPasswordSetInP4VariablesWithWindowsOS() { $this->createNewPerforceWithWindowsFlag(true); $expectedCommand = 'p4 set'; $callback = function ($command, &$output) { $output = 'P4PASSWD=TEST_P4VARIABLE_PASSWORD' . PHP_EOL; return true; }; $this->processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedCommand)) ->will($this->returnCallback($callback)); $password = $this->perforce->queryP4Password(); $this->assertEquals('TEST_P4VARIABLE_PASSWORD', $password); } public function testQueryP4PasswordWithPasswordSetInP4VariablesNotWindowsOS() { $this->createNewPerforceWithWindowsFlag(false); $expectedCommand = 'echo $P4PASSWD'; $callback = function ($command, &$output) { $output = 'TEST_P4VARIABLE_PASSWORD' . PHP_EOL; return true; }; $this->processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedCommand)) ->will($this->returnCallback($callback)); $password = $this->perforce->queryP4Password(); $this->assertEquals('TEST_P4VARIABLE_PASSWORD', $password); } public function testQueryP4PasswordQueriesForPassword() { $expectedQuestion = 'Enter password for Perforce user user: '; $this->io->expects($this->at(0)) ->method('askAndHideAnswer') ->with($this->equalTo($expectedQuestion)) ->will($this->returnValue('TEST_QUERY_PASSWORD')); $password = $this->perforce->queryP4Password(); $this->assertEquals('TEST_QUERY_PASSWORD', $password); } public function testWriteP4ClientSpecWithoutStream() { $stream = fopen('php://memory', 'w+'); $this->perforce->writeClientSpecToFile($stream); rewind($stream); $expectedArray = $this->getExpectedClientSpec(false); try { foreach ($expectedArray as $expected) { $this->assertStringStartsWith($expected, fgets($stream)); } $this->assertFalse(fgets($stream)); } catch (Exception $e) { fclose($stream); throw $e; } fclose($stream); } public function testWriteP4ClientSpecWithStream() { $this->setPerforceToStream(); $stream = fopen('php://memory', 'w+'); $this->perforce->writeClientSpecToFile($stream); rewind($stream); $expectedArray = $this->getExpectedClientSpec(true); try { foreach ($expectedArray as $expected) { $this->assertStringStartsWith($expected, fgets($stream)); } $this->assertFalse(fgets($stream)); } catch (Exception $e) { fclose($stream); throw $e; } fclose($stream); } public function testIsLoggedIn() { $expectedCommand = 'p4 -u user -p port login -s'; $this->processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedCommand), $this->equalTo(null)) ->will($this->returnValue(0)); $this->perforce->isLoggedIn(); } public function testConnectClient() { $expectedCommand = 'p4 -u user -c composer_perforce_TEST_depot -p port client -i < path/composer_perforce_TEST_depot.p4.spec'; $this->processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedCommand), $this->equalTo(null)) ->will($this->returnValue(0)); $this->perforce->connectClient(); } public function testGetBranchesWithStream() { $this->setPerforceToStream(); $expectedCommand = 'p4 -u user -c composer_perforce_TEST_depot_branch -p port streams //depot/...'; $this->processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedCommand)) ->will( $this->returnCallback( function ($command, &$output) { $output = 'Stream //depot/branch mainline none \'branch\'' . PHP_EOL; return true; } ) ); $expectedCommand2 = 'p4 -u user -p port changes //depot/branch/...'; $expectedCallback = function ($command, &$output) { $output = 'Change 1234 on 2014/03/19 by Clark.Stuth@Clark.Stuth_test_client \'test changelist\''; return true; }; $this->processExecutor->expects($this->at(1)) ->method('execute') ->with($this->equalTo($expectedCommand2)) ->will($this->returnCallback($expectedCallback)); $branches = $this->perforce->getBranches(); $this->assertEquals('//depot/branch@1234', $branches['master']); } public function testGetBranchesWithoutStream() { $expectedCommand = 'p4 -u user -p port changes //depot/...'; $expectedCallback = function ($command, &$output) { $output = 'Change 5678 on 2014/03/19 by Clark.Stuth@Clark.Stuth_test_client \'test changelist\''; return true; }; $this->processExecutor->expects($this->once()) ->method('execute') ->with($this->equalTo($expectedCommand)) ->will($this->returnCallback($expectedCallback)); $branches = $this->perforce->getBranches(); $this->assertEquals('//depot@5678', $branches['master']); } public function testGetTagsWithoutStream() { $expectedCommand = 'p4 -u user -c composer_perforce_TEST_depot -p port labels'; $this->processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedCommand)) ->will( $this->returnCallback( function ($command, &$output) { $output = 'Label 0.0.1 2013/07/31 \'First Label!\'' . PHP_EOL . 'Label 0.0.2 2013/08/01 \'Second Label!\'' . PHP_EOL; return true; } ) ); $tags = $this->perforce->getTags(); $this->assertEquals('//depot@0.0.1', $tags['0.0.1']); $this->assertEquals('//depot@0.0.2', $tags['0.0.2']); } public function testGetTagsWithStream() { $this->setPerforceToStream(); $expectedCommand = 'p4 -u user -c composer_perforce_TEST_depot_branch -p port labels'; $this->processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedCommand)) ->will( $this->returnCallback( function ($command, &$output) { $output = 'Label 0.0.1 2013/07/31 \'First Label!\'' . PHP_EOL . 'Label 0.0.2 2013/08/01 \'Second Label!\'' . PHP_EOL; return true; } ) ); $tags = $this->perforce->getTags(); $this->assertEquals('//depot/branch@0.0.1', $tags['0.0.1']); $this->assertEquals('//depot/branch@0.0.2', $tags['0.0.2']); } public function testCheckStreamWithoutStream() { $result = $this->perforce->checkStream('depot'); $this->assertFalse($result); $this->assertFalse($this->perforce->isStream()); } public function testCheckStreamWithStream() { $this->processExecutor->expects($this->any())->method('execute') ->will( $this->returnCallback( function ($command, &$output) { $output = 'Depot depot 2013/06/25 stream /p4/1/depots/depot/... \'Created by Me\''; return true; } ) ); $result = $this->perforce->checkStream('depot'); $this->assertTrue($result); $this->assertTrue($this->perforce->isStream()); } public function testGetComposerInformationWithoutLabelWithoutStream() { $expectedCommand = 'p4 -u user -c composer_perforce_TEST_depot -p port print //depot/composer.json'; $this->processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedCommand)) ->will( $this->returnCallback( function ($command, &$output) { $output = PerforceTest::getComposerJson(); return true; } ) ); $result = $this->perforce->getComposerInformation('//depot'); $expected = array( 'name' => 'test/perforce', 'description' => 'Basic project for testing', 'minimum-stability' => 'dev', 'autoload' => array('psr-0' => array()), ); $this->assertEquals($expected, $result); } public function testGetComposerInformationWithLabelWithoutStream() { $expectedCommand = 'p4 -u user -p port files //depot/composer.json@0.0.1'; $this->processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedCommand)) ->will( $this->returnCallback( function ($command, &$output) { $output = '//depot/composer.json#1 - branch change 10001 (text)'; return true; } ) ); $expectedCommand = 'p4 -u user -c composer_perforce_TEST_depot -p port print //depot/composer.json@10001'; $this->processExecutor->expects($this->at(1)) ->method('execute') ->with($this->equalTo($expectedCommand)) ->will( $this->returnCallback( function ($command, &$output) { $output = PerforceTest::getComposerJson(); return true; } ) ); $result = $this->perforce->getComposerInformation('//depot@0.0.1'); $expected = array( 'name' => 'test/perforce', 'description' => 'Basic project for testing', 'minimum-stability' => 'dev', 'autoload' => array('psr-0' => array()), ); $this->assertEquals($expected, $result); } public function testGetComposerInformationWithoutLabelWithStream() { $this->setPerforceToStream(); $expectedCommand = 'p4 -u user -c composer_perforce_TEST_depot_branch -p port print //depot/branch/composer.json'; $this->processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedCommand)) ->will( $this->returnCallback( function ($command, &$output) { $output = PerforceTest::getComposerJson(); return true; } ) ); $result = $this->perforce->getComposerInformation('//depot/branch'); $expected = array( 'name' => 'test/perforce', 'description' => 'Basic project for testing', 'minimum-stability' => 'dev', 'autoload' => array('psr-0' => array()), ); $this->assertEquals($expected, $result); } public function testGetComposerInformationWithLabelWithStream() { $this->setPerforceToStream(); $expectedCommand = 'p4 -u user -p port files //depot/branch/composer.json@0.0.1'; $this->processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedCommand)) ->will( $this->returnCallback( function ($command, &$output) { $output = '//depot/composer.json#1 - branch change 10001 (text)'; return true; } ) ); $expectedCommand = 'p4 -u user -c composer_perforce_TEST_depot_branch -p port print //depot/branch/composer.json@10001'; $this->processExecutor->expects($this->at(1)) ->method('execute') ->with($this->equalTo($expectedCommand)) ->will( $this->returnCallback( function ($command, &$output) { $output = PerforceTest::getComposerJson(); return true; } ) ); $result = $this->perforce->getComposerInformation('//depot/branch@0.0.1'); $expected = array( 'name' => 'test/perforce', 'description' => 'Basic project for testing', 'minimum-stability' => 'dev', 'autoload' => array('psr-0' => array()), ); $this->assertEquals($expected, $result); } public function testSyncCodeBaseWithoutStream() { $expectedCommand = 'p4 -u user -c composer_perforce_TEST_depot -p port sync -f @label'; $this->processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedCommand), $this->equalTo(null)) ->will($this->returnValue(0)); $this->perforce->syncCodeBase('label'); } public function testSyncCodeBaseWithStream() { $this->setPerforceToStream(); $expectedCommand = 'p4 -u user -c composer_perforce_TEST_depot_branch -p port sync -f @label'; $this->processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedCommand)) ->will($this->returnValue(0)); $this->perforce->syncCodeBase('label'); } public function testCheckServerExists() { $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); $expectedCommand = 'p4 -p perforce.does.exist:port info -s'; $processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedCommand), $this->equalTo(null)) ->will($this->returnValue(0)); $result = $this->perforce->checkServerExists('perforce.does.exist:port', $processExecutor); $this->assertTrue($result); } /** * Test if "p4" command is missing. * * @covers \Composer\Util\Perforce::checkServerExists * * @return void */ public function testCheckServerClientError() { $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); $expectedCommand = 'p4 -p perforce.does.exist:port info -s'; $processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedCommand), $this->equalTo(null)) ->will($this->returnValue(127)); $result = $this->perforce->checkServerExists('perforce.does.exist:port', $processExecutor); $this->assertFalse($result); } public static function getComposerJson() { $composer_json = array( '{', '"name": "test/perforce",', '"description": "Basic project for testing",', '"minimum-stability": "dev",', '"autoload": {', '"psr-0" : {', '}', '}', '}', ); return implode($composer_json); } private function getExpectedClientSpec($withStream) { $expectedArray = array( 'Client: composer_perforce_TEST_depot', PHP_EOL, 'Update:', PHP_EOL, 'Access:', 'Owner: user', PHP_EOL, 'Description:', ' Created by user from composer.', PHP_EOL, 'Root: path', PHP_EOL, 'Options: noallwrite noclobber nocompress unlocked modtime rmdir', PHP_EOL, 'SubmitOptions: revertunchanged', PHP_EOL, 'LineEnd: local', PHP_EOL, ); if ($withStream) { $expectedArray[] = 'Stream:'; $expectedArray[] = ' //depot/branch'; } else { $expectedArray[] = 'View: //depot/... //composer_perforce_TEST_depot/...'; } return $expectedArray; } private function setPerforceToStream() { $this->perforce->setStream('//depot/branch'); } public function testCleanupClientSpecShouldDeleteClient() { $fs = $this->getMock('Composer\Util\Filesystem'); $this->perforce->setFilesystem($fs); $testClient = $this->perforce->getClient(); $expectedCommand = 'p4 -u ' . self::TEST_P4USER . ' -p ' . self::TEST_PORT . ' client -d ' . $testClient; $this->processExecutor->expects($this->once())->method('execute')->with($this->equalTo($expectedCommand)); $fs->expects($this->once())->method('remove')->with($this->perforce->getP4ClientSpec()); $this->perforce->cleanupClientSpec(); } } composer-1.0.0-beta2/tests/Composer/Test/Util/PlatformTest.php000066400000000000000000000014001267577262200242670ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Util; use Composer\Util\Platform; /** * PlatformTest * * @author Niels Keurentjes */ class PlatformTest extends \PHPUnit_Framework_TestCase { public function testWindows() { // Compare 2 common tests for Windows to the built-in Windows test $this->assertEquals(('\\' === DIRECTORY_SEPARATOR), Platform::isWindows()); $this->assertEquals(defined('PHP_WINDOWS_VERSION_MAJOR'), Platform::isWindows()); } } composer-1.0.0-beta2/tests/Composer/Test/Util/ProcessExecutorTest.php000066400000000000000000000034601267577262200256500ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Util; use Composer\Util\ProcessExecutor; use Composer\TestCase; class ProcessExecutorTest extends TestCase { public function testExecuteCapturesOutput() { $process = new ProcessExecutor; $process->execute('echo foo', $output); $this->assertEquals("foo".PHP_EOL, $output); } public function testExecuteOutputsIfNotCaptured() { $process = new ProcessExecutor; ob_start(); $process->execute('echo foo'); $output = ob_get_clean(); $this->assertEquals("foo".PHP_EOL, $output); } public function testExecuteCapturesStderr() { $process = new ProcessExecutor; $process->execute('cat foo', $output); $this->assertNotNull($process->getErrorOutput()); } public function testTimeout() { ProcessExecutor::setTimeout(1); $process = new ProcessExecutor; $this->assertEquals(1, $process->getTimeout()); ProcessExecutor::setTimeout(60); } public function testSplitLines() { $process = new ProcessExecutor; $this->assertEquals(array(), $process->splitLines('')); $this->assertEquals(array(), $process->splitLines(null)); $this->assertEquals(array('foo'), $process->splitLines('foo')); $this->assertEquals(array('foo', 'bar'), $process->splitLines("foo\nbar")); $this->assertEquals(array('foo', 'bar'), $process->splitLines("foo\r\nbar")); $this->assertEquals(array('foo', 'bar'), $process->splitLines("foo\r\nbar\n")); } } composer-1.0.0-beta2/tests/Composer/Test/Util/RemoteFilesystemTest.php000066400000000000000000000173641267577262200260230ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Util; use Composer\Util\RemoteFilesystem; class RemoteFilesystemTest extends \PHPUnit_Framework_TestCase { public function testGetOptionsForUrl() { $io = $this->getMock('Composer\IO\IOInterface'); $io ->expects($this->once()) ->method('hasAuthentication') ->will($this->returnValue(false)) ; $res = $this->callGetOptionsForUrl($io, array('http://example.org', array())); $this->assertTrue(isset($res['http']['header']) && is_array($res['http']['header']), 'getOptions must return an array with headers'); } public function testGetOptionsForUrlWithAuthorization() { $io = $this->getMock('Composer\IO\IOInterface'); $io ->expects($this->once()) ->method('hasAuthentication') ->will($this->returnValue(true)) ; $io ->expects($this->once()) ->method('getAuthentication') ->will($this->returnValue(array('username' => 'login', 'password' => 'password'))) ; $options = $this->callGetOptionsForUrl($io, array('http://example.org', array())); $found = false; foreach ($options['http']['header'] as $header) { if (0 === strpos($header, 'Authorization: Basic')) { $found = true; } } $this->assertTrue($found, 'getOptions must have an Authorization header'); } public function testGetOptionsForUrlWithStreamOptions() { $io = $this->getMock('Composer\IO\IOInterface'); $io ->expects($this->once()) ->method('hasAuthentication') ->will($this->returnValue(true)) ; $streamOptions = array('ssl' => array( 'allow_self_signed' => true, )); $res = $this->callGetOptionsForUrl($io, array('https://example.org', array()), $streamOptions); $this->assertTrue(isset($res['ssl']) && isset($res['ssl']['allow_self_signed']) && true === $res['ssl']['allow_self_signed'], 'getOptions must return an array with a allow_self_signed set to true'); } public function testGetOptionsForUrlWithCallOptionsKeepsHeader() { $io = $this->getMock('Composer\IO\IOInterface'); $io ->expects($this->once()) ->method('hasAuthentication') ->will($this->returnValue(true)) ; $streamOptions = array('http' => array( 'header' => 'Foo: bar', )); $res = $this->callGetOptionsForUrl($io, array('https://example.org', $streamOptions)); $this->assertTrue(isset($res['http']['header']), 'getOptions must return an array with a http.header key'); $found = false; foreach ($res['http']['header'] as $header) { if ($header === 'Foo: bar') { $found = true; } } $this->assertTrue($found, 'getOptions must have a Foo: bar header'); $this->assertGreaterThan(1, count($res['http']['header'])); } public function testCallbackGetFileSize() { $fs = new RemoteFilesystem($this->getMock('Composer\IO\IOInterface')); $this->callCallbackGet($fs, STREAM_NOTIFY_FILE_SIZE_IS, 0, '', 0, 0, 20); $this->assertAttributeEquals(20, 'bytesMax', $fs); } public function testCallbackGetNotifyProgress() { $io = $this->getMock('Composer\IO\IOInterface'); $io ->expects($this->once()) ->method('overwriteError') ; $fs = new RemoteFilesystem($io); $this->setAttribute($fs, 'bytesMax', 20); $this->setAttribute($fs, 'progress', true); $this->callCallbackGet($fs, STREAM_NOTIFY_PROGRESS, 0, '', 0, 10, 20); $this->assertAttributeEquals(50, 'lastProgress', $fs); } public function testCallbackGetPassesThrough404() { $fs = new RemoteFilesystem($this->getMock('Composer\IO\IOInterface')); $this->assertNull($this->callCallbackGet($fs, STREAM_NOTIFY_FAILURE, 0, 'HTTP/1.1 404 Not Found', 404, 0, 0)); } /** * @group slow */ public function testCaptureAuthenticationParamsFromUrl() { $io = $this->getMock('Composer\IO\IOInterface'); $io->expects($this->once()) ->method('setAuthentication') ->with($this->equalTo('example.com'), $this->equalTo('user'), $this->equalTo('pass')); $fs = new RemoteFilesystem($io); try { $fs->getContents('example.com', 'http://user:pass@www.example.com/something'); } catch (\Exception $e) { $this->assertInstanceOf('Composer\Downloader\TransportException', $e); $this->assertEquals(404, $e->getCode()); } } public function testGetContents() { $fs = new RemoteFilesystem($this->getMock('Composer\IO\IOInterface')); $this->assertContains('testGetContents', $fs->getContents('http://example.org', 'file://'.__FILE__)); } public function testCopy() { $fs = new RemoteFilesystem($this->getMock('Composer\IO\IOInterface')); $file = tempnam(sys_get_temp_dir(), 'c'); $this->assertTrue($fs->copy('http://example.org', 'file://'.__FILE__, $file)); $this->assertFileExists($file); $this->assertContains('testCopy', file_get_contents($file)); unlink($file); } /** * @group TLS */ public function testGetOptionsForUrlCreatesSecureTlsDefaults() { $io = $this->getMock('Composer\IO\IOInterface'); $res = $this->callGetOptionsForUrl($io, array('example.org', array('ssl' => array('cafile' => '/some/path/file.crt'))), array(), 'http://www.example.org'); $this->assertTrue(isset($res['ssl']['ciphers'])); $this->assertRegExp("|!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK|", $res['ssl']['ciphers']); $this->assertTrue($res['ssl']['verify_peer']); $this->assertTrue($res['ssl']['SNI_enabled']); $this->assertEquals(7, $res['ssl']['verify_depth']); if (PHP_VERSION_ID < 50600) { $this->assertEquals('www.example.org', $res['ssl']['CN_match']); $this->assertEquals('www.example.org', $res['ssl']['SNI_server_name']); } $this->assertEquals('/some/path/file.crt', $res['ssl']['cafile']); if (version_compare(PHP_VERSION, '5.4.13') >= 0) { $this->assertTrue($res['ssl']['disable_compression']); } else { $this->assertFalse(isset($res['ssl']['disable_compression'])); } } protected function callGetOptionsForUrl($io, array $args = array(), array $options = array(), $fileUrl = '') { $fs = new RemoteFilesystem($io, null, $options); $ref = new \ReflectionMethod($fs, 'getOptionsForUrl'); $prop = new \ReflectionProperty($fs, 'fileUrl'); $ref->setAccessible(true); $prop->setAccessible(true); $prop->setValue($fs, $fileUrl); return $ref->invokeArgs($fs, $args); } protected function callCallbackGet(RemoteFilesystem $fs, $notificationCode, $severity, $message, $messageCode, $bytesTransferred, $bytesMax) { $ref = new \ReflectionMethod($fs, 'callbackGet'); $ref->setAccessible(true); $ref->invoke($fs, $notificationCode, $severity, $message, $messageCode, $bytesTransferred, $bytesMax); } protected function setAttribute($object, $attribute, $value) { $attr = new \ReflectionProperty($object, $attribute); $attr->setAccessible(true); $attr->setValue($object, $value); } } composer-1.0.0-beta2/tests/Composer/Test/Util/SilencerTest.php000066400000000000000000000031421267577262200242540ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Util; use Composer\Util\Silencer; /** * SilencerTest * * @author Niels Keurentjes */ class SilencerTest extends \PHPUnit_Framework_TestCase { /** * Test succeeds when no warnings are emitted externally, and original level is restored. */ public function testSilencer() { $before = error_reporting(); // Check warnings are suppressed correctly Silencer::suppress(); @trigger_error('Test', E_USER_WARNING); Silencer::restore(); // Check all parameters and return values are passed correctly in a silenced call. $result = Silencer::call(function ($a, $b, $c) { @trigger_error('Test', E_USER_WARNING); return $a * $b * $c; }, 2, 3, 4); $this->assertEquals(24, $result); // Check the error reporting setting was restored correctly $this->assertEquals($before, error_reporting()); } /** * Test whether exception from silent callbacks are correctly forwarded. */ public function testSilencedException() { $verification = microtime(); $this->setExpectedException('\RuntimeException', $verification); Silencer::call(function () use ($verification) { throw new \RuntimeException($verification); }); } } composer-1.0.0-beta2/tests/Composer/Test/Util/StreamContextFactoryTest.php000066400000000000000000000217511267577262200266460ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Util; use Composer\Util\StreamContextFactory; class StreamContextFactoryTest extends \PHPUnit_Framework_TestCase { protected function setUp() { unset($_SERVER['HTTP_PROXY']); unset($_SERVER['http_proxy']); unset($_SERVER['HTTPS_PROXY']); unset($_SERVER['https_proxy']); unset($_SERVER['no_proxy']); } protected function tearDown() { unset($_SERVER['HTTP_PROXY']); unset($_SERVER['http_proxy']); unset($_SERVER['HTTPS_PROXY']); unset($_SERVER['https_proxy']); unset($_SERVER['no_proxy']); } /** * @dataProvider dataGetContext */ public function testGetContext($expectedOptions, $defaultOptions, $expectedParams, $defaultParams) { $context = StreamContextFactory::getContext('http://example.org', $defaultOptions, $defaultParams); $options = stream_context_get_options($context); $params = stream_context_get_params($context); $this->assertEquals($expectedOptions, $options); $this->assertEquals($expectedParams, $params); } public function dataGetContext() { return array( array( $a = array('http' => array('follow_location' => 1, 'max_redirects' => 20, 'header' => array('User-Agent: foo'))), array('http' => array('header' => 'User-Agent: foo')), array('options' => $a), array(), ), array( $a = array('http' => array('method' => 'GET', 'max_redirects' => 20, 'follow_location' => 1, 'header' => array('User-Agent: foo'))), array('http' => array('method' => 'GET', 'header' => 'User-Agent: foo')), array('options' => $a, 'notification' => $f = function () {}), array('notification' => $f), ), ); } public function testHttpProxy() { $_SERVER['http_proxy'] = 'http://username:p%40ssword@proxyserver.net:3128/'; $_SERVER['HTTP_PROXY'] = 'http://proxyserver/'; $context = StreamContextFactory::getContext('http://example.org', array('http' => array('method' => 'GET', 'header' => 'User-Agent: foo'))); $options = stream_context_get_options($context); $this->assertEquals(array('http' => array( 'proxy' => 'tcp://proxyserver.net:3128', 'request_fulluri' => true, 'method' => 'GET', 'header' => array('User-Agent: foo', "Proxy-Authorization: Basic " . base64_encode('username:p@ssword')), 'max_redirects' => 20, 'follow_location' => 1, )), $options); } public function testHttpProxyWithNoProxy() { $_SERVER['http_proxy'] = 'http://username:password@proxyserver.net:3128/'; $_SERVER['no_proxy'] = 'foo,example.org'; $context = StreamContextFactory::getContext('http://example.org', array('http' => array('method' => 'GET', 'header' => 'User-Agent: foo'))); $options = stream_context_get_options($context); $this->assertEquals(array('http' => array( 'method' => 'GET', 'max_redirects' => 20, 'follow_location' => 1, 'header' => array('User-Agent: foo'), )), $options); } public function testHttpProxyWithNoProxyWildcard() { $_SERVER['http_proxy'] = 'http://username:password@proxyserver.net:3128/'; $_SERVER['no_proxy'] = '*'; $context = StreamContextFactory::getContext('http://example.org', array('http' => array('method' => 'GET', 'header' => 'User-Agent: foo'))); $options = stream_context_get_options($context); $this->assertEquals(array('http' => array( 'method' => 'GET', 'max_redirects' => 20, 'follow_location' => 1, 'header' => array('User-Agent: foo'), )), $options); } public function testOptionsArePreserved() { $_SERVER['http_proxy'] = 'http://username:password@proxyserver.net:3128/'; $context = StreamContextFactory::getContext('http://example.org', array('http' => array('method' => 'GET', 'header' => array('User-Agent: foo', "X-Foo: bar"), 'request_fulluri' => false))); $options = stream_context_get_options($context); $this->assertEquals(array('http' => array( 'proxy' => 'tcp://proxyserver.net:3128', 'request_fulluri' => false, 'method' => 'GET', 'header' => array('User-Agent: foo', "X-Foo: bar", "Proxy-Authorization: Basic " . base64_encode('username:password')), 'max_redirects' => 20, 'follow_location' => 1, )), $options); } public function testHttpProxyWithoutPort() { $_SERVER['http_proxy'] = 'http://username:password@proxyserver.net'; $context = StreamContextFactory::getContext('https://example.org', array('http' => array('method' => 'GET', 'header' => 'User-Agent: foo'))); $options = stream_context_get_options($context); $expected = array( 'http' => array( 'proxy' => 'tcp://proxyserver.net:80', 'request_fulluri' => true, 'method' => 'GET', 'header' => array('User-Agent: foo', "Proxy-Authorization: Basic " . base64_encode('username:password')), 'max_redirects' => 20, 'follow_location' => 1, ), 'ssl' => array( 'SNI_enabled' => true, 'SNI_server_name' => 'example.org', ), ); if (PHP_VERSION_ID >= 50600) { unset($expected['ssl']['SNI_server_name']); } $this->assertEquals($expected, $options); } public function testHttpsProxyOverride() { if (!extension_loaded('openssl')) { $this->markTestSkipped('Requires openssl'); } $_SERVER['http_proxy'] = 'http://username:password@proxyserver.net'; $_SERVER['https_proxy'] = 'https://woopproxy.net'; $context = StreamContextFactory::getContext('https://example.org', array('http' => array('method' => 'GET', 'header' => 'User-Agent: foo'))); $options = stream_context_get_options($context); $expected = array( 'http' => array( 'proxy' => 'ssl://woopproxy.net:443', 'request_fulluri' => true, 'method' => 'GET', 'max_redirects' => 20, 'follow_location' => 1, 'header' => array('User-Agent: foo'), ), 'ssl' => array( 'SNI_enabled' => true, 'SNI_server_name' => 'example.org', ), ); if (PHP_VERSION_ID >= 50600) { unset($expected['ssl']['SNI_server_name']); } $this->assertEquals($expected, $options); } /** * @dataProvider dataSSLProxy */ public function testSSLProxy($expected, $proxy) { $_SERVER['http_proxy'] = $proxy; if (extension_loaded('openssl')) { $context = StreamContextFactory::getContext('http://example.org', array('http' => array('header' => 'User-Agent: foo'))); $options = stream_context_get_options($context); $this->assertEquals(array('http' => array( 'proxy' => $expected, 'request_fulluri' => true, 'max_redirects' => 20, 'follow_location' => 1, 'header' => array('User-Agent: foo'), )), $options); } else { try { StreamContextFactory::getContext('http://example.org'); $this->fail(); } catch (\RuntimeException $e) { $this->assertInstanceOf('RuntimeException', $e); } } } public function dataSSLProxy() { return array( array('ssl://proxyserver:443', 'https://proxyserver/'), array('ssl://proxyserver:8443', 'https://proxyserver:8443'), ); } public function testEnsureThatfixHttpHeaderFieldMovesContentTypeToEndOfOptions() { $options = array( 'http' => array( 'header' => "User-agent: foo\r\nX-Foo: bar\r\nContent-Type: application/json\r\nAuthorization: Basic aW52YWxpZA==", ), ); $expectedOptions = array( 'http' => array( 'header' => array( "User-agent: foo", "X-Foo: bar", "Authorization: Basic aW52YWxpZA==", "Content-Type: application/json", ), ), ); $context = StreamContextFactory::getContext('http://example.org', $options); $ctxoptions = stream_context_get_options($context); $this->assertEquals(end($expectedOptions['http']['header']), end($ctxoptions['http']['header'])); } } composer-1.0.0-beta2/tests/Composer/Test/Util/SvnTest.php000066400000000000000000000102141267577262200232540ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Util; use Composer\Config; use Composer\IO\NullIO; use Composer\Util\Platform; use Composer\Util\Svn; class SvnTest extends \PHPUnit_Framework_TestCase { /** * Test the credential string. * * @param string $url The SVN url. * @param string $expect The expectation for the test. * * @dataProvider urlProvider */ public function testCredentials($url, $expect) { $svn = new Svn($url, new NullIO, new Config()); $reflMethod = new \ReflectionMethod('Composer\\Util\\Svn', 'getCredentialString'); $reflMethod->setAccessible(true); $this->assertEquals($expect, $reflMethod->invoke($svn)); } /** * Provide some examples for {@self::testCredentials()}. * * @return array */ public function urlProvider() { return array( array('http://till:test@svn.example.org/', $this->getCmd(" --username 'till' --password 'test' ")), array('http://svn.apache.org/', ''), array('svn://johndoe@example.org', $this->getCmd(" --username 'johndoe' --password '' ")), ); } public function testInteractiveString() { $url = 'http://svn.example.org'; $svn = new Svn($url, new NullIO(), new Config()); $reflMethod = new \ReflectionMethod('Composer\\Util\\Svn', 'getCommand'); $reflMethod->setAccessible(true); $this->assertEquals( $this->getCmd("svn ls --non-interactive 'http://svn.example.org'"), $reflMethod->invokeArgs($svn, array('svn ls', $url)) ); } public function testCredentialsFromConfig() { $url = 'http://svn.apache.org'; $config = new Config(); $config->merge(array( 'config' => array( 'http-basic' => array( 'svn.apache.org' => array('username' => 'foo', 'password' => 'bar'), ), ), )); $svn = new Svn($url, new NullIO, $config); $reflMethod = new \ReflectionMethod('Composer\\Util\\Svn', 'getCredentialString'); $reflMethod->setAccessible(true); $this->assertEquals($this->getCmd(" --username 'foo' --password 'bar' "), $reflMethod->invoke($svn)); } public function testCredentialsFromConfigWithCacheCredentialsTrue() { $url = 'http://svn.apache.org'; $config = new Config(); $config->merge( array( 'config' => array( 'http-basic' => array( 'svn.apache.org' => array('username' => 'foo', 'password' => 'bar'), ), ), ) ); $svn = new Svn($url, new NullIO, $config); $svn->setCacheCredentials(true); $reflMethod = new \ReflectionMethod('Composer\\Util\\Svn', 'getCredentialString'); $reflMethod->setAccessible(true); $this->assertEquals($this->getCmd(" --username 'foo' --password 'bar' "), $reflMethod->invoke($svn)); } public function testCredentialsFromConfigWithCacheCredentialsFalse() { $url = 'http://svn.apache.org'; $config = new Config(); $config->merge( array( 'config' => array( 'http-basic' => array( 'svn.apache.org' => array('username' => 'foo', 'password' => 'bar'), ), ), ) ); $svn = new Svn($url, new NullIO, $config); $svn->setCacheCredentials(false); $reflMethod = new \ReflectionMethod('Composer\\Util\\Svn', 'getCredentialString'); $reflMethod->setAccessible(true); $this->assertEquals($this->getCmd(" --no-auth-cache --username 'foo' --password 'bar' "), $reflMethod->invoke($svn)); } private function getCmd($cmd) { return Platform::isWindows() ? strtr($cmd, "'", '"') : $cmd; } } composer-1.0.0-beta2/tests/Composer/Test/Util/TlsHelperTest.php000066400000000000000000000064701267577262200244210ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Util; use Composer\Util\TlsHelper; class TlsHelperTest extends \PHPUnit_Framework_TestCase { /** @dataProvider dataCheckCertificateHost */ public function testCheckCertificateHost($expectedResult, $hostname, $certNames) { $certificate['subject']['commonName'] = $expectedCn = array_shift($certNames); $certificate['extensions']['subjectAltName'] = $certNames ? 'DNS:'.implode(',DNS:', $certNames) : ''; $result = TlsHelper::checkCertificateHost($certificate, $hostname, $foundCn); if (true === $expectedResult) { $this->assertTrue($result); $this->assertSame($expectedCn, $foundCn); } else { $this->assertFalse($result); $this->assertNull($foundCn); } } public function dataCheckCertificateHost() { return array( array(true, 'getcomposer.org', array('getcomposer.org')), array(true, 'getcomposer.org', array('getcomposer.org', 'packagist.org')), array(true, 'getcomposer.org', array('packagist.org', 'getcomposer.org')), array(true, 'foo.getcomposer.org', array('*.getcomposer.org')), array(false, 'xyz.foo.getcomposer.org', array('*.getcomposer.org')), array(true, 'foo.getcomposer.org', array('getcomposer.org', '*.getcomposer.org')), array(true, 'foo.getcomposer.org', array('foo.getcomposer.org', 'foo*.getcomposer.org')), array(true, 'foo1.getcomposer.org', array('foo.getcomposer.org', 'foo*.getcomposer.org')), array(true, 'foo2.getcomposer.org', array('foo.getcomposer.org', 'foo*.getcomposer.org')), array(false, 'foo2.another.getcomposer.org', array('foo.getcomposer.org', 'foo*.getcomposer.org')), array(false, 'test.example.net', array('**.example.net', '**.example.net')), array(false, 'test.example.net', array('t*t.example.net', 't*t.example.net')), array(false, 'xyz.example.org', array('*z.example.org', '*z.example.org')), array(false, 'foo.bar.example.com', array('foo.*.example.com', 'foo.*.example.com')), array(false, 'example.com', array('example.*', 'example.*')), array(true, 'localhost', array('localhost')), array(false, 'localhost', array('*')), array(false, 'localhost', array('local*')), array(false, 'example.net', array('*.net', '*.org', 'ex*.net')), array(true, 'example.net', array('*.net', '*.org', 'example.net')), ); } public function testGetCertificateNames() { $certificate['subject']['commonName'] = 'example.net'; $certificate['extensions']['subjectAltName'] = 'DNS: example.com, IP: 127.0.0.1, DNS: getcomposer.org, Junk: blah, DNS: composer.example.org'; $names = TlsHelper::getCertificateNames($certificate); $this->assertSame('example.net', $names['cn']); $this->assertSame(array( 'example.com', 'getcomposer.org', 'composer.example.org', ), $names['san']); } } composer-1.0.0-beta2/tests/Composer/TestCase.php000066400000000000000000000042541267577262200215340ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer; use Composer\Semver\VersionParser; use Composer\Package\AliasPackage; use Composer\Semver\Constraint\Constraint; use Composer\Util\Filesystem; use Composer\Util\Silencer; abstract class TestCase extends \PHPUnit_Framework_TestCase { private static $parser; protected static function getVersionParser() { if (!self::$parser) { self::$parser = new VersionParser(); } return self::$parser; } protected function getVersionConstraint($operator, $version) { $constraint = new Constraint( $operator, self::getVersionParser()->normalize($version) ); $constraint->setPrettyString($operator.' '.$version); return $constraint; } protected function getPackage($name, $version, $class = 'Composer\Package\Package') { $normVersion = self::getVersionParser()->normalize($version); return new $class($name, $normVersion, $version); } protected function getAliasPackage($package, $version) { $normVersion = self::getVersionParser()->normalize($version); return new AliasPackage($package, $normVersion, $version); } protected static function getUniqueTmpDirectory() { $attempts = 5; $root = sys_get_temp_dir(); do { $unique = $root . DIRECTORY_SEPARATOR . uniqid('composer-test-' . rand(1000, 9000)); if (!file_exists($unique) && Silencer::call('mkdir', $unique, 0777)) { return realpath($unique); } } while (--$attempts); throw new \RuntimeException('Failed to create a unique temporary directory.'); } protected static function ensureDirectoryExistsAndClear($directory) { $fs = new Filesystem(); if (is_dir($directory)) { $fs->removeDirectory($directory); } mkdir($directory, 0777, true); } } composer-1.0.0-beta2/tests/bootstrap.php000066400000000000000000000010351267577262200202410ustar00rootroot00000000000000 * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ error_reporting(E_ALL); if (function_exists('date_default_timezone_set') && function_exists('date_default_timezone_get')) { date_default_timezone_set(@date_default_timezone_get()); } require __DIR__.'/../src/bootstrap.php'; require __DIR__.'/Composer/TestCase.php'; composer-1.0.0-beta2/tests/complete.phpunit.xml000066400000000000000000000016011267577262200215320ustar00rootroot00000000000000 ./Composer/ legacy ../src/Composer/ ../src/Composer/Autoload/ClassLoader.php